1

在庫を追跡する必要があるショッピング カートがあり、これには属性付きの在庫が含まれます。例えば:

shirt
 -- blue, small  = 50
 -- blue, medium = 22
 -- blue, large  = 53
 -- red,  small  = 15
 etc...

これらのフィールドは現在、データベース内でカンマで区切られており、ID は次のようになります。

1,3
1,4
1,5
2,3

ここで、各数字は特定の属性を表します (1 = 青、3 = 小)。問題は、データがデータベース内でアトミックではないため、これを操作するのが非常に難しくなることですが、次のようなアイテムの組み合わせが無限にある可能性があるため、テーブルを構造化する方法を考えることができません。

blue, small, long-sleeved

この情報をデータベースに保存するより良い方法を提案できる人はいますか? ルックアップ テーブルを使用することを考えましたが、属性の数が異なるため、これは機能しません。

4

2 に答える 2

4

表: シャツ { shirt_id }

表: ShirtAttributeDefinitions{ attribute_id , attribute_description }

表: ShirtAttribute{ shirt_id , attribute_id }

このように、Table:ShirtAttributeDefinitions にレコードを追加することで、新しい ShirtAttributes を定義し続けることができます。

例:

あなたは 2 枚のシャツを持っています: {shirt_id:1}, {shirt_id:2}

シャツの属性が 5 つあります。 , attribute_description:men }

最初のシャツは青い小さなレディース シャツで、2 番目のシャツは赤いメンズ シャツです。したがって、ShirtAttribute テーブルには次のレコードが含まれます。

{shirt_id:1, attribute_id:1}, {shirt_id:1, attribute_id:2}, {shirt_id:1, attribute_id:3}, {shirt_id:2, attribute_id:4}, {shirt_id:2, attribute_id:5}

このアプローチは機能しますが、シャツ テーブルのこれらの属性フィールドを作成するのが最善です。このようにして、シャツに「男性」属性と「女性」属性の両方が含まれないようにすることができます。この方法は、質問に厳密に準拠する単なる汚いアプローチです。

ジュニア。

于 2009-06-17T13:26:24.753 に答える
1

属性テーブルの何が問題になっていますか?

create table Attributes (
    Id int not null identity etc,
    CartItemId int not null foreign-key etc,
    Name nvarchar(32),
    Value nvarchar(32)
)

?

于 2009-06-17T13:34:08.980 に答える