Тип данных int
в SQL Server может содержать значения от -2 147 483 648 до 2 147 483 647.
Если вы заполнили свой столбец идентичностью -2,147,483,648, например, FooId identity(-2,147,483,648, 1)
тогда у вас есть более 4 миллиардов значений для игры.
Если вы действительно думаете, что этого все еще недостаточно, вы можете использовать bigint
, который может содержать значения от -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807, но это почти гарантировано излишним. Даже при больших объемах данных и / или большом количестве транзакций вы, вероятно, либо исчерпаете место на диске, либо исчерпаете время жизни своего приложения, прежде чем исчерпаете значения идентификаторов при использовании int
и почти наверняка при использовании bigint
.
Подводя итог, вы должны использовать столбец идентификаторов, и вам не следует беспокоиться о пробелах в значениях, поскольку а) у вас достаточно значений-кандидатов и б) это абстрактное число без логического значения.
Если вы собираетесь реализовать предлагаемое решение с помощью кода, получающего следующий столбец идентификаторов, вам придется учитывать параллелизм, поскольку вам придется синхронизировать доступ к текущему максимальному значению идентификатора между двумя конкурирующими транзакциями. В самом деле, вы можете в конечном итоге ввести значительное снижение производительности, поскольку вам придется сначала прочитать максимальное значение, вычислить и затем вставить (не говоря уже о дополнительной работе, связанной с синхронизацией параллельных транзакций). Однако, если вы используете столбец идентификаторов, параллелизм будет обрабатываться для вас механизмом базы данных.