태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

'주 식별자'에 해당되는 글 3건

이번 요건은 다소 까다롭습니다.

 

-한 계좌에는 관리 사원, 실적 사원 등 여러 역할 사원이 존재한다.

-한 사원은 여러 계좌의 관리 사원이 될 수 있고, 여러 계좌의 실적 사원이 될 수 있다.

-동일 사원이 동일 계좌에 대해 여러 역할을 할 수는 없다.

-계좌에 대한 역할 사원은 한 번 정해지면 바뀌지 않는다.

 

위 요건을 설계한 모델이 [그림 1]입니다.

잘못된 부분을 생각해 보세요.

 

[그림 1]

 

역할유형코드의 인스턴스는 관리사원, 실적사원입니다.

 

--

 

식별자밖에 없으니 식별자에 대한 문제죠.

 

우선, 역할이 한 번 정해지면 바뀌지 않는다고 했습니다. 즉 한 번만 지정되는 것이니 역할지정일자 속성은 식별자가 아닙니다.

 

그리고 동일 사원이 동일 계좌에 대해 여러 역할을 할 수 없다고 했습니다. 이 요건 때문에 역할유형코드 속성이 식별자에서 제외됩니다.

 

따라서 정제된 모델은 [그림 2]와 같습니다.

 

[그림 2]

 

릴레이션은 아래와 같습니다.

 

[계좌역할사원]

#계좌번호

#사원번호

역할유형코드

역할지정일자

10001

500(홍길동)

관리사원

2045-01-01

10001

100(강길동)

실적사원

2045-01-01

40001

100(강길동)

관리사원

2045-03-31

80001

500(홍길동)

관리사원

2045-05-01

80001

300(이길동)

실적사원

2045-05-01

50001

500(홍길동)

실적사원

2045-05-31

 [그림 3]

 

항상 사례 데이터를 만들어서 요건을 확인해 보시길 바랍니다.

설계할 때부터 그렇게 하는 게 좋습니다.

특히 기준 정보, 관계 정보, 기본 정보 등의 데이터는 필수라고 생각합니다.

 

코드 속성이 식별자에 포함될 때는 주의해야 합니다.

코드 속성이 식별자에 포함된다는 것은, 코드 별로 관리하려는 대상이 여러 개라는 것을 의미하죠.

 

[그림 3]을 예로 들면, ‘10001’번 계좌에 대해서 관리 사원이 홍길동강길동이 될 수 있거나, ‘홍길동이 관리 사원과 실적 사원이 동시에 될 수 있을 때 역할유형코드 속성이 식별자에 포함됩니다.

 

위의 요건 중 첫 번째, 두 번째 요건은 관계비(까마귀발)를 나타냅니다.

즉 첫 번째 요건은 해당 엔터티와 계좌 엔터티에 대한 관계비를 나타내고, 두 번째 요건은 해당 엔터티와 사원 엔터티의 관계비를 나타냅니다.

 

세 번째 요건은 관계가 없으니 관계비와는 무관하고, 해당 엔터티에서의 식별자와 연관됩니다.

네 번째도 마찬가지로 해당 엔터티에서의 식별자와 연관됩니다.

 

위와 같이 요건 중에는 관계비를 의미하는 게 있고요. 관계 속성이죠.

일반 속성을 의미하며 식별자와 연관되는 요건이 있습니다.

둘을 구분하면 주 식별자 설계에 도움이 됩니다.

관계비가 일대다라고 꼭 식별자에 포함되는 것은 아닙니다.

 

두 개념이 복잡하게 엮인 요건은 주 식별자 설계가 까다롭습니다.

인터뷰 시에도 담당자가 정확히 설명하지 못할 수 있습니다.

사례 데이터를 만들어 보면서 많이 연습하는 게 중요합니다.


참고로 [그림 1]처럼 일반 속성이 식별자에 포함된 것을 슈퍼 식별자라고 합니다.

이미 식별이 되는데 다른 속성을 추가했으니 식별자 역할은 합니다.

슈퍼 식별자면 요건 자체도 흔들릴 수 있고, 데이터가 잘못 쌓이면 요건이 망가집니다.

데이터 무결성을 저해하는 가장 심한 것 중의 하나가 슈퍼 식별자입니다.

 

'데이터 Story > 데이터 상념(想念)' 카테고리의 다른 글

데이터 아키텍트 프레임웍  (0) 2018.03.31
[worst practice 4]  (0) 2017.11.04
worst practice  (0) 2017.10.28
[worst practice 2]  (3) 2017.09.30
모델러의 상처  (0) 2017.09.25
[worst practice 1] 잘못 설계된 모델  (1) 2017.09.24
블로그 이미지

블루퍼필

댓글을 달아 주세요

잘못 설계한 사례 모델을 간혹 올릴 생각입니다.

궁금하신 점이나 다른 아이디어 있으면 댓글로 남겨주세요.

 

--

 

요건은 아래와 같습니다.

 

-회원은 주민등록번호 별로 한 번만 가입이 가능하다.

-회원은 고유한 회원아이디가 있으며, 한 회원이 여러 개의 회원아이디를 가질 수 있다.

 

[그림 1]은 위의 요건을 설계한 모델입니다.

 


[그림 1]

 

어디가 잘못 설계됐는지 잠깐 생각해 보세요.

그런데 모델이 너무 간단해서 잘못될 부분이 한 군데 밖에는 없네요.

 

잘못된 부분은 답글에 올렸습니다.

답글 보시기 전에 많이 생각해 보세요.

 

--

 

회원아이디 엔터티의 주 식별자가 잘못 설계됐습니다.

 

회원아이디 속성 값이 고유하기 때문에 회원아이디 엔터티의 주 식별자는 [그림 2]와 같이 회원아이디 단독 속성이어야 합니다.

 


[그림 2]

 

회원이 아이디를 여러 개 가질 수 있어서 [그림 1]처럼 설계됐고요.

인덱스를 생각하다 설계하면 [그림 1]과 같이 될 거 같습니다.

 

이미 식별자 역할을 하는 주 식별자에 다른 속성을 추가해서 만든 것을 슈퍼 식별자라고 합니다.

실무에서 슈퍼 식별자는 광범위하게 사용되는데 찾기가 쉽지 않다는 게 또 다른 문제입니다.

업무 식별자를 충실하게 분석하는 방법 밖에 없습니다.

 

슈퍼 식별자가 사용되면 엔터티 본질이 흐려지고요.

실제 업무 식별자가 중복 발생될 수 있습니다.

슈퍼 식별자가 하위 엔터티로 상속되면 위의 문제가 배가 되고요.

계속 상속될수록 모델은 난해해집니다.

 

모델을 이해할 수 없게 만드는 주범 중의 하나가 슈퍼 식별자로 절대로 사용하지 않아야 합니다.

 

'데이터 Story > 데이터 상념(想念)' 카테고리의 다른 글

[worst practice 2]  (3) 2017.09.30
모델러의 상처  (0) 2017.09.25
[worst practice 1] 잘못 설계된 모델  (1) 2017.09.24
DA 전망  (0) 2017.09.23
모델링을 수행하는 주체는?  (0) 2017.09.17
업무를 모르면 모델링을 할 수 있을까요?  (0) 2017.09.02
블로그 이미지

블루퍼필

댓글을 달아 주세요

주 식별자(Primary Identifier)는 엔터티에 하나만 존재하는 대표 식별자입니다. 업무 식별자나 후보 식별자와 달리 물리적인 개념이 강해 PK(Primary Key)라고 생각해도 될 거 같습니다.

 

주 식별자 역할은 두 가지 관점으로 생각할 수 있습니다. 하나는 자신의 엔터티를 바라보는 관점이고요. 다른 하나는 다른 엔터티에서 바라보는 관점입니다.

 

전자는 자신의 엔터티 내에서 인스턴스를 식별하는 PK 역할이고요. 후자는 다른 엔터티에서 바라볼 때 그 엔터티와의 관계를 식별하는 FK(Foreign Key) 역할입니다.

 

주 식별자는 물리적으로 인스턴스를 대표하는 역할을 하기 때문에 인스턴스를 조회할 때 사용하고요. 또한 다른 엔터티와 조인(Join)할 때도 주 식별자를 사용합니다.

 

주 식별자를 선정하는 방법은 두 가지가 있습니다. 하나 또는 여러 개의 후보 식별자 중에서 대표로 지정할 수가 있고요. 적당한 후보가 없다면 인조 식별자를 만들어 주 식별자로 사용할 수도 있습니다. 주 식별자를 선정하는 방법은 이후에 자세히 설명하겠습니다.

 

주 식별자는 몇 가지 특성이 있습니다.

 

가장 기본적인 특성은 엔터티에 주 식별자가 반드시 존재해야 한다는 것입니다. 더 정확히 표현하면 엔터티에는 물리적인 주 키(Primary Key)가 반드시 존재해야 합니다. 간혹 PK가 없는 엔터티를 볼 수 있는데요. 이는 엔터티 무결성을 지키지 않은, 기본이 지켜지지 않은 모델입니다.

 

그리고 주 식별자는 하나만 존재해야 합니다. 이것이 또한 물리적으로 PK가 존재해야 하는 이유이기도 합니다. 하나만을 지정해야 다른 엔터티와의 조인(Join)이 가능합니다.

 

또한 주 식별자 속성은 당연히 널(Null) 값을 허용하지 않습니다.

 

주 식별자는 정규화의 기준이 되는 속성입니다. 정규화라는 행위가 먼저이고 그 결과에 따라 주 식별자가 정해지는지, 아니면 주 식별자가 정해지고 정규화가 진행되는지 애매한 점은 있지만, 최소한 정규형이 맞는지를 검증할 때는 주 식별자가 명확한 기준이 됩니다.

 

주 식별자(PK)는 외래 식별자(FK)와 함께 많이 알려진 식별자입니다. 실제로 많이 사용하는 식별자라 개념을 이해하는 것은 어렵지 않습니다. 어떤 속성을 주 식별자로 선택할지가 어려운 부분인데요. 주 식별자 선정 원칙은 별도로 설명하겠습니다.

 

 

블로그 이미지

블루퍼필

댓글을 달아 주세요