2009-08-05 3 views
2

Учитывая таблицу:Когда вы когда-либо устанавливали значение приращения в поле идентификатора базы данных?

CREATE TABLE Table1 
(
    UniqueID int IDENTITY(1,1) 
    ...etc 
) 

Теперь почему бы вы когда-нибудь установить приращение на что-то другое, чем 1?

Я могу понять установку начального начального значения по-разному. Например, если, скажем, вы создаете одну таблицу базы данных в месяц данных (например, Table1_082009, Table1_092009) и хотите запустить UniqueID новой таблицы, в которой старая была остановлена. (Я, вероятно, не буду использовать эту стратегию сам, но, эй, я вижу, как люди это делают).

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

  • после того, как исходные данные вставлен, может быть, позже кто-то захочет, чтобы включить вставку тождественной и вставьте новые строки в промежутках, но и для эффективный поиск по индексу потребует, чтобы строки были близки друг к другу?
  • Если вы ищете идентификаторы, основанные непосредственно на URL-адресе, и хотите, чтобы людям было труднее произвольно обращаться к другим элементам (например, вместо того, чтобы пользователь мог решить, что изменение суффикса URL-адреса от /GetData?id=1000 до /GetData?id=1001, вы устанавливаете приращение 437, так что следующий URL-адрес на самом деле равен /GetData?id=1437)? Конечно, если это ваша «безопасность», то вы, вероятно, уже в беде ...

Я ничего не могу придумать. Кто-нибудь использовал прирост, который не был 1, и почему? Мне просто интересно.

+1

Я предполагаю, что это там, потому что, если бы оно не было доступно, кто-то спросил бы: «Почему я не могу установить свой приращение на 5»? :-) –

ответ

4

Одна идея может использовать это, чтобы облегчить partitionnement данных (хотя может быть более «автоматизированы» способы сделать это):

  • Учитывая у вас есть два сервера:
    • On необходимо начинать с одного и того же возраста, так что вы начинаете с 1 и увеличивать его на 2
    • На другом сервере вы начинаете с 2 и увеличиваетесь на 2.
  • Тогда из вашего приложения, ваши посыла половиной вставки на один сервер, а другая половина на второй сервер
    • своего рода программного обеспечения балансировки нагрузки

Таким образом, вы по-прежнему имеют возможность идентифицировать ваши записи: «UniqueID» по-прежнему уникален, даже если данные разделены на два сервера/таблицы.

Но это только дикая идея - есть, вероятно, некоторые другие виды использования, которые ...

+1

+1, это неплохая идея. Я собирался сказать, что, хотя я согласен, возможно, есть более автоматизированные способы сделать такие вещи, спецификатор IDENTITY, вероятно, был со времен мрачных старых стандартов SQL, когда у нас не было таких инструментов ... но Wikipedia сообщает мне, что столбцы идентичности были введены только в SQL: 2003. Идите фигуру. – Gavin

+0

Стандартизован в SQL 2003, конечно, но я думаю, что большинство СУБД имели их задолго до этого. Довольно уверен, что SQL Server поддерживает IDENTITY с пользовательскими приращениями в 7.0 (который был выпущен в 98 году, я думаю?), Вероятно, раньше. – Cowan

2

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

Я с трудом сидел в кресле.


редактировать (задним числом):
Вы думаете, что создатель ИДЕНТИЧНОСТИ был влюблен в FOR петлями? Вы знаете ..

for (i = 0; i<=99; i+=17) 

или для тех людей, не являющихся полу-ободочной кишки там

For i = 0 to 100 step 17 
+0

Вы просто взорвали мой разум. Я могу видеть использование для отрицательного приращения: идентификатор (1000000, -1) «таймер обратного отсчета», который, когда значение достигает 0, заставляет триггер обрезать таблицу. Практическая шутка за последний день работы. Вы могли бы сделать то же самое подсчет, конечно, но не так вкусно смотреть, как приближается ... – Gavin

+0

@Gavin Schultz: Вы - чистый злой помощник. Надеюсь, вы не сделаете этого на какой-либо значимой таблице. –

0

только для развлечения. И вы должны быть ДЕЙСТВИТЕЛЬНО скучно.