관계형데이터모데링노트 요약

주식별자 선택에 대한 기준

mitomi 2023. 11. 11. 23:11
반응형
SMALL

업무식별자가 주식별자가 될 수 있고, 후보식별자가 주식별자가 될수 있다.

업무 후보 식별자가 주식별자로 부적절하다면 인조식별자가 주식별자가 될 수 있다.

 

주식별자 선택 시 고려사항

주식별자 속성의 값이 변경되지 않도록 선정

주식별자는 다른 엔터티의 외래식별자가 되므로 값이 그대로 사용된다. 주식별자의 값이 변경되면 다른엔터티의 외래 식별자 속성 값도 바뀌어야 하기 때문에 주식별자로 사용되는 업무 식별자는 값이 수정되지 않는것이 바람직하다. 

업무식별자의 값은 인스턴스를 발생시키는 기준이 된다. 그 기준값이 변경되는 것은 인스턴스를 발생시키는 기준을 변경하는 것이므로 변경되지 않는 속성으로 선정해야 한다.

 

속성값이 변경되는 두가지 원인 

첫번째 업무적으로 변경될 수 있는 속성이 있고, 두번째 업무적으로는 변경되지 않는 것이 맞지만, 착오로 인해 변경되는 속성이 있다. 주민등록번호는 변경되지 않는 속성값이지만, 착오로 인해 변경될수 있다.

변경될수있는 값은 주식별자로 사용하지 말자

ex)이름(개명으로 변경가능) 이메일이나 주소 휴대폰번호, 소유개념이 있는 소속지점

 

예외적으로 선분이력 관리하는 엔터티에서는  주식별자 값이 변경될 수 있다.

선분이력방식 일때 종료일자가  기본값(99991231)에서 특정일로 변경 될수 있으며, 이때 사용되는 종료일자는 성능관점에서 도입된 개념으로 변경이 발생해도 업무적으로 이상할 것이 없다. 하지만 자식엔터티가 없을때만 가능하다.

 

일반속성에 종속되지 않도록 선정

일반속성에 존재하는 속성이 주식별자에 포함되면 안된다.

계좌번호는 결정자 역활을 하므로 계좌번호를 알면 개설지점, 상품, 관리지점, 사원번호등 알수 있다.

결정자 역활을하는  계좌번호의 값에 관리지점번호를 사용했다면 관리지점 변경으로 인해 변경해야하는 경우가 생길 수 있다. 함수종속에 어긋난다. 식별자 값이 변경되는 것도 문제지만 함수종속을 위반했기 때문에 사용하면 안되다.

추출속성도 마찬가지로 주식별자에 포함되면 안된다.

 

인조 식별자에는 의미를 부여하지 않도록 선정

인조식별자에 의미를 부여하지 않아야 한다는 것은 위에서 설명한 주식별자 값이 변경되지 않아야 한다는 것과 같은 말이다.

인조식별자는 주식별자가 복잡해지는 것을 방지하기 위해 사용하며, 엔터티의 인스턴스를 고유하게 식별하는 역활을 한다. 따라서 아무의미없이 식별기능만 하는 순번을 주로 사용한다. 업무적으로 의미가 존재하면 속성으로 관리해야 한다.

 

주식별자 속성에는 논리적으로 널값이 존재하지 않도록 선정

주식별자 속성값에는 논리적인 널 데이터를 사용할 수 없다. 알수 없는 값으로는 인스턴스를 식별할 수 없으므로  주식별자가 될 수는 없다.

논리적인 널 값은 업무에 의해서 발생하기보다 데이터 통합이나 데이터 관리 측면에서 발생할때가 있다.

유사한 엔터티를 통합하는 과정에서 주식별자에 널 값이 필요할 수도 있다. 이때 주식별자는 물리적으로 널 값을 사용할 수 없어서 널대신 기본값을 사용해야 한다.

 

 

변경된 데이터를 관리하는  두 엔터티가 유사하다. 계좌순번 속번만 다르기에 고객/계좌 변경이력엔터티 통합 시 고객변경이력 데이터 통합시 계좌순번에 기본값설정해서 사용하면 된다. 중간에 기본값이 바뀌면 안되므로 기존값을 고려하여 적정하게 정해야 한다. 업무에서 사용하지 않는 값을 선택해 기본값과 업무값을 구분해야 한다.

 

최소한의 속성이 포함되도록 선정

최하위 엔터티가 아니면 주식별자는 최소한의 속성으로 구성하는 것일 좋다.

특히 하위엔터티가 많은 경우 하위엔터티의 주식별자가 복잡해지는 것을 방지할 수 있으며, 모델이 복잡해지는 것을 방지할 수 있다. 주식별자 속성이 많으면 가독성이 떨어져 다른 엔터티와 관계선과 조인구문이 복잡해진다.

주식별자는 최소한의 속성으로 구성하자

 

업무적으로 활용도가 높은 속성으로 선정
여러개의 후보식별자 가운데 주식별자로 선정하는 중요한 원 중 하나는 가능한 업무 식별자를 그대로 사용하는 것이다.

업무식별자는 업무에서 자주 사용될 가능성(조회를 자주한다)이 크기 때문이다. 인조식별자를  사용한다면 필요한 데이터를 찾아가는 한번의 과정을 더 거치게 되므로 사용 효율성에서는 업무 식별자보다 떨어진다.

 

업무식별자와 인조식별자가 혼합되지 않도록 선정

슈퍼식별자가 되지 않도록 선정

슈퍼식별자는 주식별자에 다른속성을 추가해서 만든 식별자다. 

인스턴스의 유일성을 보장하는 데 기여하지 않는 속성은 주식별자에서 제외해야 한다. 

 

최소 길이가 되도록 선정

주식별자 속성 값의 길이는 최대한 짧아야 효율적이다. 주식별자 자릿수를 20->10자리로 줄였다면 저장공간도 절약되지만 성능도 많이 좋아진다. 주식별자 길이가 길면 블록을 사용하고 인덱스를 깊게만들기 때문에 I/O증가... 성능이 좋지 않다. 

데이터타입도 varchar 보다  number이 저장공간이 절약된다.number타입을 사용할때는 가독성과 정렬에 문제가 될수 있기때문에.. 3자리를 사용한다면 100부터 시작되도록 사용하는 것이 좋다.

 

주식별자 속성값은 가능한 고정길이가 되도록 선정

주식별 값의 길이는 가능하면 같아야하고, 그래야 데이터 성격이 더욱 명확해 질수 있고, 조회하는데 혼선이 생기지 않는다. 예외는 배타관계일때 인데 고객번호은 6자리 계좌번호는 8자리통합된 배타속성의 varchar(8)

배타속성이 주식별자가 되면 값의 길이가 달라질수 있따.

 

주식별자 속성은 전사에서 한번만 사용되도록 선정

주식별자 속성은 전체 모델에서 한번만 사용되도록 선정하는 것이 좋다.

주식별자가 동일한 엔터티가  존재하는 것도 좋지 않다.

(예외. 서브타입엔터티나 엔터티 를 수직분할한 일대일관계의 엔터터는 주식별자가 같다. 근본적으로 같은집합)

전체 모델에서 주식별자 속성 한번만 사용하는것에 대한 의미

주식별자 선정시 더욱 시중해질 것/ 엔터티에서 관리하는 집합의 성격에 대핸 다시한번생각/ 엔터티 통합 효과

 

주식별자가 공통으로 사용된다면 엔터티의 성격 파악 힘들고, 관계를 표현할 때도 혼란스럽다.

유사한 주식별자가 많을수록 어떤 엔터티와 관계가 존재하는지 혼란스러워진다.

 

암호화 대상 속성이 포함되지 않도록 선정

암호화대상 속성이 주식별자가 되면 안된다. 업무식별자와 다름 없는 주민등록번호 같은 속성을 암호화 해 주식별자로 사용하는 것은 비효율적이다.

 

업무를 대표할 수 있는 속성으로 선정

업무를 대표할 수 있는 속성을 주식별자로 사용하면  엔터티를 직관적으로 이해할 수 있고 모델의 가독성도 좋아진다.

업무에서 많이 사용되기 때문에 주식별자로 사용하면 조회 요건에 효과적이다.

 

728x90

'관계형데이터모데링노트 요약' 카테고리의 다른 글

주식별자 선정 절차  (0) 2023.11.12
주식별자를 단순하게 설계해야 하는 이유  (0) 2023.11.11
주식별자가 변경되는 이유  (0) 2023.11.09
속성  (0) 2023.11.08
잘못된 서브타입  (0) 2023.11.07