目前我正在開發一個與以下物體一起運行的應用程式:
- 足球比賽
- 團隊
我正在處理一個難題:如何表示 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; }
}
uj5u.com熱心網友回復:
我會推薦選項1:
class FootballMatch
{
public Team FirstTeam { get; set; }
public Team SecondTeam { get; set; }
public DateTime Date { get; set; }
}
原因是你肯定知道一場比賽中總會有兩支球隊。我理解即使順序并不重要,也不愿意讓團隊被“排序”,但這種設計仍然與實際領域最接近。
此外,這將使您在 db 表設計方面的生活更加輕松。您不想將match表拆分為一個match和一個match_teams表。這將大大降低資料庫性能,并使查詢資料整體變得更加困難和效率低下。它還為表中match_teams每場比賽關聯多于或少于兩支球隊的條目打開了大門。
事實上,我建議讓這兩個team_id欄位都不可為空。通過這種方式,您可以強制一場比賽始終只有兩支球隊。
確實,要查詢一個團隊的所有匹配項(如您的第三個代碼片段中所示),您的查詢現在必須將兩個外鍵欄位包含到團隊表中(例如team1_id和team2_id)。盡管如此,它更干凈,性能更高。
更新
至于記分,我會建議在相同的兩個數字分數欄位match的表對應于兩支球隊,即:team1_id,team2_id,score1和score2。相同的設計可以應用于相應的域物件,它可能如下所示:
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.
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/313314.html
