1

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

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

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

如果我有一个Person带有Role字段的表,我如何能够引用Roles表中的多行?

4

3 回答 3

7

您引入了一个引用两个原始表的新表:

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,以上是正确的。我做了一个假设(在你的问题中没有列出),一个以上的人可以是例如推销员。

于 2012-05-29T07:02:51.580 回答
1

您必须创建另一个具有(至少)两列的表:

PersonId, RoleId

所以你可以插入(例如)

1, 0
1, 2
2, 1

id=1 的人将是销售员和经理,而 id=2 的人将是客户。

于 2012-05-29T07:02:53.367 回答
1

为此,您需要建立“nm 关系”。你需要一张额外的桌子,例如。称为“person_role”,其中包含其他两个表的外键:

人物 <===> 人物角色 <===> 角色

所以你将有3张桌子:

Person
------------
ID
Name
etc.

Role
---------
ID
Name

PersonRole
------------
PersonID
RoleID

您还应该将 PersonID 和 RoleID 设置为唯一的复合键,以避免任何重复

/ 卡斯滕

于 2012-05-29T07:06:28.210 回答