我想制作一个简单的锦标赛系统,现在我已经来到另一面墙... 我有一个名为Teams
的表 - 每个Team
都可以参加多个比赛。SQL:反映锦标赛设计的设计数据库
我已经考虑过具有名为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
实体添加。
有关如何正确设计我的数据库以适应我的需求的任何建议?
我不知道我是否同意该声明“比赛是团队子实体”。虽然这两者是相关的,但Matches似乎需要独立检索。我会过分考虑你的设计以满足DDD原则。 – 2011-03-04 13:46:54
@John Bledsoe,好..匹配实体依赖于团队,因为它需要2个团队实体引用。 – ebb 2011-03-04 14:10:25
你当然是对的,但我的意思是你可能想以除了“给我所有比赛的球队X. “在这种情况下,您将需要除团队聚合根之外的其他东西来检索匹配。 – 2011-03-04 14:56:40