mysql - 我怎样才能最好地调整我的数据库以记录每场比赛的回合数和比赛结束的回合/分钟?

标签 mysql database-design

我正在存储战斗结束时间的统计数据,如果它完全结束。并非所有的争吵都会结束,那些不会成为决定的争吵。

例子:

Kitao defeated Jones via submission (keylock) at 2:14 of round 1.

从这条数据中,我想存储 3 个东西:

  1. 如果战斗结束,结束时间
  2. 如果战斗结束,是在哪一轮结束

然而,这其中的复杂部分是因为我正在跟踪来自多个组织的战斗,并不是每个组织每轮的分钟数都是一致的,所以我无法为 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,以及我想要跟踪的内容:

  1. 分钟,如果战斗结束
  2. 回合,如果战斗结束

我会创建一个 tinyint 列,round_ended,它可以为 NULL,还有一个 time_ended 列,以及一个外键引用,fight_rounds_types_id 这将引用要使用的分钟/回合规则的类型。

我的问题是:

  1. 我的 fight_rounds_typesminutes_rounds 架构在规范化方面是否理想?还是有更好的设计方法?
  2. time_ended 列可以使用哪种列类型?我想跟踪说,2:14。我现在暂时使用了 TIME,这样理想吗?

最佳答案

我会在 Fights 表中包含 TotalElapsedSeconds 和 SecondsPerRound 列。然后可以通过将前者除以后者来计算完成的回合数。进入最后一轮的长度可以通过前者对后者的模数来计算。一个单独的表似乎有点矫枉过正。

关于mysql - 我怎样才能最好地调整我的数据库以记录每场比赛的回合数和比赛结束的回合/分钟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5517395/

相关文章:

sql - 有没有办法找出表的关系?

database - 使用 OOPS 设计数据库表架构?

javascript - D3.js,加载数据成功后, View 中看不到任何数据

mysql - 如何在MySQL数据库中创建复合键

php - extjs 4 : filling model data into combobox from PHP + MySql

sql - 性能提升与规范化您的表格?

MS Access 的 PHP MySQL 数据库

php - 如何在sql中一起使用like和between?

mysql - 如何在数据库中保存婚姻关系

mysql - 主表和事务表之间有什么关系?