2010-01-05 4 views
0

Я хочу создать таблицу, чтобы сохранить историю изменений & История объекта. для этого я создал два столбец первичного ключа (Id дата & обновления)Структура таблицы для множественной иерархии

У меня есть еще 3 дата столбцов для сохранения истории & состояния Колонка для истории фактического объекта. Статус, StatusFrom, Statusto, UpdateDate & NextUpdateDate

UpdateDate & NextUpdateDate для поддержания histroy в ammendment.

Есть ли лучший способ сохранить фактическую историю записи & Ammend histroy записи?

ответ

1

Вы создаете так называемую «таблицу аудита». Есть много способов сделать это; несколько из них:

  1. Создать таблицу с соответствующими полями и ключевыми до/после полей для всех столбцов, которые вы заинтересованы в исходной таблице, вместе с меткой времени, так что вы знаете, когда изменение было сделал.

  2. Создайте таблицу с соответствующими полями ключа, меткой времени модификации, именем поля и столбцами до/после.

Метод (1) имеет проблему, вы в конечном итоге с много полей в таблице аудита - в основном два для каждого поля в таблице источника. Кроме того, если изменяется только одно или два поля в исходной таблице, большинство полей в таблице аудита будут NULL, которые могут потерять пространство (в зависимости от вашей базы данных). Он также требует много специального кода, чтобы выяснить, какое поле изменилось, когда вы вернетесь к обработке таблицы аудита.

У метода (2) возникает проблема, заключающаяся в том, что вы создаете отдельную строку в таблице для каждого поля, которое было изменено в вашей исходной таблице, что может привести к тому, что строки таблицы строк в таблице аудита (одна строка для каждого поля изменено). Поскольку каждое изменение поля приводит к тому, что новая строка записывается в таблицу аудита, вы также имеете одинаковые значения ключей в нескольких строках, которые могут использовать кучу пространства только для ключей.

Независимо от того, как структурирована таблица аудита, обычно используется триггер для их сохранения.

Надеюсь, это поможет.

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