我们假设我有一个角色表,例如,
Roles
-----
ID Name
0 Salesman
1 Client
2 Manager
让我们假设这些角色不是互相排斥的:也就是说,一个人可以同时是推销员,客户和经理。
如果我的Person
表格中包含Role
字段,我如何在Roles
表中引用多行?
答案 0 :(得分:6)
您引入了一个引用两个原始表的新表:
CREATE TABLE PersonRoles (
PersonID int not null,
RoleID int not null,
constraint PK_PersonRoles PRIMARY KEY (PersonID,RoleID),
constraint FK_PersonRoles_Persons FOREIGN KEY (PersonID) references Person (ID),
constraint FK_PersonRoles_Roles FOREIGN KEY (RoleID) references Role (ID)
)
假设多重性为m:n
,则上述内容是正确的。我做了一个假设(未在你的问题中列出),不止一个人可以是例如推销员。
答案 1 :(得分:1)
您必须创建另一个包含(至少)两列的表:
PersonId, RoleId
所以你可以插入(例如)
1, 0
1, 2
2, 1
并且您的id = 1的人将是推销员和经理,而身份= 2的人将是客户。
答案 2 :(得分:1)
为此,您需要建立“n-m关系”。你需要一个额外的桌子,例如。名为“person_role”,包含其他表的外键:
人< ===> PersonRole< ===>作用
所以你将有3个表:
Person
------------
ID
Name
etc.
Role
---------
ID
Name
PersonRole
------------
PersonID
RoleID
您还应该将PersonID和RoleID设置为唯一的复合键,以避免任何重复
/ Carsten