如何在另一个表中引用多行?

时间:2012-05-29 06:59:41

标签: sql database database-design

我们假设我有一个角色表,例如,

Roles
-----
ID  Name
0   Salesman
1   Client
2   Manager

让我们假设这些角色不是互相排斥的:也就是说,一个人可以同时是推销员,客户和经理。

如果我的Person表格中包含Role字段,我如何在Roles表中引用多行?

3 个答案:

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