Как я могу смоделировать эти неровные данные? - PullRequest
2 голосов
/ 22 мая 2009

Я отвечаю за моделирование 3-х этажного склада, где будут храниться коробки с документами. В уравнении есть строки, столбцы и полки.

дополнительно:

В некоторых комбинациях «пол / ряд / колонна / полка» хранится 2 коробки, в некоторых - 3.

некоторые строки не имеют нормального количества столбцов.

Они хотят, чтобы мое приложение автоматически увеличивало печать этикеток (по 20 за раз), указывающих, куда попадают ящики, когда пользователь просматривает их. Таким образом, поле 1 сканируется будет печатать f1r1c1s1b1 поле 2 будет печатать f1r1c1s1b2 ... f3r26c26b3

Я думал о создании базы данных MSSql, заполнении ее всеми возможными комбинациями и вычитании данных об исключениях. (использование vb.net2005 для циклов для заполнения) затем, основываясь на столбце smalldatetime или возможно timestamp в таблице, просто возьмите следующий, для которого не задан столбец spotFilled.

это будет работать? есть ли лучший способ?

(следующим шагом является одновременное блокирование 20, чтобы 2 пользователя могли сканировать ящики без столкновения друг с другом на одном и том же этаже / ряду / столбце, большинство комбинаций этаж / ряд / столбец / полка хранят 21 ящик, 1 удар вероятно, все будет в порядке. Также они хотели бы, чтобы коробки находились примерно в том же порядке, что и они)

Сервер MSSQL и VS2005 уже присутствуют в моей рабочей среде, так что это инструменты, с которыми я больше всего знаком.

Ответы [ 3 ]

1 голос
/ 22 мая 2009

Почему бы просто не иметь нормальную таблицу, как если бы она была неровной (столбцы: Этаж, Ряд, Столбец, Полка, Ящик); установите для данных соответствующие границы, которые минимизируют размер необходимого дБ, а затем просто храните поддельные коробки в поддельных местах.

1 голос
/ 22 мая 2009

Я предполагаю, что нет тривиальной схемы, поэтому вы можете отобразить весь вектор местоположения в простой целочисленный индекс? Например, если это всегда первый столбец, который допускает 3 поля, вы все равно можете отобразить вектор f3r26c26s1b3 на целое число.

В противном случае, лучшее решение, вероятно, не хранить каждую комбинацию. Вместо этого предположим, что каждая полка на самом деле хранит 3 блока и задает для «spotFilled» третьего блока фиктивное значение (-1 или около того; все, кроме NULL = не заполнено). Это позволит вам рассматривать это как обычный прямоугольный массив. Это работает только потому, что ваш массив почти регулярный, но эй - в реальных ИТ-отделах все сводится к распознаванию исключений из исключений

0 голосов
/ 23 мая 2009
Public Function SecondFloor() As List(Of List(Of bDatafield))
    Dim result As New List(Of List(Of bDatafield))
    For Aisle As Short = 1 To MaxAisle
        For Column As Short = 1 To MaxColumn
            If Not SecondFloorExceptions(Aisle, Column) Then
                For shelf As Short = 1 To MaxShelf
                    For Position As Short = 1 To MaxPositions
                        Dim Location As New List(Of bDatafield)
                        Location.Add(MakeNewField("Floor", Floor2))
                        Location.Add(MakeNewField("Aisle", Aisle.ToString))
                        Location.Add(MakeNewField("Column", Column.ToString))
                        Location.Add(MakeNewField("Shelf", shelf.ToString))
                        Location.Add(MakeNewField("Position", Position.ToString))
                        result.Add(Location)
                    Next
                Next

            End If
        Next
    Next
    Return result
End Function

Public Function MakeNewField(ByVal column As String, ByVal value As String) As bDatafield
    MakeNewField = New bDatafield(column, New Nullable(Of Integer))
    MakeNewField.SqlColumnTransformer = New TransformField(AddressOf MapSqlColumn)
    MakeNewField.Value = value
End Function

Public Function SecondFloorExceptions(ByVal Aisle As Short, ByVal column As Short) As Boolean
    If column > MinAisleLength Then
    ElseIf column > MaxColumn Then
        SecondFloorExceptions = True
    Else
        Select Case Aisle
            Case 2 ''//Items with 39
                If column > 39 Then SecondFloorExceptions = True
            Case 3 To 10, 26 To 30, 32 To 38 ''//Items with 41
                If column > 41 Then SecondFloorExceptions = True
            Case 11 ''//Items with 32
                If column > 32 Then SecondFloorExceptions = True
            Case 12, 13 ''//Items with 38
                If column > 38 Then SecondFloorExceptions = True
            Case 14 To 24 ''//Items with 36
                If column > 36 Then SecondFloorExceptions = True
            Case 25, 31 ''//Item with 35
                If column > 35 Then SecondFloorExceptions = True

        End Select
    End If
End Function

Затем я сбросил его в базу данных с помощью:

Public Sub InsertLocationRow(ByVal cn As bInheritance.bCnNativeMs _
        , ByVal data As List(Of bDatafield))
    Dim leftSide As String = "insert into " + My.Settings.ProjectSchema + "." + My.Settings.tblLocations + "("
    Dim rightSide As String = " values ("
    Dim first As Boolean = True
    For index As Integer = 0 To data.Count - 1
        If data(index).isValid Then
            If Not first Then
                leftSide += ","
                rightSide += ","
            End If
            leftSide += data(index).SqlColumn()
            rightSide += BLib.AddQSafe(data(index).Value, True)
            first = False
        End If

    Next
    leftSide += ")"
    rightSide += ")"

    cn.ExeNonQuery(leftSide + rightSide)
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...