Нормализация схемы :: График составной игры, ограниченный командой - PullRequest
0 голосов
/ 20 мая 2011

Относительно оригинальной обобщенной версии задачи: /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 (схватка, турнир, плей-офф)
оценка (то есть количество голов)
штрафы
неравный
результат (победа-ничья)
заметки (командная версия игры)

Мысли оценены, была хитрая попытка углубиться в центральную проблему (таким образом, оригинальный вопрос выше)

1 Ответ

1 голос
/ 20 мая 2011

Не вижу смысла иметь отдельные таблицы для расписания и результатов. Однако я бы переместил «gameType» в таблицу «Игры», иначе вы сохраняете одно и то же значение дважды. Я также рассмотрел бы добавление идентификаторов команды в таблицу игр. Это будет служить двум целям: это позволит вам легко различать домашнюю и выездную команды и значительно упростит написание запроса, который возвращает данные обеих команд в одной строке.

Games
   gameID       (PK)
   gameDate
   gameTime
   homeTeamID
   awayTeamID
   location
   gameType     (scrimmage, tournament, playoff)

Sides
   id           (PK)
   TeamID       (FK to teams table)
   gameID       (FK to games table)
   score
   penalties
   powerplays
   notes

Как показано, я бы также пропустил поле "Результат". Это может быть эффективно выведено из столбцов «Оценка».

...