걸음마부터 달리기
DB-6/28 본문
식별자
식별자란 하나의 엔터티에 구성되어 있는 여러 개의 속성 중에 엔터티를 대표할 수 있는 속성을 의미하며 하나의 엔터티는 반드시 하나의 유일한 식별자가 존재해야 한다
키 != 식별자
식별자는 논리 데이터 모델링에서 엔티티를 대표하는 속성이고 키는 물리 모델링때 DB 테이블 접근을 위한 매개체
주식별자의 특징:
유일성 - 주식별자는 모든 인스턴스를 유일하게 구분가능하다.
최소성 - 주식별자를 구성하는 속성 수는 최소개여야한다. ex) 학번 속성으로 각각 구분가능한데 학번과 번호를 섞어서 구성 X
불변성 - 주식별자는 자주 변경되지 않아야한다.
존재성 - 주식별자는 항상 데이터 값이 있어야한다. (NULL값 불가)
대표성 - 주식별자는 엔터티를 대표 할 수 있어야한다.
식별자의 분류:
외부식별자: 외부식별자(Foreign Identifier)는 자기 자신의 엔터티에서 필요한 속성이 아니라 다른 엔터티와의 관계를 통해 자식 쪽에 엔터티에 생성되는 속성을 외부식별자라 하며 데이터베이스 생성 시에 Foreign Key역할을 한다.
즉 원래 그 엔티티 속성에 없는데 타 엔티티랑 관계를 맺을려다보니 타엔티티의 속성 하나를 해당 엔티티 속성에 추가한것.
주식별자 도출 기준
1) 업무에서 자주 사용하는 속성을 주식별자로...
2) 명칭, 내역 등과 같이 "이름"으로 기술되는것 피해야함.
항상 주식별자가 WHERE 조건절에 기술되는 현상이 발생해서 (SELECT 계약금 FROM 접수 WHERE 접수.접수일자 = ‘2010.07.15“ AND 접수.관할부서 = ‘1001’ AND 접수.입력자사번 = ‘AB45588' AND 접수.접수방법코드 = ‘E' AND 접수.신청인구분코드 = ‘01' AND 접수.신청인주민번호 = ‘7007171234567' AND 접수.신청횟수 = ‘1’) 를 인조식별자 도입으로 (SELECT 계약금 FROM 접수 WHERE 접수.접수일자 = ‘100120100715001“) 로...
만약 속성 중에 이름으로 기술되는 것만 있으면
(1) 코드 엔티티에 해당 속성을 코드로 매핑하는 테이블 만들어놓고 그 코드 속성을 주식별자로 지정
(2) 그냥 설계속성(일련번호로) 하나 만들어서 그걸로...
3) 속성이 많아지지 않게
주식별자가 복합 속성으로 구성되도 되긴하지만 최소성 만족시키게 정하자.
주식별자가 너무 많으면 이것을 인조식별자로 생성하여 모델링하는게 더 단순하다.
식별자, 비식별자 관계
식별자관계: 부모로부터 받은 속성(외부식별자)을 자식 엔티티가 모두 사용하고 그걸 자신의 엔티티에서 주식별자로 사용함
비식별자관계: 부모로부터 속성(외부식별자)을 받았는데 자식 엔티티가 주식별자로 쓰지 않고 일반적인 속성으로만 사용함.