Как мога най-добре да коригирам базата си данни, за да записвам броя на рундовете на битка и рунда/минутата, в която битката е приключила?

Съхранявам статистика за времето, в което е приключила битката, ако е приключила изобщо. Не всички битки свършват и тези, които не се превръщат в решения.

Пример:

Китао победи Джоунс чрез събмишън (клавишно заключване) в 2:14 на рунд 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_types и minutes_rounds идеална ли е по отношение на нормализирането? Или има по-добър начин да проектирам това?
  2. Какъв тип колона мога да използвам за колона time_ended? Искам да проследя, да речем, 2:14. В крайна сметка използвах TIME за сега, това идеално ли е?

person meder omuraliev    schedule 01.04.2011    source източник
comment
Ти каза, че не всички битки свършват. Сигурен ли си в това?   -  person Mike Sherrill 'Cat Recall'    schedule 02.04.2011
comment
Е, някои отиват на решение, под край имам предвид буквално край по начин, който не разчита на изтичане на времето.   -  person meder omuraliev    schedule 02.04.2011


Отговори (2)


Бих имал колони в моята таблица с битки за TotalElapsedSeconds и SecondsPerRound. След това броят на завършените кръгове може да се изчисли чрез разделяне на първия на по-късния. Дължината в последния кръг може да се изчисли чрез модула на първия от последния. Отделните маси изглеждат пресилени.

person Jim Bolla    schedule 01.04.2011
comment
Но работата е там, че не всеки кръг има еднакво време. В организацията PRIDE те имаха 10 минути първи рунд и 5 минути следващи рундове... и има вероятност да е имало битки, които са имали персонализирани правила като този... това е гаечният ключ в цялата тази работа... - person meder omuraliev; 01.04.2011

защо не проследите две колони: finish_round и finish_seconds.

тогава можете да ги попълните по подходящ начин, без значение каква система се използва.

person Randy    schedule 01.04.2011
comment
Каква би била разликата спрямо time_ended и round_ended? Освен finish_seconds, което изисква повече работа поради допълнителната стъпка на изчисление при определяне на секунди, когато мога просто да проследя 2:14 например? - person meder omuraliev; 01.04.2011