Это:
public class Match
{
// ...
public int? HalfTimeHomeTeamScore { get; set; }
public int? HalfTimeAwayTeamScore { get; set; }
public int? HomeTeamScore { get; set; }
public int? AwayTeamScore { get; set; }
}
- это отдельные объекты, MatchPart
s, если хотите, и они не относятся к самому совпадению, а должны ссылаться на него по ряду причин:
- Количество частей матча на матч зависит от типа спорта, а иногда и от турнира (мужские теннисные майоры играют до 5 сетов, везде, например, до 3 сетов);
- Некоторые части матча являются обязательными, если только матч не отменен полностью, а другие являются необязательными (дополнительное время / штрафы в футболе, t ie перерывы в теннисе). Если конкретный матч был завершен без дополнительных частей, вам просто не нужно создавать записи для них;
- Существуют части, из которых состоят соответствующие части (опять же в теннисе наборы состоят из игр) , так что вам может понадобиться возможность организовать иерархическую структуру. Вы можете создать отдельную таблицу подкомпонентов или собрать все вместе; Вам решать, оба подхода жизнеспособны, если вы достаточно хорошо знаете SQL;
- У вас может быть несколько записей очков для одной и той же части матча, в зависимости от типа счета. Например, в футболе это будут голы, свободные / угловые удары, желтые / красные карточки, пенальти и т. Д. c. В теннисе дополнительными типами очков могут быть тузы и двойные ошибки, просто назвать несколько.
Пожалуйста, имейте в виду, что этот список ни в коем случае не является полным. Я просто поцарапал здесь поверхность, так сказать.
Учитывая все это, результирующая таблица может выглядеть следующим образом:
create table dbo.MatchParts (
Id bigint identity(1,1) primary key,
MatchId int not null references dbo.Matches (Id),
-- Match part type lookup, big thing in itself
PartTypeId int not null references dbo.MatchPartTypes (Id),
-- Parent part reference for sub-part records, in case you decide to store them all in one table
ParentPartId bigint null references dbo.MatchParts (Id),
-- Position # of part within match or parent
SequenceNumber smallint not null,
-- Score type lookup
ScoreTypeId int not null references dbo.ScoreTypes (Id),
Score1 smallint null,
Score2 smallint null,
-- Natural key. Depends... on many other design decisions.
unique (MatchId, PartTypeId, ParentPartId, ScoreTypeId, SequenceNumber)
);
Я бы настоятельно рекомендовал начать с углубленного бизнес анализ предметной области. Это может выглядеть просто, но это не так.