我正在为演员和电影制作人开发一个电影数据库。目前,演员和电影制片人都在一张桌子上,因为他们只有一列不同(“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 | +----+-----------------+
如果您看到针对此方案构建数据的完全不同的方式,请告诉我们。我对任何可能更高效和可扩展的解决方案持开放态度。
答案 0 :(得分:0)
基本上,演员和电影制片人都是人。
所以它们必须存储在一个表中。
我们必须避免数据库中的null和冗余。但在这种情况下,使用额外的表将增加很多开销,而不是删除null的利润。
此外,您可以简单地将电影制作人指定为避免空值的角色。 也就是说,将会有一个名为电影制片人的角色。