Sql 如何引用另一个表中的多行?
假设我有一个角色表,例如Sql 如何引用另一个表中的多行?,sql,database,database-design,Sql,Database,Database Design,假设我有一个角色表,例如 Roles ----- ID Name 0 Salesman 1 Client 2 Manager 我们还假设这些角色并不是相互排斥的:也就是说,一个人可以同时成为推销员、客户和经理 如果我有一个带有角色字段的Person表,我如何能够引用Roles表中的多行?您将引入一个引用两个原始表的新表: CREATE TABLE PersonRoles ( PersonID int not null, RoleID int not null,
Roles
-----
ID Name
0 Salesman
1 Client
2 Manager
我们还假设这些角色并不是相互排斥的:也就是说,一个人可以同时成为推销员、客户和经理
如果我有一个带有角色字段的Person表,我如何能够引用Roles表中的多行?您将引入一个引用两个原始表的新表:
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,则上述结果是正确的。我假设您的问题中没有列出一个人可以是多人,例如销售员。您引入了一个新表,该表引用了两个原始表:
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,则上述结果是正确的。我假设您的问题中没有列出多个人,例如销售员。您必须创建另一个至少有两列的表:
PersonId, RoleId
因此,您可以插入例如
1, 0
1, 2
2, 1
id=1的人将是销售员和经理,id=2的人将是客户。您必须创建另一个至少有两列的表:
PersonId, RoleId
因此,您可以插入例如
1, 0
1, 2
2, 1
id=1的人将是销售员和经理,id=2的人将是客户。要使其起作用,您需要建立n-m关系。您需要一个额外的表,例如名为person_role的表,该表包含其他两个表的外键: 个人角色 因此,您将有3个表:
Person
------------
ID
Name
etc.
Role
---------
ID
Name
PersonRole
------------
PersonID
RoleID
您还应该将PersonID和RoleID设置为唯一的复合键,以避免重复
/卡斯滕要使其起作用,您需要建立n-m关系。您需要一个额外的表,例如名为person_role的表,该表包含其他两个表的外键: 个人角色 因此,您将有3个表:
Person
------------
ID
Name
etc.
Role
---------
ID
Name
PersonRole
------------
PersonID
RoleID
您还应该将PersonID和RoleID设置为唯一的复合键,以避免重复
/Carsten如何引用PersonRoles表中的行?没有ID,因为主键是复合键。例如,您将如何在其他表中引用PersonRole?如果您需要从其他表中引用它,那么您有两个选择-引入代理ID列,如果您对此感到满意的话,或者在另一个表中同时包含PersonID和RoleID并使用复合外键。如何引用PersonRoles表中的行?没有ID,因为主键是复合键。例如,如何在其他表中引用PersonRole?如果需要从其他表中引用PersonRole,那么您有两个选择—引入代理ID列(如果您对此感到满意),或者在其他表中同时包含PersonID和RoleID,并使用复合外键。