1-1장 데이터 모델링의 이해 - 5절 식별자

Study/SQLD

1-1장 데이터 모델링의 이해 - 5절 식별자

tnddj1219 2022. 6. 13. 18:11
728x90

1. 식별자 개념

엔터티 내에서 인스턴스들을 구분할 수 있는 구분자
하나의 엔터티에 구성되어 있는 여러 개의 속성 중에 엔터티를 대표할 수 있는 속성을 의미
하나의 엔터티는 반드시 유일한 식별자가 존재
식별자는 논리 데이터 모델링 단계에서 사용(업무적으로 구분이 되는 정보로 생각) / 키는 물리 데이터 모델링 단계에서 사용(데이터베이스 테이블에 접근을 위한 매개체)


2.
식별자의 특징

주식별자의 특징

특징 내용
유일성 주식별자에 의해 엔터티 내에 모든 인스턴스들을 유일하게 구분
ex) 사원번호는 주식별자가 모든 직원들에 대해 개인별로 고유하게 부여됨
최소성 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 함
ex) 사원번호만으로도 고유한 구조인데, 사원분류코드+사원번호로 식별자 번호가 구성될 경우 부적절한 주식별자 구조임
불변성 주식별자가 한번 특정 엔터티에 지정되면 그 식별자의 값은 변하지 않아야 함
ex) 사원번호의 값이 변한다는 의미는 이전기록이 말소되고 새로운 기록이 발생되는 개념
존재성 주식별자 지정되면 반드시 데이터 값이 존재(Null 안됨) ex) 사원번호 없는 회사직원은 없음


대체 식별자의 특징
주식별자의 특징과 일치하지만 외부식별자는 별도의 특징을 가짐(참조무결성 제약조건)


3.
식별자 분류 및 표기법

대표성 여부에 따른 식별자 분류
주식별자: 자신의 엔터티 내에서 대표성을 가짐. 타 엔터티와 참조관계를 연결
보조식별자: 유일성과 최소성만 만족하는 식별자(대표성 X) 참조 관계 연결에 사용할 수 없음

스스로 생성 여부에 따른 식별자 분류
내부 식별자: 스스로 만들어 지는 식별자
외부 식별자: 스스로 생성되지 않고 타 엔티티와의 관계를 통해 타 엔터티로부터 받아오는 식별자

속성의 수에 따른 식별자 분류
단일식별자: 단일 속성으로 식별되는 식별자
복합식별자: 둘 이상의 속성으로 구성된 실별자

대체 여부에 따른 식별자분류
본질식별자: 업무에 의해 만들어지는 식별자
인조식별자: 업무적으로 만들어지지는 않지만, 원조식별자가 복잡한 구성을 가지고 있기 때문에 인위적으로 만든 식별자(후보 식별자 중 주식별자로 선정할 것이 없거나, 주식별자가 너무 많은 컬럼으로 있을 때 사용)

식별자 표기법

DB 키의 종류

종류 내용
기본키(PK; Primary Key) 엔터티를 대표하는 키, 후보키 중 선정됨
후보키 유일성과 최소성을 만족하는 키
슈퍼키 유일성만 만족하는 키
대체키 기본키를 제외한 나머지 후보키
외래키(FK; Foreign Key) 여러 테이블의 기본 키 필드, 참조 무결성(Referential Integrity)을 확인하기 위해 사용됨 (허용된 데이터 값만 저장하기 위함)


4.
주식별자 도출 기준

해당 업무에서 자주 사용되는 속성
직원이라는 엔터티가 있을 때, 사원번호를 주식별자로 지정 & 주민등록번호를 보조식별자로 지정

명칭, 내역 등과 같은 이름으로 기술되는 것들은 피함
한 회사에 부서 이름이 100개가 있다고 할 떄, 각각의 부서이름은 유일하게 구별될 수 있다고 하여 부서이름을 주식별자로 지정하지 않도록 해야 한다.

너무 많은 속성이 포함되지 않도록 함
주식별자로 선정하기 위한 속성이 복합으로 구성되어 주식별자가 될 수 있을 때 가능하면 주식별자 선정하기 위한 속성의 수가 많지 않도록 함


5. 식별자 관계와 비식별자 관계에 따른 식별자

식별자 관게와 비식별자 관계의 결정
다른 엔터티와의 관계를 통해 자식 엔터티에 생성되는 속성을 외부식별자라 지칭
자식 엔터티는 부모 엔터티로부터 받은 외부식별자를 자신의 주식별자로 사용할지 혹은 부모와 연결이 되는 속성으로 사용할지 결정해야 함

식별자 관계
자식엔터티의 주식별자로 부모의 주식별자가 상속이 되는 경우
부모로부터 받은 식별자를 자식엔터티의 주식별자로 이용하는 경우 Null 값이 나오면 안되므로 반드시 부모엔터티가 생성되어야 자기 자신이 생성됨
주식별자로 사용할 경우 부모와 자식은 1:1 관계
부모로부터 받은 속성과 다른 속성들을 함께 주식별자로 사용할 경우 부모와 자식은 1:M 관계

비식별자 관계
부모엔터티로부터 속성을 받았지만 자식엔터티의 주식별자로 사용하지 않고 일반적인 속성으로만 사용하는 경우 비식별자 관계에 의한 외부속성을 생성하는 경우 네 가지
1) 자식 엔터티에서 받은 속성이 반드시 필수가 아니어도 무방 → 부모 없는 자식이 생성될 수 있는 경우
2) 엔터티별로 데이터의 생명주기를 다르게 관리할 경우 ex) 자식엔터티와 관계를 가진 부모엔터티가 먼저 소멸될 수 있는 경우 → 물리데이터베이스 생성 시 외부키를 연결하지 않는 임시적인 방법 사용하기도 하지만, 데이터 모델상에서 관계를 비식별자 관계로 조정하는 것이 가장 좋은 방법
3) 여러 개의 엔터티가 하나의 엔터티로 통합되어 표현되었으나 각각의 엔터티가 별도의 관계를 가지는 경우
4) 자식 엔터티에 주식별자로 사용하여도 되지만 별도의 주식별자를 생성하는 것이 더 유리하다고 판단된 경우

식별자 관계로만 설정할 경우의 문제점
1) 지속적으로 식별자 관계를 연결한 데이터 모델의 PK속성의 수는 데이터 모델의 흐름이 길어질수록 증가하는 구조
2) 조인에 참여하는 주식별자 속성 수가 많을 경우 정확하게 조인관계를 설정하지 않고, 즉 누락하여 개발하는 경우 발생
3) 식별자 관계만으로 연결된 데이터 모델은 주식별자 속성이 지속적으로 증가하여 개발자 복잡성과 오류가능성 유발

비식별자 관계로만 설정할 경우의 문제점
1) 엔터티의 주요한 기준 속성은 부모엔터티의 PK속성으로부터 상속되어 자식엔터티에 존재하는 경우가 많음
2) 엔터티 간의 관계를 비식별자 관계로 설정하면 해당 유형의 속성이 자식엔터티로 상속되지 않아 자식엔터티에서 데이터를 처리할 때 부모엔터티까지 찾아가야 하는 경우 발생
3) 불필요한 조인이 다량으로 유발되어 SQL구문이 길어지고 성능이 저하

식별자관계와 비식별자관계 모델링
1) 비식별자 관계선택 프로세스
가장 중요한 요인은 자식엔터티의 독립된 주식별자 구성의 필요 유무를 분석하는 부분으로, 독립적으로 주식별자를 구성한다는 의미는 업무적 필요성과 성능상 필요어부를 모두 포함하는 의미
2) 식별자와 비식별자 관계 비교

728x90