我正在尝试创建一个具有两个外键并且主键组合应该用作主键的表,但是“SQL 伙伴”不接受它并显示多个主键错误消息,我做错了什么吗?
例子
Unit
PK unit ID
unit name
Course
PK course ID
Course Name
CourseHasUnit
FK PK CourseID
FK PK UnitID
一个表不能有两个主键,因为主键的定义是“唯一标识该行的字段或固定字段集”。根据这个定义,拥有多个主键是没有意义的,因为如果主键 A 已经唯一标识了您的行,为什么还需要主键 B?
可能您要做的是在 CourseID 和 UnitID 上定义两个主键,而您打算做的是定义一个主键,由字段 CourseID 和 UnitID 组成。
您可能需要按照这些思路做一些事情。MySQL 不喜欢内联主键和外键声明。请注意额外的唯一约束。主键和唯一键约束都标识候选键。任何候选键都可以是外键引用的目标。
create table unit (
unit_id ... ,
unit_name ... ,
primary key (unit_id),
unique key (unit_name)
);
create table course (
course_id ... ,
course_name ...,
primary key (course_id),
unique key (course_name)
);
create table course_has_unit (
course_id ... ,
unit_id ... ,
primary key (course_id, unit_id),
foreign key (course_id) references course (course_id),
foreign key (unit_id) references unit (unit_id)
);
我假设您在谈论“复合键”,因为每个表只能有一个主键。
我的建议:
为每个表创建一个自动增量类型的主键。如果您有多个值构成唯一标识键,则创建正确的索引和唯一约束。不要使用复合主键。
我使用 SQLBuddy 的解决方案只是创建没有主键的表。创建表后,我运行 ALTER TABLE 查询,指定所需的多列主键。