나는 이 아니며 감사 또는 기록 추적을 원합니다.SQL 2005/2008 데이터베이스 트랙 필드 변경
외부 소스에서 데이터를 가져 오는 응용 프로그램이 있습니다. 우리는 우리 자신의 DB에서 외부 테이블을 미러링합니다. 우리는 사용자가 DB의 데이터를 업데이트 할 수 있도록 허용합니다. 다음 번에 시스템이 외부 데이터와 동기화되면 우리는 로컬로 변경하지 않은 필드 만 덮어 씁니다.
내 머리 위로 떨어져 나는 각 개체에 대해이1) 스토어 2 개 행을 할 수있는 2 가지 방법으로 생각할 수 있습니다. 첫 번째 1은 외부 버전이고 두 번째 행은 외부 버전에 연결되지만 해당 필드가 변경된 경우에만 필드에 데이터가 있습니다. 예 :
id | parentId | field1 | field2
1 | null | foo | bar
2 | 1 | new foo | null
로컬 사용자가 field1을 변경했을 때의 데이터 모양을 보여줍니다. 변경 사항이없는 경우 첫 번째 행만 나타납니다.
2) 테이블의 열 수를 두 배로 늘립니다. 예컨대 name_external name_internal
더 나은 분리 및 쿼리 할과 두 개체 사이의 코드 비교에서 할 쉽게 제공 할 것처럼 보인다 내가 옵션 1 더 좋아한다. 유일한 단점은 행 수가 많아 질 것이지만 DB는 상당히 작을 것입니다.
사용할 수있는 다른 패턴이 있습니까? 아니면 이유는 내가 옵션 1. 나는 아래에 제공된 두 개의 테이블 답을 갈 것입니다 .NET 4 개 WCF 서비스
솔루션
을 사용하는 것입니다
로 이동하지 않아야합니다. 단지 이제까지 UI 시스템을 통해 업데이트 할 수있을 것입니다 내 DB를 에서처럼 orginal 한 값
SELECT
a.[ID],
isnull(b.[firstName], a.[firstName]),
isnull(b.[lastName], a.[lastName]),
isnull(b.[dob], a.[dob]),
isnull(b.active, a.active)
From tbl1 a
left join tbl2 b on a.[ID] = b.[ID]
로컬로 변경 합병 한 필드가있는 행을 반환하는 다음과 같은 SQL을 사용합니다. 그리고 사람들이 빈 문자열을 입력하도록 대신 값으로 NULL을 입력하도록 허용 할 수 있습니다. 사용자가 당신이 옵션을 선택하면 생각할 수있는 두 가지 문제가 있습니다
몇 개의 필드가 필요합니까? 행이 몇 개입니까? 무슨 SQL 버전? – Hawxby
20 개의 테이블, 각 테이블의 2 열에서 20 열 사이. 각 테이블은 100 - 5000 행 사이에 있습니다 – Daveo