如何表示足球比赛模型?

How to represent a Football match model?

目前我正在开发一个与以下实体一起运行的应用程序:

我正在处理一个难题:如何表示 FootballMatch 域实体,这些选项中哪个最合适?还有,足球比赛有比分。

class FootballMatch
{
    public Team FirstTeam { get; set; }
    public Team SecondTeam { get; set; }
    public DateTime Date { get; set; }
    public string Score { get; set; } // like 0 - 3 (FirstTeam - SecondTeam)
}

class FootballMatch
{
    public IEnumerable<Team> Teams { get; set; }
    public DateTime Date { get; set; }
    public string Score { get; set; } // like 0 - 3 (Teams[0] - Teams[1])
}

或(我认为这是最好的,改变我的想法)

public class TeamPlay
{
   public Team Team { get; set; }
   public FootballMatch Match { get; set; }
   public int Goals { get; set; }
}

public class FootballMatch
{
   public TeamPlay FirstTeam { get; set; }
   public TeamPlay SecondTeam { get; set; }
   public DateTime Date { get; set; }
}

任何指导/建议将不胜感激!如果总是只有 2 支足球队参加一场足球比赛,我不知道是否可以收集球队。

请注意,我希望球队有一份参加过的足球比赛列表

public class Team
{
    public string Name { get; set; }
    public IEnumerable<FootbalMatch> AttendedMatches { get; set; }
}

我会推荐选项 1:

class FootballMatch
{
    public Team FirstTeam { get; set; }
    public Team SecondTeam { get; set; }
    public DateTime Date { get; set; }
}

原因是您肯定知道一场比赛中总是恰好有两支球队。我理解不愿意让团队被“排序”,即使顺序并不重要,但这种设计仍然与实际领域最接近。

此外,这将使您在数据库 table 设计方面更加轻松。您不想将 match table 拆分为 matchmatch_teams table。这将大大降低数据库性能,并使查询数据的整体难度和效率降低。它还为 match_teams table 中的条目打开了大门,这些条目在每场比赛中关联多于或少于两支球队。

事实上,我建议让两个 team_id 字段都不可为空。通过这种方式,您可以确保一场比赛始终只有两支队伍。

的确,要查询一支球队的所有比赛(如您的第三个代码片段所示),您的查询现在必须涵盖球队 table 中的两个外键字段(例如 team1_idteam2_id)。尽管如此,它更清洁、更高效。

更新

关于记分,我建议在相同的 match table 上使用两个对应于两支球队的数字分数字段,即:team1_idteam2_idscore1score2。同样的设计可以应用于相应的领域对象,它看起来像这样:

class Match
{
    public Team Team1 { get; set; }
    public Team Team2 { get; set; }
    public short Score1 { get; set; }
    public short Score2 { get; set; }
    public DateTime Date { get; set; }
    //Stadium, Location, etc.
}