【问题标题】:Movie Relation Database Design电影关系数据库设计
【发布时间】:2014-03-25 20:54:09
【问题描述】:

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

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

方案一:两个表,关系映射中存储有一对关系

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

所以,如果我有 2 部电影:复仇者联盟和复仇者联盟 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 相同,但反向关系将通过视图代码中的条件语句显示。如果这样更好,我真的应该拆分关系文本还是将其合并到relation_maps表中?

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

【问题讨论】:

    标签: mysql database relational-database


    【解决方案1】:

    可能是这样的:

    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)。

    【讨论】:

    • 我没有真正明白你的意思。为什么关系表与电影表相同,其中只有电影名称?订单是做什么用的?
    • @deka,您将要命名您的关系,并且您不能使用自动增量在详细信息表中创建新 id,但您可以在关系中使用自动增量桌子。此外,“序列”列允许您简单地按顺序列出电影。
    • 哦,我现在明白了。反向关系呢?例如,在您的情况下,如果 movie_id 40 是星球大战,而 movie_id 50 是星球大战 2?我想,如果我这样使用它,将会有太多的relation_details和冗余。
    • @deka,这个反向关系是什么?尝试使用链表方法查询未知数量的记录。
    猜你喜欢
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    相关资源
    最近更新 更多