数据库架构设计 - 设计多个多个表

时间:2017-03-31 20:35:10

标签: sql-server database-design

我正在尝试设计一个具有多个多对多联结表的数据库,但每个多对多都是基于以前表的级联选项。

例如:让我们从四个表及其主键开始。

  

样式表 - >样式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个表。

这是连接主表的正确方法吗?

2 个答案:

答案 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