원래 대체 된 행을 통해 다음과 같은 구조를 가진 사용자 라이센스 테이블하게하려면 :재귀 SQL은 내가 마이크로 소프트 SQL Server 2008의 T/SQL을 사용하고
LicenceID (PK, uniqueidentifier, not null)
SupersededID (FK, uniqueidentifier, not null)
…other licence related columns
사용자가 자신의 라이센스 키를 업그레이드의 SupersededID을 원래의 LicenceID로 채워집니다. 이것은 여러 번 발생할 수 있으므로 발행 된 첫 번째 라이센스에 대한 추적이 항상있을 것입니다. 또한 라이센스 키가 절대로 대체 될 수 없습니다.
내가 가지고있는 어려움은 라이센스 테이블의 모든 행을 쿼리하고 각각에 대한 최초의 원래 라이센스 키를 추출 할 수 있어야한다는 것입니다.
내가이 재귀 적으로이 라인을 따라 WITH 방법, 뭔가를 사용하여 쿼리를 호출하여 달성 할 수 있다고 생각하지만, 나는 개념에 완전히 명확하지 않다 .. 이것은 내가 지금까지 무엇을 가지고 :WITH c AS (SELECT SupersededByID, LicenceID, LicenceID AS topParentID FROM Licence where SupersededBy IS NOT NULL UNION ALL SELECT l.SupersededBy, l.LicenceID, c.topparentid FROM Licence AS l INNER JOIN c ON l.id = c.SupersededByID WHERE T.SupersededByID IS NOT NULL) SELECT * FROM c
SCD 유형 2 테이블을 고려하셨습니까? http://en.wikipedia.org/wiki/Slowly_changing_dimension#Type_II 이렇게하면 재귀를 피할 수 있습니다. – gbn