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

时间:2009-06-14 18:03:16

标签: database-design uml rdbms

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

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

                                     (...)

我的问题是我现在必须将玩家映射到玩家关系。 从我的角度来看,可以做两件事:要么在Player表中引入一个额外的字段(映射另一个PlayerId) - 这是一个非常糟糕的赌注,因为在所有赔率中这将是1 .. *关系 - 或另一个关联表是创造(不是真的很喜欢这个想法,但我想没有别的办法了。)

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

问候,哈尔

编辑:正如评论中所提到的,这是一个比喻。 “播放器”表中存在的对象类型有很多不同(想想两百种不同的类型),它们必须以这种方式映射。 Player表中的对象可以相互引用,因为它们最终参与同一个进程,因此它们彼此相关。这个连接肯定是1 .. *

2 个答案:

答案 0 :(得分:1)

如果它是1:*,则将其放在*侧(例如,层次结构的子行上的parent_id)。

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

答案 1 :(得分:1)

如果我假设你不得不维持你的数据库,我会祈祷你选择另一个关联表映射播放器到播放器 - 良好的规范化实践,一致性和易维护性

这个解决方案也更灵活,因为如果您因任何原因需要扩展模型,它可能会让您处于更好的位置。