Mysql 如何在同一个表中使用不同的变量引用实体两次?
我真的希望我使用了正确的词汇,因为我通常不会用英语 我的问题如下:我想创建一个表,该表引用另一个表中的同一实体两次,但变量不同。 具体来说,我想创建一个名为“matches”的表,该表在名为“club”的表中两次引用实体“name”,因为一场体育比赛显然有两支球队参加。这就是我试图做的:Mysql 如何在同一个表中使用不同的变量引用实体两次?,mysql,sql,reference,Mysql,Sql,Reference,我真的希望我使用了正确的词汇,因为我通常不会用英语 我的问题如下:我想创建一个表,该表引用另一个表中的同一实体两次,但变量不同。 具体来说,我想创建一个名为“matches”的表,该表在名为“club”的表中两次引用实体“name”,因为一场体育比赛显然有两支球队参加。这就是我试图做的: CREATE TABLE aclub ( clubname varchar(100), stadium varchar(100), foundingdate integer, P
CREATE TABLE aclub (
clubname varchar(100),
stadium varchar(100),
foundingdate integer,
PRIMARY KEY (clubname, stadium) ) ;
CREATE TABLE amatches (
matchnr integer PRIMARY KEY,
place varchar(100) REFERENCES aclub(stadium),
clubname1 varchar(100) REFERENCES aclub(clubname),
clubname2 varchar(100) REFERENCES aclub(clubname) ) ;
我得到的错误如下:
错误:没有唯一约束匹配引用表“aclub”的给定键
使用合成主键。这确实使数据模型的设计和使用更加容易:
CREATE TABLE aclub (
aclubId int auto_increment PRIMARY KEY,
clubname varchar(100),
stadium varchar(100),
foundingdate integer,
UNIQUE (clubname, stadium)
) ;
CREATE TABLE amatches (
matchnr integer auto_increment PRIMARY KEY,
aclubid integer,
foreign key (aclubid) references aclub(aclubid)
) ;
您的具体问题是,主键中的所有列都需要包含在外键定义中。但是为什么要麻烦呢?只需为键使用自动递增的id,并查找其他字段所需的信息
CREATE TABLE aclub (
id INT AUTO_INCREMENT PRIMARY KEY,
clubname varchar(100),
stadium varchar(100),
foundingdate integer,
UNIQUE (clubname),
UNIQUE (stadium)
) ;
CREATE TABLE amatches (
matchnr INTEGER AUTO_INCREMENT PRIMARY KEY,
club1 INTEGER REFERENCES aclub(id),
club2 INTEGER REFERENCES aclub(id),
place INTEGER REFERENCES aclub(id)
) ;
因此,正如在您的问题中一样,您有三个对aclub表的引用。但是现在我们使用整数而不是varchar,这减少了冗余显示您的模式。
aclub
中的clubname
列需要是唯一的
(即主键
或唯一约束
)。不能创建引用非唯一列的外键。要么使该列唯一
或主键
,要么将引用的列更改为唯一列。@Siyualclubname
是一个主键
,但是我在aclub
中有两个主键
,它们都在匹配中引用。也许我用错代码了<代码>主键(俱乐部名称、体育场)
。我将编辑OP以提供更多信息。@PM77-1“模式”是指我的ERM吗?对不起,我的英语在这方面真的很差。谢谢。这在aclub
表中运行良好,但我需要amatches
包含两个不同的clubnames,我认为这一个不能做到这一点。基本上,我现在的问题是,我需要amatches
来显示来自两个不同俱乐部的2个clubname
s或aclubid
s。然而,我不知道如何两次引用两个实体,但变量不同。@hacker1337忍者。如果俱乐部有不同的体育场,则允许在aclub
中有多个俱乐部。