2017-03-31 4 views
0

多対多のジャンクションテーブルを複数持つDBを設計しようとしていますが、多対多のテーブルは前のテーブルに基づいたカスケードオプションです。DBスキーマ設計 - 複数の多対多のテーブルの設計

例:主キーを持つ4つのテーブルから始めましょう。

スタイルテーブル - >スタイルID(PK)
ファブリックテーブル - > FabricID(PK)
ボディテーブル - > BodyID(PK)
カラーテーブル - > ColorID(PK)

ユーザはスタイルを選択してからファブリックを選択するので、多対多の定義が容易です。

StyleFabricテーブル - 私は混乱してしまうところ> StyleID、FabricID(コンポジットPK)

は今、これがあります。スタイルとファブリックを選択したユーザは、ボディを選択できるようになりました。

StyleFabricBodyテーブル - > StyleID、FabricID、BodyID(コンポジットPK)

今のスタイルに基づいて、ファブリックやボディ、ユーザーが色

を選択することができます。だから私はと呼ばれるテーブルを作成しました

StyleFabricBodyColorテーブル - > StyleID、FabricID、BodyID、ColorID(コンポジットPK)

うまくいけば、でパターンを見ることができます今私は追加する5つのテーブルがあります。

これは正しい方法でメインテーブルを接続しますか?このような

+0

- UserIDとスタイル、ファブリック、ボディ、色などを表す9つのIDのすべてを含むアイテム(またはユーザーの選択と呼ぶもの)。これは多対多の関係にはなりません。 – Anand

+1

古いコメントを削除しても、カスケードの選択については少し間違っていたので、明確にするために、ユーザーがスタイルXを選択すると、ファブリックY、Z、Aに限定され、布Y、彼らはボディB、C、またはDなどに制限されていますか? – mallan1121

+0

@ mallan1121はい、それはまさに私が意味していたものです。 – user6776148

答えて

0

何かが十分でなければなりません、あなたは一つのテーブルよりも多くを必要としない:

create table dbo.UserChoice 
(
    Id int identity(1, 1) primary key nonclustered, 

    UserId int not null, 

    StyleId int not null, 
    FabricId int not null, 
    BodyId int not null, 
    ColorId int not null, 
    ..., 

    constraint FK_UserChoice_UserId foreign Key (UserId) references dbo.User (Id), 

    constraint FK_UserChoice_StyleId foreign Key (StyleId) references dbo.Style (Id), 
    constraint FK_UserChoice_FabricId foreign Key (FabricId) references dbo.Fabric (Id), 
    constraint FK_UserChoice_BodyId foreign Key (BodyId) references dbo.Body (Id), 
    constraint FK_UserChoice_ColorId foreign Key (ColorId) references dbo.Color (Id), 
    ... 
) 
0

だから私は次のようにあなたが構造を持ってお勧め:あなたは、単一のテーブルを持っている可能性が

CREATE TABLE Choosable 
(
    ChoosableId int,   -- This is PK 
    Name  varchar(10), -- This can have values 'Style', 'Fabric', 'Body', 'Color' 
) 

Data in this table 

Style1 
Style2 
Fab1 
Fab2 
Fab3 
Body1 
Body2 
Blue 
Red 
Gray 


CREATE TABLE Choices 
(
    ChoiceId  int,  -- This is PK 
    ChoosableId int,  -- This is FK to Choosable.ChoosableId 
    ParentId  int  -- This is FK to ChoiceId 
) 

Structure for this table can support below data 

Style1 
    Fab1 
     Body1 
      Red 
      Blue 
     Body2 
      Red 
    Fab2 
     Body1 
      Blue 
      Gray 
      Red 
関連する問題