我需要这里的数据库人员提供一些帮助。我需要能够为体育运动员所玩的游戏存储体育统计数据,然后在时间线中顺序显示该数据(类似于运动员的运动生涯)。玩家可以参加一项或多项运动。
以下是我提出的两种模式,但都存在问题:
创意#1:直接将每个统计信息与玩家联系起来。
这个想法的好处:它使用关系理论并正确地将表与关系联系起来。
这个想法的问题:似乎在处理来自许多不同统计表的数据时可能存在一些问题。
想法#2:使用中间表将播放器与其统计信息相关联。
这个想法的好处:查询PlayerStatistic表并获得玩家所玩游戏的有序列表非常容易。由于表中的名称在行中,因此每行的运动很容易识别。
这个想法的问题: PlayerStatistic表与其子统计表之间没有任何关系(即BaseballStatistic,FootballStatistic)。这种抛出关系理论的窗外。
你会用哪种想法?或者是否有更好的方法来实现这一目标?
如果重要,我正在使用SQL Server 2014
编辑:有人提出了这个想法。你觉得怎么样?
答案 0 :(得分:0)
我将建议这是类子类的实例,或者,如果您愿意,也可以输入-subtype。棒球统计和足球统计似乎都是统计的专门子类。你的第二个想法非常类似于某种技术,称为类表继承,你可以在网上查找。它与我在其中看到的其他情况不完全相同,因为玩家统计数据并不像超类,但它很接近。
您可以使用一种附加技术来帮助您将棒球卫士和足球统计与球员统计相关联。它被称为共享主键。在这里,棒球统计数据和足球统计数据将作为其主键获得玩家统计数据的id字段的副本。这不仅建立了关系,而且还将两个关系中的每一个约束为一对一或零。无论何时添加新玩家统计信息,都必须以编程方式制作此副本。
使用这种设计,如果你想做这样的事情,你也可以容纳一个同时打棒球和足球的球员。
答案 1 :(得分:0)
我认为你应该选择第二选择。记住,当你有多对多的关系时,创建一个映射表,当有一对多映射时,只需要使用主外键关系。