Я пытаюсь создать простую систему турниров, и теперь я пришел к другой стене ...
У меня есть таблица с именем Teams
- каждый Team
может участвовать в нескольких матчах.
Я думал о том, чтобы иметь таблицу с именем Matches
, которая имеет 4 столбца:
- ID => Идентификатор
- Team1ID => Ссылка на ID в командах
- Team2ID => Ссылка на ID в командах
- WinnerID => То же значение, что и Team1ID или Team2ID
WinnerID
затем будет иметь SQL-триггер, который проверяет, совпадает ли его значение с Team1ID
или Team2ID
... Если нет, то откат транзакции будет выполнен.
Этот подход с самого начала казался идеальным, пока я не осознал, что он нарушил несколько правил "наилучшей практики", в том числе "хранилище на корень совокупности" , потому что он потребовал бы от меня:
Team myTeam1 = ... Get team1 ...
Team myTeam2 = ... Get team2 ...
Match myMatch = new Match { Team1 = myteam1, Team2 = myteam2; }
, что неверно, поскольку сущность Match
определена как "дочерняя сущность" для сущности Team
и должна добавляться только через сущность Team
.
Любые предложения о том, как правильно спроектировать мою базу данных, чтобы соответствовать моим потребностям?