Автоинкрементная версия для внешнего ключа SQL Server - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть таблица сущности с именем Entity, например:

Entity
---------------------------
id (uniqueidentifier)
name (varchar(32))
description (varchar(max))

И я хочу добавить таблицу record book или log для хранения всех версий Entity с именем EntityLog

EntityLog
-------------------------
version ???
entityId (uniqueidentifier) fk Entity
name (varchar(32))
description (varchar(max))

Столбец версии EntityLog является просто эскизом, им можно манипулировать, поскольку он еще не существует.

Как автоматически назначить версиюна основе внешнего ключа EntityId, чтобы вставки автоматически обновляли версию с 1, до 2 и т. д. для EntityId нет для таблицы?

Как можно скорее избегать условий гонки, контекствключает в себя многопоточное приложение

Редактировать

Попытка решить:

  1. Читать максимальную версию select max(version) from entityLog where entityId = myId
  2. Вставитьв EntityLog с этим ранее прочитанным числом + 1 или просто 1, если его ноль

Между 1 и 2 могут быть условия гонки, поэтому я надеялся делегировать SQL Server поточно-ориентированный способвставить вот так

1 Ответ

0 голосов
/ 21 сентября 2018

Вы можете использовать обычный столбец идентификаторов в EntityLog и когда вы хотите показать порядок номеров версий по указанному столбцу и использовать функцию ROWNUMBER () в качестве версии.

...