논리적 모델링 - 일대일, 다대다 관계
논리적 모델링 - 일대일, 다대다 관계
일대일(1:1) 관계 - 시작
- 일대일(1:1) 관계는 두 테이블을 하나로 핣치는 것이 더 효율적인 경우가 많아 상대적으로 드물게 사용
- 그럼에도 불구하고 성능 최적화, 보안 강화, 선택적 정보 표현 비즈니스 모델에 따른 관심사 분리 등을 위해 1:1 관계를 사용
- 1:1 관계를 DB에서 강제하려면, 외래 키(
FK) 컬럼에 유니크(UNIQUE) 제약조건을 추가해야 함
일대일(1:1) 관계 - 외래 키 위치
- 보조 테이블에 외래 키를 두는 것을 권장
- 보조 테이블 FK
- 주 테이블의 변경 없이 새로운 관계를 추가할 수 있어 확장성이 매우 높음
- 향후 1:N 관계로 변경이 용이 (₩ 조건만 해제 하면 됨)
- OCP를 만족하는 좋은 설계
- 주 테이블에 FK: 확장성이 매우 낮고 데이터 추가 로직이 복잡해지는 단점이 있음
일대일(1:1) 관계 - 주 테이블에 FK를 쓰는 경우
- 관계가 필수일 때: 주 테이블의
FK에NOT NULL제약조건을 걸어 데이터 정합성을 DB 수준에서 강제할 수 있음 - 조회 성능이 극도로 중요할 때:
JOIN없이 보조 정보의 존재 여부를 확인 할 수 있어 성능상 이점을 가질 수 있으나, 섣부른 최적화는 피해야 함 - 예외적인 경우를 제외하고는 확장성과 유연성을 위해 보조 테이블에 FK를 두는 것이 표준적인 설계 방식
다대다(M:N) 관계 - 관계형 모델의 한계
- RDB는 구조적(원자성, PK유일성, FK의 단일 행 참조) 때문에 두 개의 테이블만으로는 다대다(M:N) 관계를 직접 표현할 수 없음
다대다(M:N) 관계 - 연결 테이블
- 다대다 관계의 해결책은 중간에 연결 테이블을 두어, 기존의 다대다 관계를 두 개의 일대다(1:N) 관계로 풀어내는 것
- 연결 테이블은 양쪽 테이블의 기본 키를 각각 외래 키로 가지며, 두 태이블을 연결하는 다리 역할
다대다(M:N) 관계 - 속성
- 연결 테이블은 단순히 관계를 이어주는 기술적 역할을 넘어, 관계 자체에 대한 추가적인 속성을 저장하는 중요한 역할을 함
- 실무에서 대부분의 다대다 관계는 속성을 가지므로, 연결 테이블은 그 자체로 중요한 비즈니스 의미를 갖는 연관 엔티티가 됨
- 따라서 개념적 모델링 단계에서부터 이미 별도의 엔티티로 식별 되는 경우가 많음
다대다(M:N) 관계 - 개념적, 논리적 모델링
- 속성이 없는 다대다 관계: 개념적 모델링 에서는 M:N 관계로 표현 되지만, 논리적 모델링에서는 연결 테이블을 통해 1:N 관계로 풀어내야 함
- 속성이 있는 다대다 관계: 개념적 모델링 단계에서부터 연관 엔티티가 등장하여 1:N 관계로 표현 되며, 논리적 모델링에서는 이를 그대로 테이블로 구현
- 실무에서는 대부분 숨겨진 속성이 발견되므로 다대다 관계를 발견하면 그 관계 자체에 어떤 정보가 포함될지 고민하는 것이 중요
참고
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.