Mysql 我如何才能最好地调整我的数据库,以记录每次战斗的回合数和战斗结束的回合/分钟数?

Mysql 我如何才能最好地调整我的数据库,以记录每次战斗的回合数和战斗结束的回合/分钟数?,mysql,database-design,Mysql,Database Design,我正在存储战斗结束时间的统计数据,如果它真的结束了。并不是所有的战斗都会结束,那些不会成为决定的战斗也不会结束 例如: 北岛通过屈服打败了琼斯 (钥匙锁)在第1轮的2:14 从这段数据中,我想存储3件东西: 如果战斗结束了,结束的时间是什么 如果战斗结束了,它在哪一轮结束 然而,复杂的是,因为我跟踪多个组织的战斗,不是每个组织每轮的分钟数都是一致的,所以我不能为secondsPerRound列一列。因此,我似乎需要创建一个单独的表来跟踪所有可能的回合/分钟组合。。。示例a战斗回合类型表格: id

我正在存储战斗结束时间的统计数据,如果它真的结束了。并不是所有的战斗都会结束,那些不会成为决定的战斗也不会结束

例如:

北岛通过屈服打败了琼斯 (钥匙锁)在第1轮的2:14

从这段数据中,我想存储3件东西:

  • 如果战斗结束了,结束的时间是什么
  • 如果战斗结束了,它在哪一轮结束
  • 然而,复杂的是,因为我跟踪多个组织的战斗,不是每个组织每轮的分钟数都是一致的,所以我不能为
    secondsPerRound
    列一列。因此,我似乎需要创建一个单独的表来跟踪所有可能的回合/分钟组合。。。示例a<代码>战斗回合类型<代码>表格:

    id   organization_id  num_rounds
    1    9                5
    2    10               3
    
    还有一张地图

    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
    
    然后使用这种类型的
    表模式:

    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\u rounds
    id,并用于我想要跟踪的内容:

  • 分钟,如果战斗结束
  • 如果战斗结束,就轮到我了
  • 我将创建一个tinyint列,
    round\u ended
    ,该列可以为空,
    time\u ended
    列,以及一个外键引用,
    fight\u rounds\u types\u id
    ,它将引用要使用的分钟/轮次规则的类型

    我的问题是:

  • 就规范化而言,我的
    战斗轮次
    分钟轮次
    模式是否理想?还是有更好的设计方法
  • 什么列类型可以用于
    时间\u结束
    列?我想跟踪说,
    2:14
    。我现在用的是
    时间
    ,这样理想吗

  • 为什么不跟踪两列:finish_round和finish_seconds


    然后,无论使用什么系统,您都可以适当地填写它们。

    我的Fights表中会有总计延时秒数和秒数的列。然后,完成的轮数可以通过前一轮除以后一轮来计算。最后一轮的长度可以通过后一轮的模量计算。一张单独的表格似乎有点过分。

    与时间结束的
    和回合结束的相比有什么区别?除了
    finish_seconds
    带来更多的工作,因为在确定秒数时,我可以简单地跟踪
    2:14
    ,例如,额外的计算步骤?但问题是,不是每一轮都有相同的时间。在PRIDE组织中,他们进行了10分钟的首轮比赛和5分钟的后续比赛。。。还有一种可能性是,有一些比赛有这样的定制规则。。。这是整件事的关键…你说“不是所有的战斗都会结束。”你确定吗?好吧,有些人会做出决定,所谓“结束”,我的意思是以一种不依赖于时间流逝的方式结束。