Относительно оригинальной обобщенной версии задачи: /7104615/proektirovanie-bazy-dannyh-normalizatsiya-v-sobytii-s-2-uchastnikami-tablitsa-soedineniya-ili-2-stolbtsa
Как вы увидите в вышеупомянутой теме, игра (событие) определяется как ровно две команды (участники), играющие друг с другом в определенный день (ни одна команда не играет друг с другом более одного раза в день).
В нашем случае мы решили использовать одну составную таблицу расписаний с идентификатором игры PK, двумя столбцами для команд (назовите их team1 и team2) и столбцами даты, времени и местоположения игры. Кроме того, поскольку две команды + дата должны быть уникальными, мы определяем уникальный ключ для этих объединенных полей. Отдельно у нас есть таблица команд с teamID PK, связанная с столбцами таблицы расписания team1 и team2 через FK.
Эта модель отлично работает для нас, но то, что я не опубликовал в вышеприведенной ветке, это связь между запланированными играми и результатами, а также обработка «версии» каждой команды запланированной игры (т.е. любые заметки team1 или team2 хотят включить, например, «это схватка против неделимого противника и не будет учитываться в турнирной таблице лиги»).
Наша текущая модель стола:
Команды> Составное расписание> Результаты> Статистика (таблицы для оценки и защиты)
Команды> Игроки
Команды> Расписание команды *
* взломать, чтобы справиться с проблемой заметок и разрешить игры TBD / TBA, в которых оппонент, дата и / или местоположение могут быть неизвестны во время представления расписания.
Я не могу не думать, что мы можем консолидировать эту модель. Например, есть ли необходимость в отдельной таблице результатов? Не может ли составное расписание быть ОБА графиком и результатом игры? Именно здесь может вступить в игру объединительный стол.
Таблица присоединения фактически будет генератором gameID, состоящим из:
gameID (PK)
gameDate
Gametime
расположение
Тогда пересмотренный составной график / результаты будут:
id (PK)
teamID (FK для таблицы команд)
gameID (FK, чтобы присоединиться к таблице)
gameType (схватка, турнир, плей-офф)
оценка (то есть количество голов)
штрафы
неравный
результат (победа-ничья)
заметки (командная версия игры)
Мысли оценены, была хитрая попытка углубиться в центральную проблему (таким образом, оригинальный вопрос выше)