我正在存储战斗结束时间的统计信息,如果它完全结束。并非所有战斗都结束,而不是那些不作出决定的战斗。
示例:
Kitao通过提交击败了琼斯 (keylock)第1轮2:14。
从这条数据中,我想存储3件事:
然而,复杂的部分是,因为我正在跟踪来自多个组织的战斗,并非每个组织每轮都有一致的分钟数,因此我无法为secondsPerRound
创建列。因此,我似乎需要创建一个单独的表来跟踪所有可能的轮次/分钟组合...例如fight_rounds_types
表:
id organization_id num_rounds
1 9 5
2 10 3
和一个minutes_rounds映射表?
id fight_rounds__types_id round_num mins
1 1 1 5
2 1 2 5
3 1 3 5
4 1 4 5
5 1 5 5
6 2 1 10
7 2 2 5
8 2 3 5
然后使用这种类型的fights
表模式:
CREATE TABLE `fights` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`event_id` int(10) unsigned DEFAULT NULL,
`winner_id` int(10) unsigned DEFAULT NULL,
`referee_id` int(10) unsigned DEFAULT NULL,
`championship_match` enum('1','0') DEFAULT '0',
`weight_class` int(10) unsigned DEFAULT NULL,
`finish_id` int(10) unsigned DEFAULT NULL,
`loser_id` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `w` (`winner_id`),
KEY `e` (`event_id`),
KEY `f` (`finish_id`),
KEY `l` (`loser_id`),
CONSTRAINT `l` FOREIGN KEY (`loser_id`) REFERENCES `fighters` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `e` FOREIGN KEY (`event_id`) REFERENCES `events` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `f` FOREIGN KEY (`finish_id`) REFERENCES `finishes` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `w` FOREIGN KEY (`winner_id`) REFERENCES `fighters` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8
我可以为fight_rounds
ID添加外键,以及我要跟踪的内容:
我会创建一个tinyint列,round_ended
可以为NULL,以及time_ended
列,以及一个外键引用fight_rounds_types_id
,它将引用分钟类型/围绕要使用的规则。
我的问题是:
fight_rounds_types
和minutes_rounds
架构在规范化方面是否理想?或者我有更好的方法来设计它吗?time_ended
列使用哪种列类型?我想跟踪说2:14
。我现在最终使用TIME
,这是理想的吗?答案 0 :(得分:1)
我的Fights表上会有TotalElapsedSeconds和SecondsPerRound的列。然后,通过将前者除以后者,可以计算完成的轮数。进入最后一轮的长度可以通过前者的模数来计算。一个单独的表似乎有点矫枉过正。
答案 1 :(得分:0)
为什么不跟踪两列:finish_round和finish_seconds。
然后无论使用什么系统,都可以适当地填写它们。