2012-08-16 2 views
0

와 데이터 모델링이 예제를 가지고 때 일반적인 일대 다 연결을 사용하는 '모범 사례'방법은 무엇입니까는 Grails의

관리자, ShopSteward, 파일럿, BaseballCoach 등

그들은 모든 개별 클래스입니다, 따라서 모든 데이터베이스에 자신의 별도의 테이블이있다.

일반적으로 여러 이메일 주소를 기록해야합니다. 중복 된 코드를 피하기 위해 이메일 주소가 포함 된 EmailAddress라는 src/groovy에 @Validatable 클래스를 만들고 해당 주소의 선택적 레이블과 함께 물론 만들 것입니다.

이제는 다른 도메인 클래스에 여러 전자 메일 주소가 기록되도록하려면 EmailAddress를 확장하고 관계의 소유자 측으로 다시 링크하는 새 Domain 클래스를 만드는 것이 가장 좋습니다.

예.

class ManagerEmailAddress extends EmailAddress { 
    static belongsTo = [Manager] 
} 

& 관리자 클래스에

hasMany = [emails:ManagerEmailAddress] 

을 추가? 또는 소유주를 식별하기 위해 수많은 discriminators가있는 단일 EmailAddresses 테이블을 갖는 것이 더 낫습니까?

미리 답변 해 주셔서 감사합니다.

답변

1

다른 테이블/클래스에 대해 동일한 구조를 복제하는 것은 거의 불가능합니다 (여기서는 concrete-table-per-class를 사용하면 코드 중복을 줄일 수 있습니다). 그리고 discriminator와의 또 다른 데이터베이스 관계는 부모 테이블을 병합해야한다는 신호입니다.

그러므로 Person 또는 Contact과 같은 공통 수퍼 클래스를 추출하고 Emails을 해당 클래스에 연결하는 것이 좋습니다.