Лучший способ реализовать последний измененный столбец в Sql Server 2005? - PullRequest
3 голосов
/ 04 декабря 2008

Как реализовать последний измененный столбец в SQL?

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

Спасибо.

Ответы [ 5 ]

5 голосов
/ 04 декабря 2008

Триггеры - лучший способ, потому что эта логика тесно связана с таблицей, а не с приложением. Это почти единственное очевидное правильное использование триггера, о котором я только могу подумать, кроме более детальной ссылочной целостности.

Но я думаю, что даты «последней модификации» в любом случае ошибочны. Что делает «последнюю измененную» временную метку более ценной, чем те, что были до нее? Как правило, вам нужен более полный контрольный журнал.

3 голосов
/ 05 декабря 2008

Единственный другой способ сделать это без использования триггеров - запретить любые вставки / обновления / удаления в таблицу напрямую через разрешения и настаивать на том, чтобы все эти действия выполнялись с помощью хранимых процедур, которые позаботятся об установке даты изменения. 1001 *

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

Если существует много таблиц, требующих такой функциональности, я бы предпочел триггеры, так как это упрощает код. Простые, хорошо написанные и хорошо проиндексированные триггеры аудита, как правило, не слишком злые - они портятся только тогда, когда вы пытаетесь поместить слишком много логики в триггер.

2 голосов
/ 04 декабря 2008

Вы можете использовать ключевое слово DEFAULT, если у вас есть ограничение по умолчанию. При вставке не нужно указывать значение, здесь можно использовать ключевое слово.

Нет триггера и выполняется в той же записи, что и "реальные" данные

UPDATE
   table
SET
   blah,
   LastUpdatedDateTime = DEFAULT
WHERE
   foo = bar
1 голос
/ 04 декабря 2008

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

Триггер - единственный метод, который вы можете использовать для этого. А для тех, кто сказал, что триггеры - это зло, нет, это не так. На сегодняшний день это лучший способ сохранить целостность данных, которая является более сложной, чем простое значение по умолчанию или ограничение. Они действительно должны быть написаны людьми, которые на самом деле знают, что они делают. Но тогда это верно для большинства вещей, которые влияют на дизайн и целостность базы данных.

1 голос
/ 04 декабря 2008

Использование триггера для обновления последнего измененного столбца - это путь. Почти каждая запись в системе на работе помечена меткой времени добавления и изменения, и это мне очень помогло. Реализация его как триггера позволит вам помечать его, когда есть какое-либо изменение, независимо от того, как оно было инициировано.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...