Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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
Mysql 如何在同一个表中使用不同的变量引用实体两次?_Mysql_Sql_Reference - Fatal编程技术网

Mysql 如何在同一个表中使用不同的变量引用实体两次?

Mysql 如何在同一个表中使用不同的变量引用实体两次?,mysql,sql,reference,Mysql,Sql,Reference,我真的希望我使用了正确的词汇,因为我通常不会用英语 我的问题如下:我想创建一个表,该表引用另一个表中的同一实体两次,但变量不同。 具体来说,我想创建一个名为“matches”的表,该表在名为“club”的表中两次引用实体“name”,因为一场体育比赛显然有两支球队参加。这就是我试图做的: CREATE TABLE aclub ( clubname varchar(100), stadium varchar(100), foundingdate integer, P

我真的希望我使用了正确的词汇,因为我通常不会用英语

我的问题如下:我想创建一个表,该表引用另一个表中的同一实体两次,但变量不同。 具体来说,我想创建一个名为“matches”的表,该表在名为“club”的表中两次引用实体“name”,因为一场体育比赛显然有两支球队参加。这就是我试图做的:

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
列需要是
唯一的
(即
主键
唯一约束
)。不能创建引用非唯一列的
外键
。要么使该列
唯一
主键
,要么将引用的列更改为唯一列。@Siyual
clubname
是一个
主键
,但是我在
aclub
中有两个
主键
,它们都在
匹配中引用。也许我用错代码了<代码>主键(俱乐部名称、体育场)
。我将编辑OP以提供更多信息。@PM77-1“模式”是指我的ERM吗?对不起,我的英语在这方面真的很差。谢谢。这在
aclub
表中运行良好,但我需要
amatches
包含两个不同的clubnames,我认为这一个不能做到这一点。基本上,我现在的问题是,我需要
amatches
来显示来自两个不同俱乐部的2个
clubname
s或
aclubid
s。然而,我不知道如何两次引用两个实体,但变量不同。@hacker1337忍者。如果俱乐部有不同的体育场,则允许在
aclub
中有多个俱乐部。