논리적 모델링 - 식별 관계, 비식별 관계
논리적 모델링 - 식별 관계, 비식별 관계
식별 관계 vs 비식별 관계 - 개념
- 테이블 간의 관계는
외래 키(FK)를기본 키(PK)의 일부로 사용하느냐에 따라 식별 관계와 비식별 관계로 나뉨 - 식별 관계
- 부모 테이블의
PK를 자식 테이블의PK + FK로 사용 - 뷰모 없이는 자식이 삭별될 수 없는 강한 관계
- 부모 테이블의
- 비식별 관계
- 부모 테이블의
PK를 자식 테이블의일반 컬럼 + FK로만 사용 - 자식은 자신만의 고유한
PK를 가짐 - 부모와 독립적으로 존재할 수 있는 약한 관계
- 부모 테이블의
식별 관계 vs 비식별 관계 - 일대다(1:N)
- 비식별 관계
- 자식 테이블이 독립적인 PK(대리 키)를 가져 구조가 단순하고 명확
- 관계 변경에 유연
- ORM 기술과 친화적
- 식별 관계
- 부모
PK를 포함한 복합키를 자식의PK로 사용 PK자체가 비즈니스 의미를 가지지만, 복합키는 관리하기 복잡하고 유연성과 확장성이 떨어짐
- 부모
식별 관계의 문제점
- 유연성 부족
- PK로 강하게 결합되어 있어, 데이터의 소속을 변경하는 등 비즈니스 요구사항 변경에 대응하기 매우 어려움
- PK 값 자체를 수정해야 하는 문제가 발생
- PK 컬럼의 전파
- 부모 - 자식 - 손자 관계로 계층이 깊어질수록 부모의 PK가 누적되어 손자 테이블의 PK가 매우 길고 복잡해 짐
- 이는 SQL 쿼라와 JOIN, ORM 매핑을 어렵게 만듦
- 현대 애플리케이션 개발에서는 유연성과 확장성을 위해 비식별 관계와 대리 키 사용을 원칙으로 함
식별 관계 vs 비식별 관계 - SQL 쿼리, 성능
- 쿼리 단순성: 비식별 관계는 단일
PK를 사용하므로 조회 조건이 단순하며 이는 API 설계, 개발 편의성, ORM과의 조합에서 큰 이점을 가짐 - 인덱스 성능: 식별 관계는 복합
PK인덱스 덕분에 특정 조회에서 별도 인덱스 없이 효율적일 수 있음 - 결론: 비식별 관계에서 FK에 인덱스를 추가하는 것은 간단. 사소한 인덱스 최적화 이점을 위해 설뎨 전체의 유연성을 희생하는 것은 바람직하지 않음
식별 관계 vs 비식별 관계 - 일대일(1:1)
- 비식별 관계
- 자식 테이블이 독립적인
PK를 가지며, 1:1 관계 보장을 위해 FK에UNIQUE제약조건을 추가 - 테이블 간의 결합도가 낮아 유연하고 확장성이 좋음
- 자식 테이블이 독립적인
- 식별 관계
- 자식 테이블이 부모의
PK를 자신의PK이자FK로 사용 - 구조적으로 강한 결합을 표현하지만, 유연성이 낮음
- 자식 테이블이 부모의
- 향후 관계가 1:N으로 변경 될 사능성을 고려 할 때, 제약 조건만 제거하면 되는 비식별 관계가 테이블 구조를 변경해야 하는 식별 관계보다 훨씬 유리
식별 관계 vs 비식별 관계 - 다대다(M:N)
- 식별 관계
- 양쪽 부모의
PK를 조합한 복합키를 사용 PK자체가 하나의 주문에 동일 상품 중복 불가와 같은 비즈니스 규칙을 강제하지만, 규칙 변경 시PK를 수정해야 해 확장성이 매우 낮음
- 양쪽 부모의
- 비식별 관계
- 독립적인
PK(대리 키)를 사용 - 비즈니스 규칙은
FK조합에UNIQUE제약조건을 추가하여 보장 - 유연성과 데이터 정합성을 모두 확보할 수 있어 가장 권장되는 방식
- 독립적인
식별 관계 vs 비식별 관계 - 현대적인 설계 트렌드
- 현대적인 DB 설계에서는 비식별 관게를 사용하는 것이 사실상 표준
- 이유
- 압도적인 유연성
- 구조의, 단순성과 일관성
- ORM 기술과의 친화성
- 비즈니스 로직과의 분리 등
- 변화에 민첩하게 대응해야하는 현대 소프트웨어의 가치와 부합
설계의 황금룰
- PK: 대리 키
- 관계: 비식별 관계
- 규칙: 비즈니스적 중복 방지는 UNIQUE 제약조건으로 해결
참고
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.