我正在存储战斗结束时间的统计数据,如果它完全结束。并非所有的争吵都会结束,那些不会成为决定的争吵。
例子:
Kitao defeated Jones via submission (keylock) at 2:14 of round 1.
从这条数据中,我想存储 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
,这样理想吗?
最佳答案
我会在 Fights 表中包含 TotalElapsedSeconds 和 SecondsPerRound 列。然后可以通过将前者除以后者来计算完成的回合数。进入最后一轮的长度可以通过前者对后者的模数来计算。一个单独的表似乎有点矫枉过正。
关于mysql - 我怎样才能最好地调整我的数据库以记录每场比赛的回合数和比赛结束的回合/分钟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5517395/