[英]How to design MySQL Database
我有一個名為“ movie2person”的表,該表具有3列:movieID,personID和role。 我使用此表在“電影”表和“人”表之間建立聯系……多對多關系。
我已將movieID和personID都選擇為主鍵...問題是有時我需要多次為同一movieID輸入相同的personID,但我不能這樣做,因為只允許使用相同的movieID和personID的一種組合...
我該怎么做??
謝謝..
您可以在主鍵中包含角色,也可以在表中添加新的人工鍵,然后將此新列用作主鍵,而您不會在該表外使用它。
根據您的評論,我認為您需要更多規范化。 創建一個角色表並相應地調整您的查找表
movie
+----+------------+
| id | title |
+----+------------+
| 1 | Braveheart |
+----+------------+
person
+----+------------+
| id | name |
+----+------------+
| 4 | Mel Gibson |
+----+------------+
role
+----+------------+
| id | title |
+----+------------+
| 1 | Director |
| 2 | Actor |
+----+------------+
movie2person
+---------+----------+--------+
| movieID | personID | roleID |
+---------+----------+--------+
| 1 | 4 | 1 |
| 1 | 4 | 2 |
+---------+----------+--------+
通過此設置,您將在movie2person上具有一個三列的復合主鍵。
主鍵的意思是“這是該行的唯一標識符”。
如果要插入許多具有相同值的行,那么那不是您的主鍵。
如果計划為行插入完全相同的重復項,那么根本就沒有主鍵,應該永久刪除它。
但是,如果您打算為每個(movieID,personID)對插入不同的角色,則只需將角色添加到主鍵即可。
將所有三列均作為主鍵。
我建議您對設計進行一些更改:
將表的名稱從Movie2Person更改為MoviePerson_xref。 通常,通常以這種格式命名,並從表命名約定中排除數字。
該表應具有自己的主鍵,稱為movieperson_xrefID。
然后,您可以保存電影ID和人物ID的所有組合。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.