我遇到了一个设计问题;在一个项目中,我有三个表:联盟,玩家和一个关联表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 .. *答案 0 :(得分:1)
如果它是1:*,则将其放在*侧(例如,层次结构的子行上的parent_id)。
如果是*:*,请使用另一个相关表。
答案 1 :(得分:1)
如果我假设你不得不维持你的数据库,我会祈祷你选择另一个关联表映射播放器到播放器 - 良好的规范化实践,一致性和易维护性
这个解决方案也更灵活,因为如果您因任何原因需要扩展模型,它可能会让您处于更好的位置。