首页 > 解决方案 > 为表中的每一行存储字符串值列表是不好的做法,并且违反了正常形式。我应该怎么办?

问题描述

我正在做一个业余项目,创建我自己的电影数据库,其中包含收视率、类型、发行日期以及哪些演员与哪些电影相关联(以便将来将电影与演员搜索区分开来)。

我有一个包含电影的表,其中包含一些属性,其中一个属性应该是该电影中包含的演员。我知道我无法在表格中的每一行(电影)的单元格中存储字符串列表(演员的姓名)。但是这里的最佳实践是什么?用 MovieActors 创建另一个表并链接每个连接的电影?如果演员与更多电影有关联怎么办?

我在自己的本地主机数据库中运行 Microsoft SQL Server Management Studio,并且刚刚设置了 Movie 表,我发现我可能会遇到这个问题。

我希望得到一个包含电影的表,并且将来能够搜索电影,找到它们的属性并找出与该电影相关联的演员。还可以根据我选择的演员过滤电影。

标签: sqlsql-serverlistssmsrdbms

解决方案


你拥有的是一个many-to-many relationship. 在构建关系数据库时,这将包括一个电影表、一个演员表。然后是一个“junction”或“join”表,其中包含一个指向 Movie 和 Actor 的外键。然后,您可以使用此“连接”表加入,以获取特定电影中的所有演员,反之亦然,获取特定演员参与的所有电影,等等。

示例图:

Table Movie                  Table ActorMovie            Table Actor
MovieId | MovieName          MovieId | ActorId           ActorId | ActorName
1         jaws               1         1                 1         Guy1
2         star wars          1         2                 2         Guy2
                             2         1

推荐阅读