2017-09-22 1 views
0

중간 테이블의 복합 기본 키에있는 속성이 null일까요? 나는 삼항 관계가 있고 두 엔티티에는 하위 클래스가 있습니다. 서브 클래스에는 고유 한 기본 키가 있습니다. 중간 테이블의 기본 키는 하위 클래스 기본 키 (아래 이미지 참조)로 구성되므로 일부 속성이 null 일 때가 있습니다.3 진 관계의 서브 클래스 매핑

중간 테이블로 주문했습니다. 이러한 속성이 null 일 때가있을 것입니다. 예를 들어 고객이 레스토랑 메뉴에서 상품을 주문하면 음식 주문 ID는 null이됩니다. 이런 식으로해도 괜찮습니까? 어떻게해야하지 않습니까?

enter image description here

답변

2

복합 키 필드가 널이 될 수 없다. customermenuorder이 특정 유형의 고객 또는 메뉴에 대해 크게 의존하지 않도록 각각의 추상화를 숨겨야합니다. 중간 테이블이 필요하면 합성 기본 키를 입력하고 레스토랑과 케이터링 메뉴의 구분을 처리하십시오. 테이블 상속 (Postgres가있는 경우) 또는 뷰를 사용하여 각 유형의 고객 또는 메뉴에 대한 전체 데이터 세트를 나타냅니다.

하지만 먼저 테이블을 분할해야합니다. 외래 키가 null이지만 괜찮은 테이블과 외래 키가 적은 경우 응용 프로그램 논리를 쉽게 만듭니다.

+0

중간 주문() 테이블의 경우 메뉴 하위 클래스 테이블 레스토랑 및 케이터링 메뉴에서 오는 두 개의 기본 키를 바꿔야합니까? 따라서이 두 키를 수퍼 클래스 메뉴의 기본 키로 대체 한 다음 세 개의 외래 키를 사용하여 기본 키를 다시 세 테이블에 연결하십시오. – Rubiks

+0

'orders'는'customer_id'와'menu_id' 외래 키를 가져야합니다. 각각의 단일 열은'customers'와'menus'의 단일 열 기본 키를 참조합니다. 레스토랑 및 케이터링 메뉴를 별도의 테이블로 분리해야하는 경우 (한 테이블의 스파 스 데이터가 세계에서 가장 나쁜 것은 아닙니다!), 'menus'에는 'restaurant_menu_id'및 'catering_menu_id'가 있어야합니다. 외래 키. 어느 쪽이든은 null가됩니다. 점검 제한 조건을 사용하여 최소한 하나의 값이 있는지 확인하십시오. – dmfay