如何删除此并行层次结构

时间:2020-03-05 18:53:33  来源:igfitidea点击:

我正在尝试为以下情况找到最佳的设计,以存储舞蹈比赛的结果。

一个事件包含多个回合,每个回合包含多个表演(每个舞曲一个)。每次表演都由许多评委进行评判,他们会返回得分表。

共有两种类型的回合,最后一轮(包含6个或者更少的舞蹈对)或者普通回合(包含6个以上的舞蹈对)。每个都需要略有不同的行为和数据。

在最后一轮的情况下,每个计分表都包含决赛中6对夫妇的有序列表,显示法官在第一对,第二等对中的一对。我将这些位置称为"一个计分表包含6个位置"。刊登位置包含一对数字,以及该对是哪个位置

在正常回合的情况下,每个计分表都包含一组无序的M对夫妇(M <输入比赛组织者确定的回合精确值的对夫妇数)。我称这些回忆为" M回忆的得分表"。召回不包含分数或者排名

例如
在决赛中

  • 第一名:情侣56
  • 第二名:情侣234
  • 第三名:情侣198
  • 第四名:情侣98
  • 第五名:情侣3
  • 第六名:双人125

进行正常的回合
召回以下夫妇
54,67,201,104,187,209,8,56,79,35,167,98

我对此的幼稚版本实现为

事件has_one final_round,has_many回合

final_round has_many final_performances
final_performance has_many final_scoresheets
final_scoresheet has_many排名

回合has_many性能
性能has_many成绩表
计分表has_many回忆

但是,我不喜欢这样做所需要的重复,而且我有几个并行的层次结构(用于回合,性能和记分表),要维护它们很麻烦。

解决方案

回答

这需要一些我没有的领域知识,但是在我看来,有序与无序的情况有点无关紧要。如果每对夫妇都有一个分数,那么可以从每对夫妇的分数中推断出最后一轮的顺序,对吗?这意味着最后一轮的数据结构将与其他每轮的数据结构类似,由多个(配对,得分)集组成。

回答

如果不知道具体情况,很难给出明确的建议。但是根据我的阅读,似乎并行层次结构可能不是必需的。

尚不清楚final_performance是否与性能真正不同。我猜他们的得分是不同的。这应该反映在final_scoresheet中的差异中,并且我们可能假设我们需要使final_performance不同,因为它必须包含final_scoresheets。也许我们可能只有一个绩效对象,而不是让绩效中包含的计分表将舍入对象与绩效相关联:

round.getScoresheet(couple,dance)

而不是

round.getPerformance(couple,dance).getScoresheet()

我还想知道我们是否需要放置和召回的对象:它们是否可以只是从计分表中检索出来的夫妇的(排序的)列表?如果是这样,那么我们就消除了三节课。

包含优先于继承。