简体   繁体   中英

How to design MySQL Database

I have a table called 'movie2person' with 3 columns: movieID, personID and role. I use this table to connect betwen the 'movies' table and the 'persons' table... many-to-many relationship..

I have selected movieID and personID both as primary keys... The problem is that sometimes I need to enter the same personID for the same movieID several times and I can't do it because only one combination of the same movieID and personID is permited...

How can I do it??

Thanks..

您可以在主键中包含角色,也可以在表中添加新的人工键,然后将此新列用作主键,而您不会在该表外使用它。

Based on some comments you've made, I think you need more normalization. Create a role table and adjust your lookup table accordingly

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 |
+---------+----------+--------+

With this setup you'd have a three-column composite primary key on movie2person.

Primary keys are meant to mean "This is the unique identifier of this row".

If you're inserting many rows with the same values, then that's not your primary key.

If you plan to insert exact duplicates for rows, then you don't have a primary key at all and you should drop it for good.

If, however, you plan to insert different roles to each (movieID, personID) pair, then you could just add the role to the primary key and you're good to go.

将所有三列均作为主键。

I am suggesting some changes to your design:

  1. change the name of your table from Movie2Person to MoviePerson_xref. It is usually standard to name in sucha format and exlude numbers from your table naming conventions.

  2. This table should have its own primary key called movieperson_xrefID.

  3. You can then save all combinations of movie ID's and person ID's.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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