2011-09-21 14 views
0

私は数日間この問題の解決策を探していましたが、私が望むことを達成するための「ベストプラクティス」や良い説明は見つかりませんでした。データベース設計 - 複数のオブジェクトタイプが階層化されていますか?

私は次の表で構成されたデータベースを持っているとします(例のみ)。

Customers (Fields: Id, CustomerName, Location) 

Products (Fields: Id, ProductName, ProductCode) 

Groups (Fields: Id, GroupName) 

これらをリンクして、ツリービューに表示する必要があります。例えば;

Customer1 
    | 
    |-Group1 
    | |-Product1 
    | |-Product2 
    | 
    |-Group2 
     |-Product2 
     |-Product3 
     |-Group3 
       | 
       |-Product1 
       |-Product4 

これは単なる例です。実際のソリューションは他のタイプから成り立っています。

製品はいくつかの場所で発生する可能性があるため、階層データを表示するには「リンクテーブル」 を作成する必要があります。

私はこのような別のテーブルを作成しました。

Id (int) 
ParentId (int) 
ObjectType (int) 
GroupId (int) 
ProductId (int) 
CustomerId (int) 

理由は、どのデータベースでアイテム名などがツリービューに表示されるかを確認する必要があることを知ることです。

私の質問:このデータベースを設計する他の方法はありますか? LINQなどを使用してC#で開発しています。

答えて

0

あなたの例から、ツリーの各レベルは新しいリンクテーブルにする必要があります。

グループ1のコンテンツを複数の顧客に繰り返しても、グループ1のコンテンツも繰り返されている場合は表示されません。しかし、私はgroup1の内容は、どの顧客が関連しても同じであると仮定します。

あなたが本当に何にも何かをリンクすることができれば、その後のobjectTypeが進むべき道である...しかし、あなたのようなものだろう:グループオブジェクトがちょうど(今)プレースホルダになります

parentId 
ParentObjectType 
childId 
childObjectType 
+0

をしますより良い見通しのために論理的にグループ化する。顧客は、私のユーザーが製品をグループ化する目的、場所、場所が異なる場合があります。 私のテーブルにchildId/childObjectTypeを持つために得られるものは何ですか? データベースにクラスオブジェクトを格納することができれば、はるかに簡単になるはずです:) – Peter

関連する問題