해당 글에서는 TOPCIT 시험에서 ERD를 그릴 때 각 구성 요소들이 어떤 의미를 가지는지 정리해보겠다.
Table
테이블이다.
PK는 Primary Key의 약자로 기본키를 의미한다.
PK는 각 테이블 당 유일하다.
관계선
- 실선(Identifying): 식별관계
- 부모테이블의 PK가 자식테이블의 FK/PK가 되는 경우
- 부모가 있어야 자식이 생기는 경우
- 점선(Non-Identifying): 비식별관계
- 부모테이블의 PK가 자식테이블의 일반속성이 되는 경우
- 부모가 없어도 자식이 생기는 경우
식별 관계 vs 비식별 관계
식별 관계
식별 관계란, 부모 테이블의 PK 또는 UK를 자식 테이블이 자신의 기본키로 사용하는 관계이다.
부모 테이블의 키가 자신의 기본키에 포함되기 때문에 반드시 부모 테이블에 데이터가 존재해야 자식 테이블에 데이터를 입력할 수 있다.
해당 예시에서 부모는 자동차 자식은 바퀴이다.
즉, 바퀴는 부모인 자동차의 데이터가 존재해야 생길 수 있는 데이터인 것이다.
바퀴 테이블은 자동차 테이블의 PK인 자동차 아이디를 PFK(Primary Foriegn Key)로 가진다.
해당 ERD 전체를 해석해보면 다음과 같다.
자동차는 바퀴를 가지지 않을 수도 1개의 바퀴를 가질 수도 여러개의 바퀴를 가질 수도 있다.
바퀴는 1개의 자동차에 종속된다. (여러개의 자동차에 하나의 바퀴가 연관될 수 없다.)
또한, 바퀴는 자동차가 존재해야만 존재할 수 있는 개체이다.
비식별 관계
비식별 관계란 부모 테이블의 PK 또는 UK를 자신의 기본키로 사용하지 않고, 외래키로 사용하는 관계이다.
자식 데이터는 부모 데이터가 없어도 독립적으로 생성될 수 있다.
부모와의 의존성을 줄일 수 있기 때문에 조금 더 자유로운 데이터 생성과 수정이 가능하다.
위의 ERD에서 바퀴는 식별 관계와는 다르게 자동차가 없어도 존재할 수 있는 독립적인 개체이다.
장/단점
식별 관계의 장점
- 데이터의 정합성 유지를 DB에서 한번 더 할 수 있다.
- 자식 테이블에 데이터가 존재한다면 부모 데이터도 반드시 존재한다고 보장할 수 있다.
식별 관계의 단점
- 부모 테이블의 PK를 자식 테이블로 전파하면서 자식 테이블의 기본키 컬럼이 점점 늘어난다.
- 예를 들어 부모 테이블은 PK 컬럼이 하나였으나 자식 테이블은 2개, 손자는 3개로 늘어나면서 쿼리가 복잡해지고 PK 인덱스가 불필요하게 늘어날 수 있다.
- 연쇄적으로 2개 이상의 컬럼을 합해 복합 기본키로 만들어야 하는 경우가 많다.
- 요구사항이 변경되었을 경우 구조 변경이 어렵다.
- 식별 관계 사용 시 PK로 비즈니스 의미가 있는 자연 키 컬럼을 조합하는 경우가 많고 비식별 관계의 기본키는 비즈니스와 전혀 관계없는 대리키를 주로 이용한다. 비즈니스 요구사항은 시간이 지남에 따라 언젠가는 변할 수 있다. 식별 관계의 자연 키 컬럼들은 변경하기 어려우므로 요구사항을 따라가기 어려워진다.
- 식별 관계는 부모 테이블의 PK를 자식 테이블의 PK로 사용하므로 비식별 관계보다 테이블 구조가 유연하지 못하다.
비식별 관계의 장점
- 변경되는 요구사항을 유동적으로 수용할 수 있다.
- 부모 데이터와 독립적인 자식 데이터를 생성할 수 있다.
- 구조 변경에 용이하다.
비식별 관계의 단점
- 데이터 정합성을 지키기 위해서는 별도의 비즈니스 로직이 필요하다.
- 자식 데이터가 존재해도 부모 데이터가 존재하지 않을 수 있다.
- 즉, 데이터 무결성을 보장하지 않는다.
개념을 잘 파악하여 현재 상황에서 어떤 방법이 더 효율적인지 판단하여 사용하는 것이 중요하다.
참조
'Certificate > TOPCIT' 카테고리의 다른 글
[TOPCIT] UML 연습하기 - Class Diagram (0) | 2023.10.18 |
---|
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!