2013-10-15 3 views
1

Я создаю приложение/опрос внутреннего осмотра и не знаю, как наилучшим образом поддерживать целостность исторических данных при внесении обновления в вопрос обследования. Например, если администратор вносит изменения в предопределенный вопрос обследований, я не хочу, чтобы какие-либо из завершенных опросов обновляли связанные данные. Таким образом, при проведении аудита опрос рассматривается как первоначально. Я использую SQL Server.Лучший способ сохранить целостность данных в базе данных опроса

The варианты Ive придумали в одиночку либо

  1. Создание нового «QuestionID» каждый раз, когда вопрос обновляется и маркирования существующий вопрос как неактивный.
  2. или хранение оригинального «вопрос» с каждым «ответом»

Я не сделал что-то подобное раньше с реляционной базой данных, и я с трудом находил какие-либо уроки .. Любые предложения?

+0

Я бы сказал, ваш вариант 1 выглядит как хорошая идея. Впоследствии вы могли бы сохранить ссылку на «старый» вопрос при обновлении с новым значением, а также увеличить «номер версии» для более легкого поиска истории вопроса позже, но это, конечно же, будет зависеть от дизайна вашей базы данных. –

ответ

0

Я хотел бы сделать что-то вроде этого, я хотел бы добавить две колонки,
1) data_ID
2) Data_Original_ID
Каждый раз, когда вы создать запись поле Data_ID получает населенную но Data_Original_ID остается пустой до тех пор, пока обновления записи.
Когда обновляется запись Столбец Data_Original_ID заполняется исходным идентификатором и остается неизменным.
Но каждый раз, когда строка обновляется, ей присваивается новый data_ID, но Data_Original_ID будет сохранять свое значение.
Дайте вид вашему пользователю увидеть только последние что-то данные, как этот
View Definition

CREATE VIEW [dbo].[view_TableView] 
AS 
SELECT a.* FROM TableName AS a 
WHERE (a.Data_Original_ID IS NULL AND a.data_ID NOT IN (SELECT DISTINCT Data_Original_ID 
                 FROM TableName 
                 WHERE Data_Original_ID IS NOT NULL) 
OR a.data_ID = (SELECT MAX(data_ID) 
       FROM TableName 
       WHERE Data_Original_ID = a.Data_Original_ID) 
GO 
+0

Хорошо, я в основном сделал что-то похожее, как предлагалось. Реализация версий для каждого элемента. – user2883390

Смежные вопросы