【问题标题】:Should I have two separate tables if they differ by only one column?如果它们仅相差一列,我应该有两个单独的表吗?
【发布时间】:2016-04-10 23:06:26
【问题描述】:

我正在开发一个电影数据库,其中包含演员和电影制作人的学分。目前,演员和电影制作人的学分都放在一个表中,因为它们仅相差一列(“role_id”外键永远不会用于电影制作人的学分——它始终为 NULL)。将它们放在一个表中(“movie_credits”)还是最好的做法还是分开(“actor_credits”和“filmmaker_credits”)更好?

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

电影学分 +----+------------+---------+---------------+------ ----+ |编号 |人才ID |角色 ID |身份ID |标题ID | +----+------------+---------+---------------+------ ----+ | 1 | 1 | 1 | 1 | 1 | | 2 | 2 | 2 | 1 | 2 | | 3 | 1 |空 | 2 | 4 | +----+------------+---------+---------------+------ ----+ 天赋 +----+------------+------------+ |编号 |名字 |姓氏 | +----+------------+------------+ | 1 |克林特 |伊斯特伍德 | | 2 |西尔维斯特 |史泰龙 | +----+------------+------------+ 角色 +----+--------------+ |编号 |姓名 | +----+--------------+ | 1 |沃尔特·科瓦尔斯基 | | 2 |洛基巴尔博亚 | +----+--------------+ 身份 +----+--------------+ |编号 |身份 | +----+--------------+ | 1 |演员 | | 2 |导演 | | 3 |制片人 | | 4 |编剧 | +----+--------------+ 标题 +----+------------------+ |编号 |姓名 | +----+------------------+ | 1 |大都灵 | | 2 |洛基 | | 3 |信条 | | 4 |美国狙击手 | +----+------------------+

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

【问题讨论】:

  • 我的第一个想法是,由于同一个人可以在不同的图片上使用多个“身份”(您的术语),甚至在同一张图片上,您当前的解决方案将比拥有更灵活演员和工作人员的单独表格。有改进的余地,但我需要花一些时间。
  • 感谢您的回复。澄清一下,我实际上并没有考虑将“人才”表分为演员和电影制片人,而是考虑将“电影学分”分为两个表(“actor_credits”将具有“role_id”列,“filmmaker_credits”将具有“identity_id”列)

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


【解决方案1】:

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

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

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

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

【讨论】:

  • 我考虑过将“filmmaker”分配为角色的想法,但是role_id列需要是整数,所以我需要将“filmmaker”添加到角色表中,这个表很大并且真正的意思是成为一个虚构人物的列表,每个人物都有不同的信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-08
  • 2022-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多