관계형 데이터 모델링 프리미엄 가이드 DB구축 (2017년)
이력 엔터티의 주 식별자 0 0 563

by 구루비스터디 이력관리 [2018.01.21]


12.5 이력 엔터티의 주 식별자

시작일자 속성을 주 식별자에 포함

  • 엔터티의 원래 주 식별자 + 시작일자 속성을 포함(또는 종료일자 속성끼지 포함)
 
--현재 소속 지점 조회 퀴리
SELECT *
  FROM 대리점소속 a, 대리점 b
WHERE a.대리점코드 = b 대리점코드
  AND a.대리점코드 = '123'
  AND a.유효종료일자 = '99991231'

* PK 인텍스인 대리점코드 + 유효시작일자 인텍스를 사용하지 못한다


--과거 특정일을 조회하는 퀴리
SELECT *
  FROM 대리점소속 a, 대리점 b
WHERE a.대리점코드 = b 대리점코드
  AND a.대리점코드 = '123'
  AND '20200123' BETWEEN a.유효시작일자 AND a.유효종료일자

- Primary Key  : 대리점코드+유효시작일자  (유일성 보장:주 식별자에 유효종료일지까지 포함하면 Unique lndex는 필요 없는 대신 Primary Key가 무거워지는 것은 생각해볼 일)
- Index        : 대리점코드+유효종료일자  ( 현재 시점의 데이터를 조회) 
- Unique Index : 대리점코드+유효시작일지+유효종료일자 (과거 특정일의 데이터를 조회)


종료일자를 주 식별자에 포함

  • 일반적인 모델은 아님 (주식별자인 종료일자 값에 업데이트가 발생:식별자 값은 변경되지 않아야한다)
 
--현재 소속 지점 조회 퀴리
SELECT *
  FROM 대리점소속 a, 대리점 b
WHERE a.대리점코드 = b 대리점코드
  AND a.대리점코드 = '123'
  AND a.유효종료일자 = '99991231'

* 현재 시점의 데이터를 조회하기 위해서 별도로 최적화된 인텍스가 필요하지않다

--과거 특정일을 조회하는 퀴리
SELECT *
  FROM 대리점소속 a, 대리점 b
WHERE a.대리점코드 = b 대리점코드
  AND a.대리점코드 = '123'
  AND '20200123' BETWEEN a.유효시작일자 AND a.유효종료일자

- Primary Key  : 대리점코드+유효종료일자  
- Unique Index : 대리점코드+유효시작일지+유효종료일자 (과거 특정일의 데이터를 조회)


변경순번 속성을 주식별자에 포함

  • 변경순번은 의미 그대로 일련번호(업무적으로 의미가 있다면 고려:자주 중요하게 시용되는 업무 요건)

  • 기존의 변경순번 값에는 +1 씩을 업데이트하고 새로운 인스턴스를 추가하며 변경순번 값을 '1' 로 생성(1은 현재데이터)
  • 비효율적인 모델링 하지만 성능상으로는 유릴할듯함
"주주클럽 스터디모임" 에서 2017년에 "관계형 데이터 모델링 프리미엄 가이드" 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/3744

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입