제5절_식별자
2012.03.03 21:51
1.식별자의 개념
식별자 : 하나의 엔터티에 구성되어 있는 여러 개의 속성 중에 엔터티를 대표할 수 있는 속성.
하나의 엔터티는 반드시 하나의 유일한 식별자가 존재해야함.
(식별자-논리 데이터 모델링 / 키-물리 데이터 모델링)
*엔터티 : 인스턴스들의 집합
2. 식별자의 특징
주식별자
- 주식별자에 의해 엔터티내에 모든 인스턴스들이 유일하게 구분되어야 한다 (유일성)
- 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 한다.(최소성)
- 지정된 주식별자의 값은 자주 변하지 않는 것이어야 한다.(불변성)
- 주식별자가 지정이 되면 반드시 값이 들어와야한다.(존재성)
*unique index vs pk
항목 | Pirimary key | Unique index |
목적 | constraint + index | index |
공통점 | 유일성보장 | 유일성보장 |
참조 무결성 | pk 제약조건 | 불가 |
테이블당 개수 | only 1 | 여러개 가능 |
인덱스 생성 | unique index | unique index |
역공학 적용시 | pk인식가능 | pk인식 불가 |
null허용 | 허용 안됨 | 허용 |
3.식별자 분류 및 표기법
가.식별자 종류
나.식별자 표기법
4.주식별자 도출기준
주식별자 도출기준
- 해당 업무에서 자주 이용 되는 속성을 주식별자로 지정한다.
- 명칭, 내역 등과 같이 이름으로 기술되는 것들은 가능하면 주식별자로 지정하지 않는다.
- 복합으로 주식별자로 구성할 경우 너무 많은 속성이 포함되지 않도록 한다.
가.해당업무에서 자주 이용되는 속성을 주식별자로 지정하도록함
사원테이블에서 주식별자는 사번/주민등록번호 둘다 가능
--> 회사에서 직원을 관리할때는 사번이 흔히 사용되므로 사번을 주식별자, 주민등록번호를 보조 식별자로 사용한다.
나.명칭, 내역 등과 같이 이름으로 기술되는 것은 피함
부서이름의 경우 해당 회사에서 유일하게 구별이 가능하나, 실제 개발 업무에서 쓰기 부적합(띄어쓰기, 긴 명칭으로 인한 오류)
--> 일련번호, 코드로 사용
다.속성의 수가 많아지지 않도록 함
주식별자로 선정하기 위한 송성이 복합으로 구성될경우 가능하면 속성의 수가 많지 않도록 해야함.
--> 엔터티간 관계에서 관계가 식별관계일경우 복합 식별자가 그대로 상속되므로 쿼리가 복잡해지며, 물리 데이터 베이스에서
조인으로 인한 성능저하가 발생할 수 있음.
--> 인조식별자 사용

/*복합식별자 */
SELECT 계약금
FROM 접수
WHERE 접수.접수일자 = ‘2010.07.15'
AND 접수.관할부서 = ‘1001’
AND
접수.입력자사번 = ‘AB45588'
AND 접수.접수방법코드 = ‘E'
AND 접수.신청인구분코드 = ‘01'
AND 접수.신청인주민번호 =
‘7007171234567'
AND 접수.신청횟수 = ‘1’
/*인조 식별자*/
SELECT 계약금
FROM 접수
WHERE 접수.접수일자 = ‘100120100715001'
5.식별자관계와 비식별자관계에 따른 식별자
가.식별자관계와 비식별자 관계의 결정
외부식별자 : 자기 자신의 엔터티에서 필요한 속성이 아니라, 다른 엔터티와의 관계를 통해 자식쪽에 엔터티에 생성되는 속성.
나.식별자관계
자식엔터티가 부모로부터 받은 식별자를 주식별자로 이용하는 경우는 Null 값이 오면 안되므로 반드시 부모엔터티가 생성되어야 자기 자신의 엔터티가 생성되는 경우.

다.비식별자관계
부모엔터티로 속성을 받았지만 자식엔터티의 주식별자로 사용하지 않고 일반적인 속성으로만 사용하는 경우
- 자식엔터티에서 받은 속성이 반드시 필수가 아니어도 무방한 경우(부모없는 자식생성 가능)
- 엔터티별로 데이터의 생명주기를 다르기 관리할 경우. 자식만 남겨두고 부모의 인스턴스가 먼저 소멸되는 경우
- 여러개의 엔터티가 하나의 엔터티로 통합되고, 각각의 엔터티가 별도의 관계를 가질때
- 자식엔터티에 주식별자로 사용하여도 되지만, 별도의 주식별자를 생성하는 것이 더 유리하다고 판단될때.


라.식별자 관계로만 설정할 경우의 문제점
지속적으로 식별자 관계를 연결한 데이터 모델의 PK속성의 수는 데이터 모델의 흐름이 길어질수록 증가함

마.비식별자 관계로만 설정할 경우의 문제점
부모엔터티에 있는 PK속성이 자식(정확히는 손자 이후부터)엔터티로 상속되지 않음.
즉 손자 엔터티에서 할아버지 엔터티로 접근할경우 반드시 부모 엔터티를 거쳐야만 접근이 가능하게됨.

바.식별자관계와 비식별자관계 모델링
1.비식별자관계 선택 프로세스
기본적으로 식별자관계로 모든 관계가 연결되면서 다음 조건에 해당할 경우 비식별자관계로 조정하면 된다.

가장 중요한 부분은 자식엔터티의 독립된 식별자 구성이 필요한지 여부
(업무적 필요성, 성능상 필요여부 모두)
2.식별자와 비식별자관계 비교

3.식별자와 비식별자를 적용한 데이터 모델
/*예제 다시 작성*/
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
18 |
제5절_WHERE_절
![]() | 보라빛고양이 | 2012.03.10 | 15283 |
17 | 제4절_TCL(TRANSACTION_CONTROL_LANGUAGE) | 보라빛고양이 | 2012.03.10 | 8526 |
16 | 제3절_DML(DATA_MANIPULATION_LANGUAGE) | balto | 2012.03.09 | 7225 |
15 |
제2절_DDL(DATA_DEFINITION_LANGUAGE)
[1] ![]() | balto | 2012.03.09 | 12154 |
14 | 제1절_관계형_데이터베이스_개요 | balto | 2012.03.09 | 10864 |
13 | 제5절_데이터베이스_구조와_성능 | 오예스 | 2012.03.07 | 6467 |
12 | 제4절_대량_데이터에_따른_성능 | 오예스 | 2012.03.07 | 7475 |
11 |
제3절_반정규화와_성능
![]() | ljw | 2012.03.04 | 15701 |
10 |
제2절_정규화와_성능
![]() | ljw | 2012.03.04 | 10791 |
9 |
제1절_성능_데이터_모델링의_개요
![]() | ljw | 2012.03.04 | 44938 |
8 | 제4절_관계(Relationship) [1] | 실천하자 | 2012.03.04 | 13425 |
7 | 제3절_속성(Attribute) | 실천하자 | 2012.03.04 | 7631 |
6 | 제2절_엔터티(Entity) | 실천하자 | 2012.03.04 | 10083 |
5 | 제1절_데이터_모델의_이해 | 실천하자 | 2012.03.03 | 22984 |
» |
제5절_식별자
![]() | ljw | 2012.03.03 | 19343 |
3 |
Front Page
![]() | 운영자 | 2012.02.20 | 187094 |
2 | 제3절_조인_수행_원리 | 실천하자 | 2012.04.11 | 7380 |
1 | 제3절_조인_기본_원리 | 보라빛고양이 | 2012.05.30 | 4325 |