我正在建立一个数据库,用于体育俱乐部的统计数据,我帮助管理一些活动。我想我已经有了跟踪竞争对手名称,分类,类别等的部分,这些部分是通过使用主表,几个查找表和几个桥表来解决所涉及的多对多关系。
我有一个模型勾勒出下一部分,但我并不完全觉得我做得对。我知道我们是如何在纸上和/或电子表格中做的,我还在做大量的手工工作,但我并不是100%自信我正在将它正确地翻译成表和关系。
简单的事件结构可能如下所示:
Tournament
- Day 1
- Match 1 (Fired Match)
- Match 2 (Fired Match)
- Match 3 (Fired Match)
- Match 4 (Aggregate Match of 1,2,3)
- Day 2
- Match 5 (Fired Match)
- Match 6 (Fired Match)
- Match 7 (Fired Match)
- Match 8 (Aggregate Match of 5,6,7)
- Match 9 (Aggregate Match of 4,8)
我已经把事情进一步打破,并为“分数”,“阶段”,“比赛”和“锦标赛”(以及其他)提供表格。这个想法是得分是我需要为每个竞争者记录的原始数据,以及“竞争者”和“阶段”表的外键。我没有进行“解雇”和“聚合”比赛,而是决定接近它,因为比赛是一个或多个阶段的聚合,比赛可以有一个或多个比赛(聚合)。
我省略了其他外键指示的一些查找表,因为它们与手头的事情没有直接关系,我猜是“这是正确的方法,或者我会更好跳过匹配/阶段分离?是否有办法通过自联接重新实现单个表中匹配和阶段之间的父子关系?
答案 0 :(得分:1)
对我来说,它看起来像一个正确规范化和灵活的层次结构。
按照设计,它意味着锦标赛有一个或多个匹配,一个匹配有一个或多个阶段...或者更重要的是,每个父母有一个可变数量的孩子,其中数字总是更大而不是零,但可以而且会因实例而异。如果不是这种情况,如果父(锦标赛或匹配)总是具有相同数量的子项,那么在对数据进行非规范化时可能会有一些小优势(例如工作日有七列的表),但这可能是从长远来看,证明是尴尬的。
我绝对不会使用自联接来执行单个表,因为层次结构的不同级别包含不同的属性。例如,“镜头”是舞台的一部分而不是匹配的一部分,因此不应成为匹配表的一部分。