0

我正在为演员和制片人开发一个电影数据库,其中包含两个演职员表。目前,演员和制片人的信用都集中在一张表中,因为他们只有一列不同(“role_id”外键永远不会用于制片人的信用 - 它总是空值)。把它们放在一个表格中(“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 | 
+----+-----------------+ 

如果你看到结构化数据为这种情况的一个完全不同的方式,请让我知道。我愿意接受任何可能更高效且可扩展的解决方案。

+0

我的第一个想法是,因为同一个人可以在不同的图片上或甚至在同一张图片上采用多个“身份”(您的术语),您当前的解决方案比单独的表格具有更高的灵活性,船员。有改进的空间,但我需要花点时间。 –

+0

感谢您的回复。为了澄清,我实际上并没有想到将“天赋”表分成演员和电影制片人,而是考虑将“电影片名”分成两个表格(“actor_credits”将具有“role_id”专栏和“filmmaker_credits”将具有“identity_id”列) –

回答

0

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

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

我们必须避免来自数据库的空和冗余。但在这种情况下,制作额外的表会比删除null的利润增加很多开销。

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

+0

我曾考虑将“电影制片人”分配为角色的想法,但是role_id列需要是一个整数,所以我需要将“电影制作人”添加到角色表中,这是非常大的真的意味着成为虚构人物的列表,每个人都有不同的信息。 –

相关问题