繁体   English   中英

如何拥有一个包含多个主键的表?

[英]How to have a table with multiple primary keys?

我试图创建一个有两个外键的表,主键的组合应该用作主键,但“SQL伙伴”不接受它ans显示多个主键错误消息,我做错了什么,

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的解决方案只是简单地创建没有主键的表。 一旦我有了表creätéd,我运行了一个ALTER TABLE查询,指定所需的多列主键。

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

我的建议:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM