代码之家  ›  专栏  ›  技术社区  ›  nsmyself

映射同一表中对象之间的关系

  •  1
  • nsmyself  · 技术社区  · 16 年前

    我遇到了一个设计问题;在一个项目中,我有三个表:联盟、玩家和关联表league to players,它们映射前两个联盟之间的多个到多个连接(因为玩家可以同时在两个或多个联盟中玩):

    League        Players              LeagueToPlayers
    Id Name       Id Alias             LeagueId  PlayerId
    =--------     ------------         ----------------
    1  League A   1  Longcat           1        1
    2  League B   2  Leeroy Jenkins    1        2
    3  League C   3  xyz               2        1
    4  League D   4  qw3rty            2        3
                  5  Myrkgrav          3        2
                                       4        1
      (...)           (...)            4        3
                                       5        1
    
                                         (...)
    

    我的问题是我现在必须映射一个玩家到玩家的关系。 从我的角度来看,有两件事可以做:要么在玩家表中引入一个额外的字段(映射另一个玩家ID),这是一个非常糟糕的赌注,因为很可能这将是一个1….*关系,要么创建另一个关联表(不太喜欢这个想法,但我想没有其他方法)。

    我想听听你对这个问题的看法…有什么好主意吗?

    问候,Hal

    编辑:正如评论中提到的,这是一个隐喻。“player”表中存在的对象类型变化很大(想想200种不同的类型),它们必须以这种方式映射。玩家表中的对象可能相互引用,因为它们最终会参与同一个过程,因此它们相互关联。这个连接绝对是1..*

    2 回复  |  直到 16 年前
        1
  •  1
  •   JohnIdol    16 年前

    如果在你假设离开后我必须保持你的数据库,我会祈祷你能用另一个相关表把玩家映射到玩家。 良好的规范化实践、一致性和易于维护 .

    从某种意义上说,这个解决方案也更加灵活,如果您出于任何原因需要扩展模型,它可能会使您处于更好的位置。

        2
  •  1
  •   instanceof me    16 年前

    如果是1:*,则将其放在*侧(例如,层次结构的子行中的父级\u id)。

    如果是*:*,请使用另一个相关表。

    推荐文章