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