sql - 为表中的每一行存储字符串值列表是不好的做法,并且违反了正常形式。我应该怎么办?
问题描述
我正在做一个业余项目,创建我自己的电影数据库,其中包含收视率、类型、发行日期以及哪些演员与哪些电影相关联(以便将来将电影与演员搜索区分开来)。
我有一个包含电影的表,其中包含一些属性,其中一个属性应该是该电影中包含的演员。我知道我无法在表格中的每一行(电影)的单元格中存储字符串列表(演员的姓名)。但是这里的最佳实践是什么?用 MovieActors 创建另一个表并链接每个连接的电影?如果演员与更多电影有关联怎么办?
我在自己的本地主机数据库中运行 Microsoft SQL Server Management Studio,并且刚刚设置了 Movie 表,我发现我可能会遇到这个问题。
我希望得到一个包含电影的表,并且将来能够搜索电影,找到它们的属性并找出与该电影相关联的演员。还可以根据我选择的演员过滤电影。
解决方案
你拥有的是一个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
推荐阅读
- python - 基于 df 中的上一行和下一行的基于条件的检查
- arrays - 在打字稿中迭代 JSON 对象并将对象添加到数组问题
- r - 在数据框列表中选择一列
- python - 2D-DCT 的输入和输出图像大小之间的差异
- android - JLayer 有时无法加载资源“sfd.ser”
- javascript - 如何处理空 response.json?(Javascript)
- python-3.x - gcloud 翻译提交列表
- python - Python - 字典,泡菜
- python - Python tkinter - 更改循环创建的标签,我该怎么办?
- html - Laravel / Blade:@yield 或 @extends 布局