如果它们只有一列不同,我应该有两个单独的表吗?

时间:2016-01-06 18:32:41

标签: mysql database-design database-schema foreign-key-relationship

我正在为演员和电影制作人开发一个电影数据库。目前,演员和电影制片人都在一张桌子上,因为他们只有一列不同(“role_id”外键永远不会用于电影制片人的演职员表 - 它总是为NULL)。将它们保存在一个表格中是最佳做法(“movie_credits”)还是最好分开(“actor_credits”和“filmmaker_credits”)?

这是我定义的一个非常基本的模式,我在其中包含了一些示例数据:

movie_credits
+----+-----------+---------+---------------+----------+
| id | talent_id | role_id |   identity_id | title_id |
+----+-----------+---------+---------------+----------+
|  1 |         1 | 1       |             1 |        1 |
|  2 |         2 | 2       |             1 |        2 |
|  3 |         1 | NULL    |             2 |        4 |
+----+-----------+---------+---------------+----------+

talent
+----+------------+-----------+
| id | first_name | last_name |
+----+------------+-----------+
|  1 | Clint      | Eastwood  |
|  2 | Sylvester  | Stallone  |
+----+------------+-----------+

roles
+----+---------------+
| id |     name      |
+----+---------------+
|  1 | Walt Kowalski |
|  2 | Rocky Balboa  |
+----+---------------+

identities
+----+--------------+
| id |   identity   |
+----+--------------+
|  1 | actor        |
|  2 | director     |
|  3 | producer     |
|  4 | screenwriter |
+----+--------------+

titles
+----+-----------------+
| id |      name       |
+----+-----------------+
| 1  | Gran Torino     |
| 2  | Rocky           |
| 3  | Creed           |
| 4  | American Sniper |
+----+-----------------+

如果您看到针对此方案构建数据的完全不同的方式,请告诉我们。我对任何可能更高效和可扩展的解决方案持开放态度。

1 个答案:

答案 0 :(得分:0)

基本上,演员和电影制片人都是人。

所以它们必须存储在一个表中。

我们必须避免数据库中的null和冗余。但在这种情况下,使用额外的表将增加很多开销,而不是删除null的利润。

此外,您可以简单地将电影制作人指定为避免空值的角色。 也就是说,将会有一个名为电影制片人的角色。