Я ищу способ неразрушающего изменения данных. У меня есть одна таблица, в которой есть данные, которые не следует редактировать - это основные данные. Я хотел бы, чтобы пользователь редактировал эти данные, но для обеспечения целостности основных данных я создал вторую таблицу, которая является зеркалом структуры основной таблицы.
Я думаю, что я в основном сделал бы представление (vAdjustedData) таким, чтобы эти данные были объединены вместе, давая мне источник, который был самой последней версией данных. (Цель этого состоит в том, чтобы позволить пользователям отменить свои данные в скорректированной таблице и вернуть данные основных таблиц в текущее состояние).
Столбцы в таблицах будут обнуляться. Идея состоит в том, что, когда пользователь желает внести изменения, в это время основная запись будет скопирована, изменения применены, а затем сохранены в таблице корректировок. Моя идея UNION заключалась бы в том, чтобы замаскировать исходную основную запись с откорректированной записью так, чтобы при размещении в представлении я получал «текущие» данные. Когда эта настройка удалена, представление «автоматически» откатится назад.
Итак, у меня есть Table_Master и Table_Adjusted. Table_Master имеет первичный ключ. Table_Adjusted также имеет первичный ключ, но он является внешним ключом первичного ключа Table_Master. Если бы в обеих таблицах был столбец varchar, я хотел бы написать представление, похожее на это:
(SELECT ID, Value
FROM Table_Adjusted)
UNION
(SELECT ID, Value
FROM Table_Master
WHERE ID NOT IN (SELECT ID FROM Table_Adjusted))
Приведенный выше UNION должен принести все скорректированные значения, а затем все значения из мастера, у которых не было записи о корректировке.
Это правильный способ сделать это? Мне это кажется неэффективным. Я думал, что ИСКЛЮЧЕНИЕ будет работать (с использованием SQL2K8), но это не представляется целесообразным.