Редактировать : обновить обобщенный вопрос, чтобы отразить фактическую область: хоккейный спорт.
Фактическое событие - это расписание игр, а участники - команды.
Команды являются конечными «владельцами» (т. Е. Когда команда удалена, то же самое относится и к любым другим запланированным играм, результатам, игрокам и статистике игроков).
Проблема, обсуждаемая до сих пор в этом потоке, охватывает решение объединить событие в одну строку с 2 столбцами (team1, team2) или разбить на таблицу соединений. До сих пор консенсус таков: придерживайтесь подхода с двумя столбцами. Однако, учитывая, что первоначальный вопрос относился к общим событиям, а не к запланированным играм с соответствующими результатами, в подходе могут быть изменения (например, некоторые могут сказать, что расписание игр должно содержать ОБА информацию о расписании [дата, время, местоположение, команды] и информацию об итогах / результатах игры (счет, ничья выигрыша, ничьи, штрафные минуты и т. д.), и, следовательно, необходимо добавить таблицу соединения для создания уникальных идентификаторов игры.
Ответы до сих пор были отличными; -) Пометится как ответ в ожидании любых обновлений. Спасибо всем!
ОРИГИНАЛЬНЫЙ ВОПРОС:
Озадачен тем, как решить эту проблему.
Каков нормализованный подход к обработке события (происходящего в данную дату и место), когда всегда будет ровно 2 участника?
Ненормализованный подход заключается в создании таблицы событий:
1) eventID PK (autonum)
2) два столбца: участник1 и участник2, PK (автономно) из таблицы участников.
Хотя этот подход объединяет создание событий в одной записи таблицы (нет таблицы объединения для создания идентификаторов событий), одна из проблем этого проекта заключается в том, что технически участники должны быть собственниками этого уравнения; т.е. при удалении участника любое связанное событие должно быть удалено, поскольку потерянные события не допускаются.
Альтернатива, таблица соединения, как я вижу, создаст уникальный идентификатор события вместе с датой, временем и местоположением. Пересмотренная таблица событий будет состоять из объединяющей таблицы eventID и 2 отдельных строк, по одной для каждого участника. При таком подходе я могу легко добавить FK в таблицу событий для memberID (PK из таблицы участников) и, таким образом, иметь надлежащие ограничения.
Как бы вы подошли к этой проблеме? Я должен отметить, что мы использовали ненормализованный дизайн в производстве в течение нескольких лет без каких-либо проблем (ограничения данных были перенесены на уровень кода), но мы ищем ре-архитектора с нуля (база данных) вверх (код), таким образом вопрос; -)