我怎样才能最好地调整我的数据库来记录每次战斗的轮数以及战斗结束的轮次/分钟?

时间:2011-04-01 18:33:42

标签: mysql database-design

我正在存储战斗结束时间的统计信息,如果它完全结束。并非所有战斗都结束,而不是那些不作出决定的战斗。

示例:

  

Kitao通过提交击败了琼斯   (keylock)第1轮2:14。

从这条数据中,我想存储3件事:

  1. 如果战斗结束,它结束的时间
  2. 如果战斗结束,那一轮就结束了
  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添加外键,以及我要跟踪的内容:

    1. 分钟,如果战斗结束
    2. 圆,如果战斗结束
    3. 我会创建一个tinyint列,round_ended可以为NULL,以及time_ended列,以及一个外键引用fight_rounds_types_id,它将引用分钟类型/围绕要使用的规则。

      我的问题是:

      1. 我的fight_rounds_typesminutes_rounds架构在规范化方面是否理想?或者我有更好的方法来设计它吗?
      2. 我可以为time_ended列使用哪种列类型?我想跟踪说2:14。我现在最终使用TIME,这是理想的吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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