У меня есть база данных для фэнтези-футбола. Есть три схемы:Совет по дизайну базы данных (конкретный пример - Fantasy Football)
- AFL (относящаяся к субъектам Австралийской футбольной лиги)
- ddhp (относящаяся к местным лицам фантазии конкуренции) и
- ДБО (для юридических лиц конкретно не принадлежащих либо).
Описание лиц
- Каждый игрок играет за AFL Team (нет необходимости отслеживать это по времени, так что я просто записать текущую команду игрок играет за, и обновлять это, если игрок меняет клубы).
- Некоторые игроки играют за команду ddhp. Это выражается Контрактом, который имеет FromRound и ToRound, выражая временные рамки, для которых договор действителен.
- Есть Раунды. В принципе нет никакой разницы между afl и ddhp round, поэтому есть только одна таблица.
- Есть светильники, которые представляют две команды ddhp, играющие друг против друга в раунде.
- Когда игрок играет в раунде, они записывают статистику.
- Каждый раунд, каждая команда ddhp выбирает из своих контрактных игроков тех, кто будет играть за них круглый. Это представлено RoundPlayers.
Проблема в том, что между RoundPlayers и Stats существует уровень неловкости. Логически, RoundPlayer имеет строку в Stats, чтобы представлять их игру в этом раунде (если они играли). Это взаимно-однозначное отношение, но обе таблицы являются необязательными. Игрок может не играть в раунд и, следовательно, не имеет статистики. Игрок также не может быть выбран в качестве RoundPlayer и поэтому не имеет строки в этой таблице. Один из них управляется Round и PlayerId, а другой - Round and ContractId. Перемещение с одного на другое немного неудобно, особенно при попытке использовать ORM (например, Entity Framework 4), поскольку свойства навигации основаны на внешних ключах, тогда как эта взаимосвязь проходит через промежуточную таблицу (Контракт) для получения PlayerId.
Я думал о добавлении ContractId к статистике (если игрок был выбран, чтобы играть в этот раунд), но это было неправильно. Я также подумал об удалении отношения 1-к-1 между Stat и Roundplayer и перемещении их на один стол, но это тоже было не так.
Я был бы признателен за любые мысли о том, как улучшить отношения между RoundPlayer и Stat или даже любые идеи, которые могут полностью изменить эту структуру.
Спасибо, Джей, я рад, что у меня есть комментарии, даже поздние. Проблема все еще существует, хотя она смягчается с помощью других методов. (a) не работают, поскольку RoundPlayers существуют до статистики. Они создаются в разное время. Кроме того, не все Stats имеют RoundPlayer. (b) не работает, поскольку не все Stats имеют RoundPlayer. Я вижу, что в моем вопросе не было ясно, когда я сказал, что есть отношения 1 к 1, отредактирует позже :) – Simon