2014-01-27 98 views
1

在MySQL中,如何將2個外鍵組合成一個主鍵?組合外鍵

我有兩個表,一個Staff,一個Roles,每個包含他們自己的主鍵StaffIDRoleID。我創建了第三張名爲StaffRole的表格,其中包含StaffIDRoleID,請記住這是一對多的關係,因爲工作人員可能有一個或多個角色。

如何結合StaffIDRoleID的外鍵爲表StaffRole創建新的唯一主鍵。

回答

1

從技術上說,你所描述的是不是一個一個一對多關係,而是它是一個許多一對多關係,因爲一個Staff記錄涉及到很多Role記錄,但一個Role記錄也涉及許多不同的Staff。您使用連接表StaffRole是處理關係的典型方法。

這是語義,但它不是真的是結合這兩個外鍵的問題,只是創建第三個鍵,它是兩者的組合,也是主鍵。因此,您的表格將有兩個FOREIGN KEY定義,兩列各一個,以及兩列中的一個PRIMARY KEY定義均爲

CREATE TABLE StaffRole (
    StaffID INT NOT NULL, 
    RoleID INT NOT NULL, 
    /* Composite primary key on both columns */ 
    PRIMARY KEY (StaffID, RoleID), 
    /* Two separate foreign keys */ 
    FOREIGN KEY (StaffID) REFERENCES Staff (StaffID), 
    FOREIGN KEY (RoleID) REFERENCES Roles (RoleID) 
) ENGINE=InnoDB; 

注意,我指定InnoDB作爲表類型,因爲MySQL不會強制對MyISAM表的FOREIGN KEY秒。

+0

乾杯隊友,完美的作品:) – user3074612

+0

不客氣,祝你好運。 –

-1

您可以創建一個StaffRoleID作爲主鍵,並使用StaffID和RoleID作爲外鍵。