사람 (PID, 이름, 생년월일, AddressId) PID가있는 대용 키 (자동 증가)
주소 (Address1, Line1, Line2, City, State) 주소 대리 키가됩니다. (자동 증가)
많은 트랜잭션 테이블에서 PersonID (PID)가 사용됩니다. 일정 기간 동안 사람의 주소가 바뀔 수 있으므로 데이터베이스에 레코드 버전을 저장해야하므로 시간 슬라이스에 따라 올바른 버전을 참조 할 수 있습니다. 어떻게 처리해야합니까?
나는 역사 예를 저장하기 위해 같은 테이블을 사용하여이
- 같은 솔루션 무언가를 가지고 생각하고
- 사람 (PID, 이름, 생년월일, AddressId)
- 주소 (AddressId, 1 호선, 2 호선, 도시, 주, STARTDATE, 종료 날짜, LastUpdatedBy, LastUpdatedDate)
이의는의 초기 기록을 가정 해 봅시다 사람은 다음과 같이
이제Person(100, X, Y, 110)
Address(110, A, B, C, D, 2011-01-01, 9999-12-31, Y, 2011-01-01)
주소는 내가
을 할 생각입니다 PID (100)에 대한 2012 변경되었습니다 주소가 PID (100)에 대한 2014 다시 변경하는 경우Address(740, A, B, Q, D, 2012-06-01, 2014-06-01, Y, 2012-01-01) - INSERT
Address(320, A, B, C, D, 2011-01-01, 2012-06-01, Y, 2011-01-01) - NO CHANGE
Address(110, A, B, N, D, 2014-06-01, 9999-12-31, R, 2012-06-01) - UPDATE
가 지금은 대리 키를 변경하지 않고 동일한 테이블에서 기록 데이터뿐만 아니라 현재 데이터를 조회 할 수 있습니다처럼
Address(320, A, B, C, D, 2011-01-01, 2012-06-01, Y, 2011-01-01) - INSERT
Address(110, A, B, Q, D, 2012-06-01, 9999-12-31, Z, 2012-06-01) - UPDATE
그것은 보일 것이다. 나는 역사적인 테이블을 참조 할 필요가 없으므로 논리와 테이블을 공격 할 필요가 없다.
이 접근 방식은 주소 코드가 고유하다고 가정 할 때 테이블에 고유 키 제약 조건을 적용 할 수 없습니다. 어떻게 처리할까요?
다른 접근 방식과 피드백을 제안하십시오.
Person_At_Address(PID,AddressId,StartDate,EndDate,LastUpdatedBy,LastUpdatedDate)
그리고 항복 사람과 주소에서 해당 열을 제거 :
Person(PID, Name, Dob)
Address(AddressId, Line1, Line2, City, State)
을 사람이 주소를 변경 이제 때마다 내가 할 것이 무엇
'AddressID'및 'StartDate'에 고유 키 적용 –
검색어는 '임시 테이블'입니다. [일시적인 데이터베이스에 관한 Snodgrass의 정액 책] (http://www.cs.arizona.edu/~rts/publications.html)은 그의 웹 사이트에서 무료입니다. 주제가 생각보다 복잡합니다. –