ER塑造电影演员

时间:2017-09-12 22:49:09

标签: mysql database database-schema entity-relationship

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

实体:电影,演员,电视剧。 电视剧或电影必须有演员。演员可以同时采取行动。 相应地假设列并提及主键,弱实体和强实体。

这是我试图解决的问题。我对这方面的疑问很少。

  1. 第一种方法
    • 演员
      • actorID(PK)
      • actorName
      • actorID(FK:演员)(PK)
      • movieID
      • 的movieName
      • movieGenre
    • TVSeries
      • actorID(FK:演员)(PK)
      • tvsID
      • tvsName
      • tvsGenre
  2. 在此,模型将具有上述三个具有给定属性的表。它保持了每个电视连续剧或电影必须有演员和演员可以在两者中行动的标准。但是如果一部电影有三个/四个演员,那么我们必须为同一个movieID输入movieName,movieGenre。这是重复的信息,我不希望这样。

    1. 第二种方法
      • 演员
        • actorID(PK)
        • actorName
        • movieID
        • movieName
        • movieGenre
      • TVSeries
        • tvsID
        • tvsName
        • tvsGenre
      • ActorMovies
        • actorID(FK:演员)(PK)
        • movieID(FK:电影)(PK)
      • ActorTVSeries
        • actorID(FK:演员)(PK)
        • tvsID(FK:TVSeries)(PK)
    2. 在这里我们添加了ActorMovies和ActorTVSeries,我们不需要重复信息。但我不知道如何确保每个电影或电视剧都有一个演员,因为他们在不同的表格中。我也想知道弱势和强势的实体。请帮帮我。

2 个答案:

答案 0 :(得分:0)

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

  • 演员
  • 电影
  • 电视剧

如果一个演员既可以在电影和电视剧中演出,那么就是你的人际关系:你需要将演员加入电影的表格,以及演员到电视剧。这将为您提供五个表格:

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

答案 1 :(得分:0)

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

作为创建RELATIONAL数据库的一种方法,您可以创建[string+str(k) for k in range(0,players)] = abs(200 - [string2+str(p) for p in range(0,players)]) 以确保对另一个表验证记录。这要求已经存在验证某些内容的值。您无法将演员链接到不存在的电影:演员记录和电影记录都必须存在才能实现。因此,在没有演员存在的情况下制作电影是可能的(也是必需的)。

您的解决方案不在架构中,而在触发器AND 存储过程中 - 使用事务。您需要将一个actor和一个电影同时提供给存储过程,它将在表中创建BOTH条目。它必须非常聪明,如果存在,则不重新创建演员记录。如果已经创建了电影,则必须重新使用它。

这整个逻辑必须检查CONSTRAINTSUPDATE以确保每部电影至少有一个演员。这是通过触发器。

我有点懒惰并且此时不想为您编写整个存储过程,如果这回答了您的问题。如果您需要整个交易的帮助,请告诉我。

---建议---

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

---侧面说明---

您可能需要添加DELETE表来验证流派