【问题标题】:ER modelling film actorER造型电影演员
【发布时间】:2018-02-21 12:10:53
【问题描述】:

我想使用 E-R 模型为电影和电视剧数据库设计数据库模式,并使用关系模型相应地设计表。必要的信息如下:

实体:电影、演员、电视剧。 电视剧或电影必须有演员。一个演员可以同时演这两个角色。 相应地假设列并提及主键、弱实体和强实体。

这是我试图解决的问题。我对此毫无疑问。

  1. 第一种方法
    • 演员
      • actorID (PK)
      • 演员姓名
    • 电影
      • actorID (FK:Actor) (PK)
      • 电影ID
      • 电影名
      • 电影类型
    • 电视剧
      • actorID (FK:Actor) (PK)
      • 电视ID
      • 电视名称
      • 电视类型

在这种情况下,模型将具有以上三个具有给定属性的表。它保持了每部电视剧或电影必须有演员并且演员可以在两者中表演的标准。但是如果一部电影有三/四名演员,那么我们必须输入movieName,movieGenre 以获得相同的movieID。这是信息的重复,我不希望这样。

  1. 第二种方法
    • 演员
      • actorID (PK)
      • 演员姓名
    • 电影
      • 电影ID
      • 电影名
      • 电影类型
    • 电视剧
      • 电视ID
      • 电视名称
      • 电视类型
    • 演员电影
      • actorID (FK:Actor) (PK)
      • movieID (FK:Movies) (PK)
    • 演员TV系列
      • actorID (FK:Actor) (PK)
      • tvsID (FK:TVSeries) (PK)

这里我们添加了 ActorMovies 和 ActorTVSeries,我们不需要重复信息。但我不知道如何确保每部电影或电视剧都有演员,因为它们在不同的桌子上。我也想知道弱实体和强实体。请帮帮我。

【问题讨论】:

  • 这个 HTML 标记是关闭的。合理地改革。
  • 欢迎来到 Stack Overflow。请查看How do I ask a good question。在发布之前,您应该研究过您的问题并尝试自己提出解决方案。如果您遇到具体的问题,请返回并附上您尝试过的内容和到目前为止所做的工作的总结,以便我们可以帮助解决该具体问题。
  • @FluffyKitten 我在谷歌和许多其他博客上搜索过,但我无法清除我的疑问。我已经发布了我的方法和问题点。

标签: mysql database database-schema entity-relationship


【解决方案1】:

我认为你把事情复杂化了。您已经确定了您的实体:

  • 演员
  • 电影
  • 电视剧

如果一个演员可以在电影和电视剧中表演,那么这就是您的关系:您需要将演员与电影连接起来的表格,以及将演员与电视剧连接起来的表格。这将为您提供五个表:

  • actors
  • movies
  • tv_series
  • actors_movies(加入表)
  • actors_tv_series(加入表)

【讨论】:

  • 我想确保每部电影至少有一个演员。这是如何保证的?
  • 你不能用关系数据库来做到这一点。您需要先创建电影,然后才能为其分配演员,因此电影将没有处于该状态的演员。执行多个相关实体是一个应用程序问题。
【解决方案2】:

您无法在架构中的关系数据库中强制执行此操作,原因如下:

作为创建关系型数据库的一种方式,您可以创建CONSTRAINTS,以确保针对另一个表验证记录。这要求验证某事所依据的值已经存在。您不能将演员链接到不存在的电影:演员记录和电影记录都必须存在才能发生。因此,可以(并且必须)在没有演员的情况下创建电影。

您的解决方案不在架构中,而是在触发器和存储过程中 - 使用事务。您需要向存储过程提供演员和电影,它将在表中创建两个条目。如果存在,它必须非常聪明,并且不重新创建演员记录。如果已经创建,它将不得不重新使用电影。

整个逻辑必须对照UPDATEs 和DELETEs 进行检查,以确保每部电影至少有一个演员。这是通过触发器。

我有点,现在不想为你编写整个存储过程,如果这回答了你的问题。如果您在整个交易过程中需要帮助,请告诉我。

--- 建议---

如果这是一个真正的项目而不是练习,我建议您的处理和显示语言强制执行业务逻辑(确保存在参与者)。将业务逻辑放在数据库中不是一个好主意,很难维护。

--- 旁注---

您可能需要添加一个genre 表来验证流派

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 2015-06-24
    • 1970-01-01
    • 2015-06-25
    • 2019-04-16
    • 1970-01-01
    相关资源
    最近更新 更多