SQL如何处理多对多关系

SQL如何处理多对多关系,sql,database,many-to-many,relationship,Sql,Database,Many To Many,Relationship,我有两个表,它们有很多关系: Player(personID, school) Team(teamID, name) 我将使用什么代码创建名为playerTeam的关联实体表 我尝试了以下方法: CREATE TABLE ( playerID INT NOT NULL, teamID INT NOT NULL, PRIMARY KEY(playerID, teamID) ); 我不知道如何在这个实例中连接表。创建表时不指定某种关系,除非使用外键。 在您的情况下,查询中实际上缺少表名,应该是

我有两个表,它们有很多关系:

Player(personID, school)
Team(teamID, name)
我将使用什么代码创建名为playerTeam的关联实体表

我尝试了以下方法:

CREATE TABLE
(
playerID INT NOT NULL, 
teamID INT NOT NULL,
PRIMARY KEY(playerID, teamID)
);

我不知道如何在这个实例中连接表。

创建表时不指定某种关系,除非使用外键。 在您的情况下,查询中实际上缺少表名,应该是这样的

CREATE TABLE `playerTeam`
(
`playerID` INT NOT NULL, 
`teamID` INT NOT NULL,
PRIMARY KEY(`playerID`, `teamID`)
);
试试这个:

CREATE TABLE teamPlayer
(
playerID INT NOT NULL, 
teamID INT NOT NULL,
PRIMARY KEY(playerID, teamID)
);

alter table teamPlayer
add constraint 
    fk_teamPlayer__Player foreign key(playerID) references Player(personID);

alter table teamPlayer
add constraint 
    fk_teamPlayer__Team foreign key(teamID) references Team(teamID);
或者这个:

CREATE TABLE teamPlayer
(
playerID INT NOT NULL, 
teamID INT NOT NULL,
PRIMARY KEY(playerID, teamID),

constraint fk_teamPlayer__Player
foreign key(playerID) references Player(personID),

constraint fk_teamPlayer__Team 
foreign key(teamID) references Team(teamID)

);
如果不需要显式命名外键,可以使用以下方法:

CREATE TABLE teamPlayer
(
playerID INT NOT NULL references Player(personID), 
teamID INT NOT NULL references Team(teamID),
PRIMARY KEY(playerID, teamID)
);

所有主要的RDBMS在关系DDL上都非常符合ANSI SQL。每个人都一样

创建然后更改(显式命名外键):

  • Postgresql:
  • MySQL:
  • 甲骨文:
  • SQL Server:
创建(显式命名的外键):

  • Postgresql:
  • MySQL:
  • 甲骨文:
  • SQL Server:
创建(自动命名外键):

  • Postgresql:
  • MySQL:
  • 甲骨文:
  • Sql Server:

您还应该指出正在使用的数据库。SQL Server、MySQL、Oracle可能……根据您使用的数据库在表上创建外键约束。很抱歉,在标题中添加了数据库类型。您应该看看“透视表”。您需要创建第三个表并添加两个1对多的关系。这不完全正确。这取决于使用的是哪个数据库引擎,然后是哪个存储引擎。您可以使用外键链接它们。这是不正确的。外键关系也必须存在,以确保您也有一个基于约束的表。一定要创建外键。