[英]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.