Имя столбца SQL для указания изменения
-
03-07-2019 - |
Вопрос
Я даже не знал, как сформулировать заголовок.Но это моя проблема.Мы используем SqlCacheDependency для обновления объектов кэша.Но запрос, стоящий за этим, «сложный», и мы хотели бы его несколько упростить.
Нашей первой мыслью было добавить имя поля, например DateChanged, и использовать DateChanged для проверки того, действительно ли объект изменился, вместо загрузки всех столбцов таблицы.
SELECT DateChanged FROM Table1
вместо
SELECT Id, Title, DateChanged, Description FROM Table1
Но я надеялся, что кто-нибудь скажет мне, есть ли другие способы сделать это или существуют стандарты для именования столбца, указывающего на изменение.Как с этим справляются такие платформы, как «Entity framework» или «NHibernate»?
Другие советы
Вот столбцы, которые я использую для «проверяемых» объектов:
version: hibernate's optimistic concurrency control createdBy: FK to users modifiedBy: FK to users createdAt: timestamp modifiedAt: timestamp
Если вы используете SQL Server, имейте в виду, что столбец метки времени имеет несколько ошибочное название.Хотя его можно использовать для отслеживания изменений в столбце, его значение не имеет ничего общего с датой или временем.Его можно рассматривать как уникальный идентификатор в базе данных, не более того. http://msdn.microsoft.com/en-us/library/aa260631.aspx
Чтобы узнать, произошло ли изменение, вам нужны две временные метки, как в ответе Черувима.Один устанавливается при создании объекта, другой — при любом изменении, возможно, с помощью триггера обновления.Если они отличаются, значит, объект редактировался, но вы не можете точно сказать, когда.
На SQL Server вам придется использовать тот же шаблон, но со столбцами даты и времени.Затем вы можете рассчитать дату строки, вычитая дату создания из даты изменения.