我有两个父表,BusinessGroup和SocialGroup,以及一个子表,Members。会员可以属于任何一方,但不能同时属于两者。
据我所知,构建子表有两种选择。
选项1:为ParentType包含一个字段,为ParentID包含另一个字段。 ParentType将是枚举(Business,Social),ParentID将是相应父表的PK。
选项2:包括BusinessGroupID的字段,以及SocialGroupID的另一个字段。在这种情况下,字段需要可以为空,并且只有一个字段可以包含值。
关于哪种方法最好的想法?
我在MySQL中尝试了选项1,并从孩子创建了两个外键给父母。我插入值时遇到了麻烦,因为MySQL期望在BOTH父表中有相应的值。
作为一个补充问题:如果我有更多的父母,例如,情况如何变化,例如: 6?
谢谢!
答案 0 :(得分:1)
“父表”可能是用词不当 - 在关系模型中我会翻转你的关系。例如使成员成为主记录表,以及允许1-1映射的连接表,因此具有成员ID的PK或任何正确的字段,并映射到BusinessGroup或SocialGroup中的FK。
答案 1 :(得分:1)
CREATE TABLE Group (
GroupID integer NOT NULL
, Name varchar(18)
, Description varchar(18)
, GroupType varchar(4) NOT NULL
-- all columns common to any group type
);
ALTER TABLE Group ADD CONSTRAINT pk_Group PRIMARY KEY (GroupID) ;
CREATE TABLE BusinessGroup (
GroupID integer NOT NULL
-- all columns specific to business groups
);
ALTER TABLE BusinessGroup
ADD CONSTRAINT pk_BusinessGroup PRIMARY KEY (GroupID)
, ADD CONSTRAINT fk1_BusinessGroup FOREIGN KEY (GroupID) REFERENCES Group(GroupID) ;
CREATE TABLE SocialGroup (
GroupID integer NOT NULL
-- all columns specific to social groups
);
ALTER TABLE SocialGroup
ADD CONSTRAINT pk_SocialGroup PRIMARY KEY (GroupID)
, ADD CONSTRAINT fk1_SocialGroup FOREIGN KEY (GroupID) REFERENCES Group(GroupID) ;
CREATE TABLE Person (
PersonID integer NOT NULL
, GroupID integer NOT NULL
);
ALTER TABLE Person
ADD CONSTRAINT pk_Person PRIMARY KEY (PersonID)
, ADD CONSTRAINT fk1_Person FOREIGN KEY (GroupID) REFERENCES Group(GroupID) ;