【问题标题】:How to model sub sections in a relational database?如何在关系数据库中对子部分进行建模?
【发布时间】:2012-03-24 13:31:44
【问题描述】:

我想以某种方式对游戏类型进行建模,以便类型可以具有子部分,例如
类型 |子类型
动作 > 动作冒险
动作 > 射手
模拟 > 车辆模拟

正如你可以想象的那样,我不认为射击游戏也是模拟的一个子部分,等等。

我正在考虑这样做,但有没有更好的方法:
Genres (Genre{PK}, SubGenre{FK})
SubGenre (SubGenre{PK }, 流派{FK})

【问题讨论】:

    标签: mysql sql database relational-database data-modeling


    【解决方案1】:

    我可能会创建 Genres 和 SubGenres 表,例如:

    流派(流派ID{PK},流派名称)

    SubGenre(SubGenreID{PK}、GenreID{FK}、SubGenreName)

    没有理由将 SubGenre 作为 FK 在您的 Genres 表中。这将您限制为每个子流派只有一种流派。

    【讨论】:

      【解决方案2】:

      我认为你需要:

      Genres 
      ------
      Genre PK 
      
      
      SubGenres
      ---------
      SubGenre  PK
      Genre        FK
      

      或者这个(如果 2 个流派有相同名称的子流派),例如:

      动作 > 空间
      模拟 > 空间

      Genres 
      ------
      Genre PK 
      
      
      SubGenres
      ---------
      Genre     PK  FK
      SubGenre  PK
      

      【讨论】:

      • 在您的第二个示例中,如果 2 个流派具有相同名称的子流派,最好将您的 subgenres 表重命名为genres_subgenres 并将其用作您的第一个子流派定义的连接表- 创建 M:M 关系。
      • @gangreen:实际上,它也类似于M:M 关系。只有联结表,没有第二个表:)
      • 对对对。我想我遇到了可能遇到的正常表单/更新异常问题。例如,如果两个流派共享子流派“Space”,但拼错了“Spaec”;可以更正一个记录中的拼写,但不能更正另一个记录。再说一次,也许在某些情况下,允许这种情况发生会更好......
      猜你喜欢
      • 2022-01-11
      • 2010-12-06
      • 2013-04-06
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      • 2012-07-15
      • 2017-09-10
      相关资源
      最近更新 更多