【问题标题】:Is this movie database model correct and is it efficient?这个电影数据库模型是否正确且高效?
【发布时间】:2013-03-30 13:35:31
【问题描述】:

这是我的架构:

我需要保持简单,因为这是一项家庭作业,但我对 Participant 和 MovieInGenre 实体有点困惑,因为我知道它们是弱实体,但 Person、Genre 和 Movie 是强实体。此外,该模型如何表明电影 - 类型的关系是 n:n?

【问题讨论】:

  • 这是一个详细阐述人与电影之间关系的答案:stackoverflow.com/a/490490/679227
  • 您的参与者 PK 在 2 个字段上,但应该在所有三个字段上,以防一个人在电影中扮演多个角色(导演和编辑)
  • 只是出于好奇:制作此图表时使用了什么工具?

标签: sql database database-design


【解决方案1】:

在我自己看来,架构很好。有一点变化。我认为您需要删除表 IMDBLink 并将 Link使其为 NULLABLE)放在表 Movie 上。

【讨论】:

  • 我是这样说的,因为我们需要一个 1:n、m:n 和 1:1 关系,据我所知,这是唯一合乎逻辑的 1:1 关系。我们还需要弱实体和强实体,我很难理解这一点。
  • 哦,好吧,如果是这样,那就没问题了。
  • 这不是 1:1 真正有用的情况。但如果这是一个学校项目,并且您需要包含 1:1,那么它和任何地方一样好。
【解决方案2】:

你的架构在我看来很不错。

我不确定您对 Participant 和 MovieInGenre 有什么顾虑。您需要这些实体来创建多对多关系。

只要你有三个表 A B C (如果你看到我在没有画图的情况下在那里写的东西),这表明 A/ C 关系是 M:M 并且 B 的存在只是为了实现这种关系。您还可以绘制图表,省略 MovieInGenre 之类的表格,直接显示 Movie 和 Genre 之间的 M:M 关系。在某些时候,您需要创建表来实现关系,但您不需要在图表上显示它。我通常不会在我的图表中包含此类实体,因为它们只是杂乱无章。

“角色”是什么意思。如果“角色”是该人扮演的角色的名称,那么这很好。如果角色是“导演”、“制片人”、“演员”等,即从标准值列表中选择,那么应该有另一个表,你只需发布一个外键。如果两者兼而有之,那是个坏主意,应该将其分为两个字段。

【讨论】:

    猜你喜欢
    • 2021-07-23
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-22
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多