Я делаю не хочу Аудит или отслеживание истории.SQL 2005/2008 Изменение поля базы данных базы данных
У меня есть приложение, которое извлекает данные из внешнего источника. Мы зеркалируем внешние таблицы в нашей собственной БД. Мы разрешаем нашим пользователям обновлять данные в нашей БД. В следующий раз, когда система синхронизируется с внешними данными, мы переопределяем только те поля, которые мы не изменили локально.
Off верхней части моей головы, я могу думать о 2-х способов сделать это
1) хранить 2 строки для каждого объекта. Первая 1 - внешняя версия, вторая строка ссылается на внешнюю версию, но будет иметь только данные в поле, если это поле было изменено. , например.
id | parentId | field1 | field2
1 | null | foo | bar
2 | 1 | new foo | null
Это иллюстрирует, как будут выглядеть данные, когда локальный пользователь изменил поле1. Если никаких изменений не произошло, будет только первая строка.
2) Двойное количество столбцов в таблице. name_external например name_internal
Мне нравится вариант 1 лучше, как это кажется, что было бы обеспечивает лучшее разделение и проще для запроса и сделать в коде сравнения между 2 объектами. Единственным недостатком является то, что это приведет к большему количеству строк, но БД будет довольно маленьким.
Есть ли другие шаблоны, которые я мог бы использовать? Или почему я не должен идти с вариантом 1.
Я буду использовать .NET 4 WCF службы
Solution
Я пойду с ответом две таблицы, представленной ниже. и использовать следующий SQL, чтобы вернуть строку, которая имеет поле, которые были изменены локально слиты с 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]
Как и в моей БД только когда-либо будет иметь возможность обновляться через систему пользовательского интерфейса. И я могу гарантировать, что людям не разрешено вводить NULL в качестве значения, вместо этого я заставляю их вводить пустую строку. Это позволит мне преодолеть этот вопрос, что произойдет, если пользователь обновляет значение NULL
Сколько полей? Сколько строк? Какая версия SQL? – Hawxby
20 таблиц, от 2 до 20 столбцов на каждой таблице. У каждой таблицы будет от 100 до 5000 строк – Daveo