프로그래밍/SQL / / 2022. 9. 22. 10:05

[SQL] 식별자 비식별자 분류 관계

비식별자 관계 고려 이유
비식별자 관계 고려 이유

1. 식별자 (Identifier)

 

1) 개념

 

- 엔터티의 각 인스턴스를 개별적으로 식별하기 위해서 사용되는 하나의 속성 또는 속성들의 조합을 말한다.

- 엔터티 내에서 하나의 행을 콕 집어낼 때 사용하는 것이다.

 

2) 예

 

- 고객 (고객번호)

- 사원 (사원번호)

- 주문 (주문번호)

- 상품 (상품번호)

 

3) 특징

 

- 각각의 인스턴스 집합은 주 식별자에 의해 유일하게 구분할 수 있다. (유일성)

- 주 식별자를 구성하는 속성의 수는 최소한의 수로 이루어져야 한다. (최소성)

- 주 식별자가 한번 정해지면 그 값은 변하지 말아야 한다. (불변성)

- 주 식별자가 지정되면 반드시 데이터 값은 존재해야한다 (Null 불가, 존재성)

 

*  NULL : 아직 정해지지 않은 미지의 값

 

 

 

4) 분류

 

- 대표성 여부

 

 - 주 식별자 ; 예) 사원번호, 고객번호

- 보조 식별자 ; 주 식별자가 아니라서 대표성을 가지지 못한다. 예) 주민등록번호

 

- 속성의 수

 

- 단일 식별자 : 하나의 속성으로 구성된 식별자. 예) 고객 엔터티의 고객번호

- 복합 식별자 : 둘 이상의 속성으로 구성된 식별자. 예) 주문상세 엔터티의 주문번호

 

5) 식별자 도출 기준

 

- 비즈니스에서 자주 이용되는 속성을 주 식별자로 지정한다.

- 명칭, 장소와 같이 이름으로 기술이 되는 속성은 가능하면 주 식별자로 하지 않는다.

- 주 식별자를 복합 식별자로 할 경우 지나치게 많은 속성이 포함되지 않도록 한다.

 

 

 

6) 식별자 관계와 비식별자 관계

 

* 식별자 관계

 

- 자식 엔터티에서 부모 엔터티에 받은 외부 식별자를 자신의 주 식별자로 이용한 경우

- 자식 입장에서 외부식별자(FK)를 자신의 식별자로 사용하고 있는 것

- 강한 연결 관계

 

* 비식별자 관계

 

- 자식 엔터티에서 부모 엔터티에 받은 외부 식별자를 부모와 자식이 연결되는 속성으로서만 이용한 경우

- 자식 엔터티 입장에서 외부식별자(FK)를 자신의 식별자로 사용하고 있지 않은 것

- 약한 연결 관계

 

=> 업무 특징, 자식 엔터티의 주 식별자 구성, SQL 작성 전력에 의해 결정한다.

 

7) 식별자 관계로만 설정한 경우

 

- SQL문의 복잡성이 올라감

- 조인(Join) 조건이 누락되는 실수 발생 확률이 높아진다.

- 관계가 도출될 때마다 PK 속성의 수가 지속적으로 증가하게 된다.

- SQL문 개발 시 필연적으로 테이블 간의 조인을 하게 된다. 조인에 참여하는 식별자 속성의 개수가 많을 경우 SQL 문의 복잡도가 올라간다.

 

 

 

8) 고객/주문의 관계를 비식별자로 설정한 경우

 

- 주문 엔터티 구성 시 주문번호를 식별자로 지정하고 고객번호를 외부 식별자로 하는 비식별자 관계를 설정

- SQL 작성 시 복잡성과 오류 가능성 줄여주게 된다.

 

9) 비식별자 관계를 고려해야 하는 경우

 

- 데이터 모델링 작업 시 식별자 관계와 비식별자 관계를 취사선택하여 연결하는 것. 높은 수준 내공 필요로 하는 모델링 기술이다.

 

- 기본적으로 식별자 관계로 모든 관계를 연결하면서 다음 조건에 해당할 경우 비식별자 관계로 조정하면 된다.

1. 관계의 강/약 분석 => 약한 관계 => 비 식별자 관계 고려
2. 자식 테이블 독립 PK 필요 => 독립 PK 구성 => 비 식별자 관계 고려
3. SQL 복잡성 증가 (개발 생산성 하락) => PK 속성 단순화 => 비 식별자 관계 고려

 

LIST
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유