식별관계와 비식별관계
안녕하세요 🐸
오늘은 데이터베이스 엔터티 간의 식별관계와 비식별관계에 대해 정리해보겠습니다.
식별 관계
자식 테이블의 기본키(PK)에 부모 테이블의 기본키가 포함되어 있는 관계
아래는 예시를 위한 테이블 구조 입니다.
부모 테이블 : 사용자
- 사용자 ID (PK)
부모 테이블 : 게시글
- 게시글 ID (PK)
자식 테이블 : 댓글
- 사용자 ID (PK, FK)
- 게시글 ID (PK, FK)
이러한 관계에서 특정 댓글을 식별하기 위해서는 반드시 부모 테이블의 값을 알아야 합니다.
이처럼 자식 테이블의 특정 값을 식별하기 위해 부모 테이블의 기본키를 필요로 하는 관계를 식별 관계라고 합니다.
ERD에서는 이런 관계를 실선으로 표현합니다.
비식별 관계
자식 테이블의 기본키(PK)에 부모 테이블의 키가 포함되어있지 않은 관계
아래는 예시를 위한 테이블 구조 입니다.
부모 테이블 : 사용자
- 사용자 ID (PK)
부모 테이블 : 게시글
- 게시글 ID (PK)
자식 테이블 : 댓글
- 댓글 ID (PK)
- 사용자 ID (FK)
- 게시글 ID (FK)
위 관계에서는 특정 댓글을 식별하기 위해서는 댓글의 고유한 ID 값만 있어도 가능합니다.
ERD 에서는 이런 관계를 점선으로 표현합니다.
요약
식별 관계
- 부모 테이블의 기본키를 자식 테이블이 기본키+외래키 로 사용
- 부모 테이블에 참조 값이 없다면 자식 테이블에 값을 추가 할 수 없음
- 예시) 유저 테이블과 게시글 테이블이 있을 때 유저가 없이는 게시글을 작성할 수 없음
- 구조 변경이 어려움
비식별 관계
- 부모 테이블의 기본키가 자식 테이블의 외래키로 사용
- 부모 테이블에 참조 값이 없더라도 자식 테이블에 값을 추가할 수 있음
- 예시) 유저 테이블과 쿠폰 테이블이 있을 때 쿠폰은 독자적으로 존재할 수 있음. 유저에게 할당되지 않은 쿠폰이 존재할 수 있기 때문. 단 NOT NULL 이 아닌 경우에 한함.
- 구조 변경이 용이함
궁금한 점🤔❓: FK를 NOT NULL 로 하는 경우는 기능적으로 식별 관계와 기능적인 차이는 고유한 식별 값의 존재 여부 외에 큰 차이점을 모르겠다. 하지만 이런 경우가 존재하는지 모르겠다.
PK를 단순하게 만들어서 관리 편의성을 늘이는 정도의 이점이 있는가?
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.