엔티티는 인스턴스들의 집합이라 배웠다. 이들을 구분할 수 있는 논리적인 이름이 있어야 하는데 이를 식별자 라고 부른다. 식별자란 하나의 엔티티에 구성되어 있는 여러 개의 속성 중에 엔티티를 대표할 수 있는 속성을 의미한다. 하나의 엔티티는 반드시 하나의 유일한 식별자가 존재해야 한다.
식별자와 '키'를 헷갈리는 경우가 있는데 식별자라는 용어는 업무적으로 구분이 되는 정보로 논리 데이터 모델링 단계에서 사용하고 '키'는 데이터베이스 테이블에 접근을 위한 매개채로 물리 데이터 모델링 단계에서 사용한다. 그니까... 하는 역할은 비슷하단거 같다.
식별자 특징
주식별자인지 외부식별자인지에 따라 특성이 차이가 난다.
주식별자 특)
1) 유일성: 주식별자에 의해 엔티티내 모든 인스턴스들을 유일하게 구분한다.
2) 최소성: 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 한다. (불필요한 식별자 늘리기x)
3) 불변성: 주식별자가 특정 엔티티에 지정되면 그 식별자의 값은 변하지 않아야한다.
4) 존재성: 주식별자가 지정되면 반드시 데이터값이 존재해야 한다.
대체식별자는 주식별자의 특징과 일치하고 외부식별자는 주식별자 특징과 일치하지 않으며 참조무결성 제약조건에 따른 특징을 가지고 있다.
식별자분류 및 표기법
엔티티 내에서 대표성을 가지는가에 따라 주식별자와 보조식별자로 구분한다.
엔티티 내에서 스스로 생성되었는지에 따라 내부식별자와 외부식별자로 구분.
단일 속성으로 식별이 되는가에 따라 단일식별자와 복합식별자로 구분.
대체되어 새롭게 만들어진 것에 따라 본질식별자와 인조식별자로 구분.
주식별자 도출기준
데이터 모델링에서 중요한 작업중 하나가 주식별자 도출작업이다. 도출 기준은
1) 해당 업무에서 자주 이용되는 속성을 주식별자로 지정한다.
2) 이름으로 기술되는 것들은 가능하면 주식별자로 지정하지 않는다.(명칭, 내역등)
3) 복합으로 주식별자로 구성할 경우 너무 많은 속성이 포함되지 않도록 한다. 일반적으로 주식별자의 속성의 개수가 많다면 인조식별자를 생성해 데이터 모델을 구성하는것이 더 단순하게 하고 애플리케이션 단계의 조건절을 단순하게 하는 방법이다.
식별자관계와 비식별자 관계의 결정
외부식별자는 자기 자신의 엔티티에서 필요한 속성이 아니라 다른 엔티티와의 관계를 통해 자식 쪽 엔티티에 생성되는 속성을 외부식별자라 한다. DB 생성시 FK역할을 한다. 관계와 속성을 정의하고 주식별자를 정의하면 논리적인 관계에 의해 자연스럽게 외부식별자가 도출되지만 중요하게 고려해야 할 사항이 있다.
자식엔티티에서 부모엔티티로부터 받은 외부식별자를 자신의 주식별자로 이용할 것인지 또는 부모와 연결이 되는 속성으로만 이용할 것인지를 결정해야 한다.
식별자관계
부모로부터 받은 식별자를 자식엔티티의 주식별자로 이용하는 경우는 Null값이 오면 안되므로 반드시 부모엔티티가 생성되어야 자기 자신의 엔티티가 생성되는 경우이다. 자식엔티티의 주식별자로 부모의 주식별자가 상속이 되는 경우를 식별자 관계라고 지칭한다.
비식별자관계
부모엔티티로부터 속성을 받았지만 자식엔티티의 주식별자로 사용하지 않고 일반적인 속성으로만 사용하는 경우.
비식별자 관계에 의한 외부속성(외부식별자) 생성 4가지 경우
1) 자식엔티티에서 받은 속성이 반드시 필수가 아니기 때문에 부모없는 자식이 생성될 수 있는 경우.
2) 엔티티별로 생명주기를 다르게 관리할 경우.
3) 여러 엔티티가 하나의 엔티티로 통합되어 표현됐는데 각각의 엔티티가 별도의 관계를 가질때
4) 자식엔티티에서 별도의 주식별자를 생성하는것이 더 유리하다 판단될때.
식별자 관계& 비식별자 관계를 적절히 선택해야 좋은 데이터 모델링이다. 이를 위한 프로세스 하나를 설명한다.
실제로 프로젝트를 전개할 때 식별자관계와 비식별자관계를 취사선택하여 연결하는 내공은 높은 수준의 기술을 요구한다. 기본적으로 식별자로 ㄱ모든 관계가 연결되면서 아래 조건에 해당할 경우 비식별자로 조정하면 된다.
1) 관계분석
2) 관계의 강/약 분석 -> 약하면 비식별자로
3) 자식테이블에 독립PK필요 -> 필요하면 비식별자로
4) SQL복잡도 증가, 개발생산성 저하 -> 단순화가 필요하면 비식별자로
가장 중요한 요인은 자식엔티티의 독립된 주식별자 구성이 필요한지를 분석하는 부분이다. 독립적으로 주식별자를 구성한다는 의미는 업무적 필요성과 성능상 필요여부를 모두 포함하는 의미이다.
위에 잘 따라서 식별자와 비식별자를 잘 적용한 데이터 모델을 만들어 보자!
'SQLD' 카테고리의 다른 글
10일차 - 데이터모델의 성능 (0) | 2021.03.04 |
---|---|
9일차- 데이터 모델의 성능 (0) | 2021.03.03 |
7일차-문제풀이 (0) | 2021.02.20 |
7일차- 관계 (0) | 2021.02.20 |
6일차-속성 (0) | 2021.02.16 |