我正在尝试创建一个具有两个外键的表,并且主键的组合应该用作主键,但是“SQL buddy”不接受它并显示多个主键错误消息, 我做错了什么,
实施例
Unit
PK unit ID
unit name
Course
PK course ID
Course Name
CourseHasUnit
FK PK CourseID
FK PK UnitID
答案 0 :(得分:2)
一个表不能有两个主键,因为主键的定义是“唯一标识该行的字段或固定字段集”。通过此定义拥有多个主键是没有意义的,因为如果主键A已经唯一标识了您的行,为什么还需要主键B?
您可能要做的是在CourseID和UnitID上定义两个主键,当您打算做的是定义一个主键,由两个字段CourseID和UnitID组成。
答案 1 :(得分:2)
你可能需要沿着这些方向做点什么。 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)
);
答案 2 :(得分:0)
我使用SQLBuddy的解决方案只是简单地创建没有主键的表。有了表creätéd后,我运行了一个ALTER TABLE查询,指定了所需的多列主键。
答案 3 :(得分:0)
我假设你在谈论"复合键"因为每个表只能有一个主键。
我的建议:
为每个表使用自动增量类型主键。如果有多个值形成唯一标识键,则创建正确的索引和唯一约束。不要使用复合主键。