Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何引用另一个表中的多行?_Sql_Database_Database Design - Fatal编程技术网

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,并使用复合外键。