1

我正在尝试创建一个具有两个外键并且主键组合应该用作主键的表,但是“SQL 伙伴”不接受它并显示多个主键错误消息,我做错了什么吗?

例子

Unit
PK unit ID
unit name

Course 
PK course ID
Course Name

CourseHasUnit
FK PK CourseID
FK PK UnitID
4

4 回答 4

2

一个表不能有两个主键,因为主键的定义是“唯一标识该行的字段或固定字段集”。根据这个定义,拥有多个主键是没有意义的,因为如果主键 A 已经唯一标识了您的行,为什么还需要主键 B?

可能您要做的是在 CourseID 和 UnitID 上定义两个主键,而您打算做的是定义一个主键,由字段 CourseID 和 UnitID 组成。

于 2013-02-06T03:53:47.173 回答
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)
);
于 2013-02-06T04:10:00.987 回答
0

我假设您在谈论“复合键”,因为每个表只能有一个主键。

我的建议:

为每个表创建一个自动增量类型的主键。如果您有多个值构成唯一标识键,则创建正确的索引和唯一约束。不要使用复合主键。

于 2016-09-11T12:15:19.817 回答
0

我使用 SQLBuddy 的解决方案只是创建没有主键的表。创建表后,我运行 ALTER TABLE 查询,指定所需的多列主键。

于 2016-09-11T12:06:44.170 回答