Каким был бы реляционный способ хранения турнирной сетки в MySQL? - PullRequest
2 голосов
/ 10 сентября 2010

Прямо сейчас у меня есть таблица для матчей, где в каждом матче есть ссылка на 2 соревнующихся участников и победителя, но нет способа сохранить порядок раундов.

Ответы [ 4 ]

1 голос
/ 10 сентября 2010

Что-нибудь мешает вам создать поле с именем round_order?Вы знаете заказ?

0 голосов
/ 10 сентября 2010

Свернута ли скобка, как в теннисе (или турнире March Madness), и если да, то вам нужно будет ответить на вопросы типа "В каком раунде, если вообще будут играть Федерер и Надаль?" Тогда вам нужно будет сохранить скобку в виде дерева в базе данных.

0 голосов
/ 10 сентября 2010

На самом деле, я не уверен, что согласен.

Если у вас есть поле «round» в таблице «match», вы вводите возможность проблем с целостностью, так как в итоге вы получите строку в таблице для каждого раунда (что на самом деле не имеет смыслапоскольку это таблица «совпадений», то для каждого совпадения должна быть только одна строка)

Если вы сделаете это, в каждой строке может быть разный набор участников, что, вероятно, не является вашим намерением иуказывает на то, что вы должны «округлить» ключ к другой таблице.Другими проблемами, связанными с честностью, будут «поле победителя», например, если вы укажете победителя раунда в таблицах матчей, как вы узнаете, кто выиграл матч?Если вы просто поместите победителя матча во все ряды, вы потеряете информацию о том, кто выиграл раунд.

Для соответствующей нормализации создайте, скажем, таблицу «MatchRound».

Giveваша таблица сопоставления - первичный ключ (например, назовите его Match_Id), а затем ваш круглый стол может иметь: Round_Id (автономный номер или аналогичный уникальный первичный ключ), Match_Id (который является внешним ключом таблицы сопоставлений) и, возможно, RoundOrder и RoundType (Final, Полу и т. Д.).Вы, вероятно, также можете добавить Winner и Loser в эту таблицу.

Хотя двойное использование поля round_number для полу / четвертей и т. Д. Будет работать, оно работает только в том случае, если топология согласована между совпадениями, например, всегда естьчетвертьфинал?Некоторые виды спорта накапливают очки, например, и затем имеют только финал.По этой причине я бы просто создал текстовое поле RoundType.

0 голосов
/ 10 сентября 2010

Достаточно просто сохранить поле «круглое число» в таблице совпадений.Возможно, вы захотите присвоить номера раундов в обратном порядке, то есть: 1 для финала, 2 для полуфинала, 3 для четвертьфинала и т. Д. Вместо 1 для первого раунда, 2 для второго,и т. д.

Это дает дополнительное преимущество, благодаря которому вы можете сразу получить информацию из номера раунда.Например, сделать запрос для всех полуфиналов будет очень просто ... WHERE round_number = 2, и он не будет зависеть от общей сложности турнирных раундов.

...