2

書類の入った箱が保管される 3 階建ての倉庫のモデリングを担当しています。方程式には、行、列、および棚があります。

更に:

床/行/列/棚の組み合わせによっては、2 つのボックスを格納するものもあれば、3 つのボックスを格納するものもあります。

一部の行には、通常の数の列がありません。

彼らは、ユーザーがボックスをスキャンするときにボックスがどこに移動するかを示すラベルを (一度に 20 個ずつ) 印刷するようにアプリケーションを自動インクリメントすることを望んでいます。

MSSql データベースを構築し、考えられるすべての組み合わせを埋めて、例外データを差し引くことを考えていました。(ループにvb.net2005を使用して充填を行います)次に、テーブルのsmalldatetimeまたはおそらくタイムスタンプ列に基づいて、spotFilled列が設定されていない次のものを取得します。

これは機能しますか?より良い方法はありますか?

(次のステップでは、一度に 20 個をブロックして、2 人のユーザーが同じフロア/行/列で互いにぶつかることなくボックスをスキャンできるようにします。ほとんどのフロア/行/列/棚のコンボは 21 個のボックスを格納します。1 つのバンプはおそらくわかりました。また、受け取った順序とほぼ同じ順序でボックスを希望しています)

MSSQL サーバーと VS2005 は私の作業環境に既に存在するため、これらは私が最もよく知っているツールです。

4

3 に答える 3

1

簡単なスキーマはないと仮定しているので、位置ベクトル全体を単純な整数インデックスにマップできますか? たとえば、常に 3 つのボックスを許可する最初の列である場合でも、f3r26c26s1b3 ベクトルを整数にマップできます。

それ以外の場合、最良の解決策は、すべての組み合わせを保存しないことです。代わりに、実際には各棚に 3 つのボックスが格納され、3 つ目のボックスの「spotFilled」にダミー値 (-1 程度; NULL 以外 = 未充填) を設定すると仮定します。これにより、これを通常の長方形配列として扱うことができます。配列がほぼ規則的であるためにのみ機能しますが、実際の IT は、例外に対する例外を認識することがすべてです。

于 2009-05-22T15:17:08.437 に答える
1

通常のテーブルをギザギザではないかのようにしてみませんか (列: 床、行、列、棚、ボックス)。データベースが必要とする大きさを最小限に抑えるようにデータに適切な境界を設定し、偽のボックスを偽の場所に保存します。

于 2009-05-22T15:19:21.803 に答える
0
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
于 2009-05-23T13:50:20.793 に答える