如何在mysql中将复合外键(非复合主键)设置为唯一

时间:2018-02-18 18:05:25

标签: php mysql database database-design foreign-keys

我有一个表,在该表中我有一个主键和一个复合外键(2个外键的组合)。 我想知道如何将复合外键创建为唯一,这意味着我不希望在表中再次复制外键复制?

这是对它的查询

create table official_baby_toys(
official_baby_toys_id int,
baby_id int,
toy_id int,
toy_size_id,
primary key(official_baby_toys_id)
foreign key(baby_id,toy_id) references baby_toy(baby_id,toy_id),
foreign key(toy_size_id) references toy_size(toy_size_id),
)

1 个答案:

答案 0 :(得分:1)

首先创建两个单个外键,然后使用两个字段创建UNIQUE KEY:

create table official_baby_toys(
official_baby_toys_id int,
baby_id int,
toy_id int,
toy_size_id,
primary key(official_baby_toys_id)
foreign key(baby_id) references baby_toy(baby_id),
foreign key(toy_id) references baby_toy(toy_id),
foreign key(toy_size_id) references toy_size(toy_size_id),
unique key(baby_id, toy_id)
)

此外,我不了解您的数据库架构,但我觉得baby_id应该实际引用baby(baby_id)而不是baby_toy(baby_id)

修改 您还可以创建复合外键,但您需要首先为这两个字段创建索引(或主键,这也将创建索引):

CREATE TABLE baby_toy (
  # other field defs
  baby_id int,
  toy_id int,
  primary key(baby_id, toy_id)
  # OR index(baby_id, toy_id)
);

然后在official_baby_toys中,您应该能够创建复合外键。