정규화 된 테이블을 비정규 화하는 방법에 대해 조언하는 사람이 있습니까? 나는 인터넷 검색에도 불구하고 그것에 많이 찾을 수 없었어요.완전히 정규화 된 테이블을 비정규 화합니다.
레코드가 업데이트 될 때마다 (삽입되지는 않지만 현재는 걱정할 필요가 없음) TableA에서 레코드가 변경된 필드의 값과 레코드가 수행되었을 때 관련된 타임 스탬프와 함께 HistoryOfTableA에 삽입됩니다.
예 :
TableA의 필드 :
TableA_Id, FieldA, FieldB, FieldC, FieldD.... etc
HistoryOfTableA 기록 :
HistID, TableA_Id, FieldChanged, OldValue, NewValue, DateCreated
1, 1, 'FieldA', 1, 2, <2013-03-18 12:20:00>
2, 1, 'FieldB', A, B, <2013-03-18 12:20:00>
3, 1, 'FieldC', A, B, <2013-03-18 12:20:00>
이 상황은 내가보고 목적을위한 몇 가지 SQL을 만들 찾고있다. 그래서 나는 특정 시점을 지정할 수 있기를 원하고, 그 병목 테이블 엔트리를 모아서 TableA로부터 그 레코드의 상태가 그 때 무엇인지 알아낼 수 있어야합니다.
것은 내가 역사 테이블을 기반으로 테이블을 만들 수 있습니다 생각하고 만든 날짜와 테이블에서 이드
예에 합류하고있다.
select HistA.NewValue,
HistB.NewValue,
....
from FieldA_HistoryOfTableA HistA
inner join FieldB_HistoryOfTableA HistB on HistA.DateCreated = HistB.DateCreated
and HistA.TableA_Id = HistB.TableA_Id
inner join ... etc
where HistA.FieldChanged = 'FieldA'
and HistB.FieldChanged = 'FieldB'
and .... etc...
는하지만이 나에게 내가 원하는 모든 것을 제공하는 것입니다 생각하지 않는다 나는 SQL에서 순수하게이 작업을 수행 할 수 없습니다. 제쳐두고 TableA에는 20 개의 필드가 있으므로 20 개의 테이블을 조인하려는 것은 현명하지 않을 수 있습니다.
어떤 DBMS를 사용하고 있습니까? –
SQL Server 2005 – atamata