MySQL 数据库添加外键失败

问题描述 投票:0回答:1

你好,我有这个 SQL 代码:

create table expedition(
  name varchar(50) ,
  subject varchar(50) ,
  timespan float not null ,
  location varchar(50) ,
  primary key(name,subject,timespan,location)
);
create table county(
  name varchar(50) ,
  primary key(name)
);
create table person(
  address varchar(50) ,
  primary key(address)
);

create table representative(
  id integer unique not null  ,
  name varchar(50)  ,
  primary key(id)    
);

create table company(
  id integer unique not null ,
  name varchar(50) ,
  afm varchar(50) ,
  address varchar(50) ,
  sizey integer not null ,
  primary key(address,afm)  ,
  foreign key(id) references representative(id)
);

create table representator(
  id integer not null ,
  nameOrAddress varchar(50) ,
  primary key(id) ,
  foreign key(nameOrAddress) references county(name) ,
  foreign key(nameOrAddress) references person(address)

);
create table organiser(
  nameOrAddress varchar(50) ,
  id integer not null ,  
  primary key(id) ,
  foreign key(nameOrAddress) references company(name)  ,
  foreign key(nameOrAddress) references person(address) 
);

当我尝试运行此程序时,出现此错误:

`第 41 行出现错误 1822 (HY000):无法添加外键约束。引用表“company”中缺少约束“organiser_ibfk_1”的索引

[执行完成,退出代码 1]`

是因为名称不是公司的主键吗?

而且我有相同名称的不同实体的属性,我继续使用单词

"id"
来表示不同的实体。

我知道在表的声明中,属性

"id"
是本地的,但是当我使用引用外键时,例如这里:

`创建表公司( ... 外键(id) 参考代表(id) ... );

显然我希望

"id"
"representative(id)"
不是表公司的局部变量,而是表代表的局部变量,那么我的语法是否正确?如果不是,我应该如何更改它? `

mysql database foreign-keys primary-key local-variables
1个回答
0
投票

是因为名称不是公司的主键吗?

是的。外键必须引用所引用表的主键或非空唯一键。

但这只是您示例中的问题之一。

另一个问题是您尝试使用外键约束进行多态关联(例如

nameOrAddress
)。通过使用引用不同表的两个外键,您需要
nameOrAddress
列中的值存在于 both 引用表的键中。我怀疑这就是你的意图。基本上,如果您使用多态关联,您不能使用外键约束

您还会对列名称的范围感到困惑,例如

id
。你举个例子:

create table company( ... foreign key(id) references representative(id) ... );

请放心,第一个

id
company
表中的外键列,第二个
id
实际上是
representative
表的主键列。

© www.soinside.com 2019 - 2024. All rights reserved.