如果只有一列不同,我是否应该有两个单独的表格?
问题描述:
我正在为演员和制片人开发一个电影数据库,其中包含两个演职员表。目前,演员和制片人的信用都集中在一张表中,因为他们只有一列不同(“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 | +----+-----------------+
如果你看到结构化数据为这种情况的一个完全不同的方式,请让我知道。我愿意接受任何可能更高效且可扩展的解决方案。
答
基本上,演员和电影制片人都是人。
所以它们必须存储在一张表中。
我们必须避免来自数据库的空和冗余。但在这种情况下,制作额外的表会比删除null的利润增加很多开销。
此外,您可以简单地分配制片人作为避免空值的角色。 也就是说,会有一个叫做电影制片人的角色。
+0
我曾考虑将“电影制片人”分配为角色的想法,但是role_id列需要是一个整数,所以我需要将“电影制作人”添加到角色表中,这是非常大的真的意味着成为虚构人物的列表,每个人都有不同的信息。 –
我的第一个想法是,因为同一个人可以在不同的图片上或甚至在同一张图片上采用多个“身份”(您的术语),您当前的解决方案比单独的表格具有更高的灵活性,船员。有改进的空间,但我需要花点时间。 –
感谢您的回复。为了澄清,我实际上并没有想到将“天赋”表分成演员和电影制片人,而是考虑将“电影片名”分成两个表格(“actor_credits”将具有“role_id”专栏和“filmmaker_credits”将具有“identity_id”列) –