2009-06-17 10 views
1

私は在庫を追跡しなければならないショッピングカートを持っており、これには属性を持つ在庫が含まれています。たとえば、次のようフィールドをアトミ​​ックなままにするためにテーブルを構造化するにはどうすればよいですか?

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

これらのフィールドは、現在のデータベースとIDにコンマで区切られているのであろう:

各番号は特定の属性(1 =青、3 =小さなを表す
1,3 
1,4 
1,5 
2,3 

)。

blue, small, long-sleeved 
:問題は、これは、その後のような項目の無限に多くの組み合わせがあり得るとして、データがデータベースでアトミックではありませんが、私は、テーブルを構築する方法を考えることができないようで作業することが非常に困難になることです

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

+0

あなたの持つ属性は何ですか? 私はバイナリソリューションについて考えます。 –

+0

あなたはいくつの属性を持っていますか? –

+0

潜在的に多くの問題があります。それらの数は任意で – xenon

答えて

4

表:シャツ{shirt_id}

表:ShirtAttributeDefinitions {ATTRIBUTE_ID、attribute_description}

表:ShirtAttribute {shirt_id、ATTRIBUTE_ID}

この方法、あなたは、レコードを追加することによって、新しいShirtAttributesを定義しておくことができますテーブル:ShirtAttributeDefinitions。

例:{shirt_id:1}、{shirt_id:2}:{ATTRIBUTE_ID:1、attribute_description:青}、{ATTRIBUTE_IDを

あなたは5シャツ属性を有する

次の2枚のシャツを持っています:2、attribute_description:small}、{attribute_id:3、attribute_description:ladies}、{attribute_id:4、attribute_description:red}、{attribute_id:5、attribute_description:men}

最初のシャツは青い小さな女性です2番目は赤いメンズシャツです。あなたのShirtAttributeテーブルには、次のような繰り返しがあります:

{シャツID:1、属性ID:1}、{シャツID:1、アトリビュートID:2}、{シャツID:1、アトリビュートID:3}、{シャツID:2、アトリビュートID: 4}、{shirt_id:2、attribute_id:5}

この方法は機能しますが、Shirtテーブルのこれらの属性フィールドを作成することをお勧めします。こうすることで、シャツに「男性」と「女性」の両方の属性が設定されていないことを確認できます。この方法は、あなたの質問に厳密に従うだけの汚いアプローチです。

jrh。

+0

+1です。これは実際にはRDBMSでこれを行う「最もクリーンな」方法です。新しい属性は後でスキーマを変更することなく追加できます。しかし、あなたが言うように、残念ながら制約を強制するいくつかの機会を失うことになります。確かに –

+0

。ショッピングカートのような一般的なアプリケーションは、このような一般性を必要としません。 – jrharshath

+0

「シャツ」という表は、シャツが意味する例のように製品表を参照していますか?潜在的に多くの種類の製品が存在する可能性があります。 – xenon

1

属性テーブルには何が問題なのですか?

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

+0

確かに、これは私がお勧めする方法でしょう。もちろん、この方法には関連性のない一般性があります。 – jrharshath

+0

これは、複数の属性の在庫を保持するという問題を解決しません。属性テーブルには「小」と「青」がありますが、「小青」シャツの在庫を保持する必要があります。 – xenon

+0

@ [キセノン]:小&青が "小青"とどのように違うかを説明してください –