Database
[데이터베이스] 식별관계와 비식별관계
seandoesdev
2023. 10. 7. 00:00
식별관계
부모 테이블(=참조 되는 테이블)의 기본키를 자식 테이블(=참조 하는 테이블)의 기본키로 사용
비식별관계
부모 테이블(=참조 되는 테이블)의 기본키를 자식 테이블(=참조 하는 테이블)의 외래키로 사용
식별관계와 비식별관계 차이점
- 식별관계를 사용할 경우 반드시 부모테이블에 데이터가 존재해야만 자식테이블에 데이터를 추가할 수 있다.
- 비식별관계는 부모 데이터가 없어도 자식 테이블에서 데이터를 추가할 수 있다.
- 다른말로하면, 식별관계는 데이터 정합성을 데이터베이스 단계에서 보장되며
- 비식별관계는 데이터베이스 단계에서 데이터 정합성을 보장하지 않는다.
- 식별관계의 경우 데이터 정합성을 보장하지만 자식테이블에서 부모테이블의 기본키를 기본키로 사용하고 있는 구조이기 때문에 구조 변경이 자유롭지 못하다.
더보기
정합성과 무결성 차이
정합성 : 어떤 데이터들의 값이 서로 일치하는 상태
무결성 : 데이터의 정확한 상태
예시
무결성 훼손 예시
주문정보 테이블에서 고객번호가 모두 -1으로 입력되어 있고,
고객정보 테이블에도 -1의 값을 갖는 고객이 존재한다. (데이터의 값이 일치한다.)
그러나 고객번호는 반드시 1 이상의 값을 가져야 한다. (데이터의 값이 정확하지 않다.)
이런 상황에는 데이터 정합성은 이상이 없으나, 데이터 무결성은 훼손되었다고 볼 수 있다.
정합성 훼손 예시
위 예시에서 주문정보 테이블의 고객번호를 -1에서 2로 변경했지만, 고객정보 테이블에는 고객번호가 변경되지 않았을 때, (데이터의 값이 서로 일치하지 않는다.)
데이터 정합성이 훼손되었다고 볼 수 있다.
보통 식별관계보다 비식별관계를 더 선호하는데 그 이유는 아래와 같다.
구조 변경에 용이. 식별관계는 부모테이블의 기본키가 자식테이블에서도 기본키로 사용되므로 구조변경이 어렵다.
부모테이블과의 의존성 제거.위와 같은 맥락인데 식별관계는 부모테이블의 값이 없이는 자식테이블에 데이터가 존재할수없다.
과도한 인덱스 제거
reference