簡體   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