gpt4 book ai didi

mysql - 电影关系数据库设计

转载 作者:行者123 更新时间:2023-11-30 00:29:20 26 4
gpt4 key购买 nike

我正在创建一个电影信息数据库,但一直致力于设计一部电影与其他电影之间的关系表。

例如:《复仇者联盟》是《复仇者联盟 2》的前传,但我应该将反向关系(续集)存储在数据库中吗?我应该将关系分成单独的表吗?目前我有 3 个选择,但哪一个才是设计数据库的最佳实践?

替代方案 1:两个表,其中关系对存储在关系映射内

Movies: id, title, ...
Relation_maps: id, movie_id, related_movie_id, relation_text, reverse_relation_text

因此,如果我有两部电影:《复仇者联盟》和《复仇者联盟 2》。我将拥有一个关系映射,其关系文本为“前传”,反向关系文本为“续集”

替代方案 2:将关系拆分为单独的表,并将反向关系存储为表本身的 id

Movies: id, title, ...
Relation_maps: id, movie_id, related_movie_id, relation_id
Relations: id, reverse_relation_id (self-refer to id), relation_text

关系文本,将存储在另一个表中,反向关系存储为自引用 ID。所以在关系表中,它会变成这样:

  id | reverse_relation_id | relation_text
1 | 2 | prequel
2 | 1 | sequel

方案3:将关系拆分为单独的表,并通过条件代码显示反向关系

Movies: id, title, ...
Relation_maps: id, movie_id, related_movie_id, relation_id
Relations: id, relation_text

与替代方案 2 相同,但反向关系将通过 View 代码中的条件语句显示。如果这样更好,我真的应该拆分关系文本还是将其合并到relation_maps表中?

在性能和最佳实践方面是否有更好的替代方案?提前致谢。

最佳答案

也许是这样的:

Relations

id name
1 Star Wars


Relations_Detail

relation_id movie_id relation_type sequence
1 40 prequel 0
1 50 prequel 1
1 60 prequel 2
1 10 debut 3
1 20 sequel 4
1 30 sequel 5

您将拥有一个多列主键 (relation_id, movie_id)。

关于mysql - 电影关系数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22634311/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com