我正在尝试设计一个具有多个多对多联结表的数据库,但每个多对多都是基于以前表的级联选项。
例如:让我们从四个表及其主键开始。
样式表 - >样式ID(PK)
织物桌 - > FabricID(PK)
身体表 - > BodyID(PK)
颜色表 - > ColorID(PK)
用户选择一种Style然后选择一种Fabric,这样很容易定义多对多。
StyleFabric表 - > StyleID,FabricID(复合PK)
现在这是我感到困惑的地方。选择Style和Fabric后的用户现在可以选择Body。所以我创建了一个名为:
的表StyleFabricBody表 - > StyleID,FabricID,BodyID(复合PK)
现在,基于Style,Fabric和Body,用户可以选择颜色
StyleFabricBodyColor表 - > StyleID,FabricID,BodyID,ColorID(复合PK)
希望您现在可以看到该模式,我还需要添加5个表。
这是连接主表的正确方法吗?
答案 0 :(得分: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),
...
)
答案 1 :(得分: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