간단한 토너먼트 시스템을 만들려고 노력 중입니다. 이제는 다른 벽으로 ... 테이블이 있습니다. Teams
- 각 Team
은 여러 경기에 참가할 수 있습니다. 4 열이 나는 Matches
라는 이름의 표를하는 것에 대한 생각했습니다SQL : 디자인 데이터베이스가 토너먼트 디자인을 반영하도록
:
01,
- ID => 식별자를
- Team2ID => 참고로 팀의 ID에
- Team1ID => 참조 팀 ID
- WinnerID => Team1ID 또는 Team2ID
하나로서 동일한 값
WinnerID
은 Team1ID
또는 Team2ID
과 같은 값을 확인하는 SQL 트리거를 갖습니다 ... 그렇지 않으면 트랜잭션을 롤백합니다.
Team myTeam1 = ... Get team1 ...
Team myTeam2 = ... Get team2 ...
Match myMatch = new Match { Team1 = myteam1, Team2 = myteam2; }
: 나는 어떻게 저를 필요로하기 때문에이"집계 루트 당 저장소"등 여러 가지 "모범 사례"규칙을 부러 실현 될 때까지
이 방법은, 시작에서 완벽한 듯 Match
엔티티가 Team
엔티티에 대한 "하위 엔티티"로 정의되어 있으며 Team
엔티티를 통해서만 추가되어야하므로 잘못되었습니다.
내 필요에 맞게 데이터베이스를 올바르게 디자인하는 방법에 대한 제안 사항이 있으십니까?
나는 문에 동의하는지 모르겠다을 Team2PointsScored "경기는 팀에 대한 자식 엔티티입니다." 이 둘은 관련이 있지만 일치는 독립적 인 검색이 필요합니다. DDD 원칙을 충족시키기 위해 설계를 과도하게 생각할 때 조심해야합니다. –
@ 존 블레소소, 잘 ..Match 엔터티는 Team에 의존합니다. 참조 된 2 개의 Team 엔터티가 필요합니다. – ebb
당신은 당연한 일이지만, 내 말은 "팀 X의 모든 경기를 나에게 줄 수 있습니다."가 아닌 다른 방식으로 경기를 원할 수 있다는 것입니다. " 이 경우 일치 항목을 검색하려면 팀 집계 루트가 아닌 다른 것이 필요할 것입니다. –