Подтвердить что ты не робот

Почему дизайнеры баз данных не делают столбцы IDENTITY начинать с значения min, а не 1?

Как известно, на сервере Sql IDENTITY (n,m) означает, что значения начинаются с n, а значение приращения m, но я заметил, что все дизайнеры баз данных делают столбцы Identity как IDENTITY(1,1), без использования всех значений типа данных int из (-2,147,483,648) to (2,147,483,647),

Я планирую сделать все столбцы Identity как IDENTITY (-2,147,483,648, 1) (столбцы идентификации скрыты от пользователя приложения).

Это хорошая идея?

4b9b3361

Ответ 1

Если вы обнаружите, что 2 миллиарда значений недостаточно, вы обнаружите, что 4 миллиарда тоже недостаточно (требуется больше, чем в два раза больше, чем в течение всего жизненного цикла проекта, чем он был впервые разработан для, вряд ли редок *), поэтому вам нужно совсем другой подход (возможно, длинные значения, возможно, что-то совершенно другое).

В противном случае вы просто странны и нечитаемы, чтобы получить прибыль.

Кроме того, у кого нет базы данных, где они знают, что, например, Пункт 312 - это тот, который обладает некоторыми хорошими характеристиками для тестирования конкретных вещей? Я знаю, что у меня в голове вспыхнуты какие-то иски. Они могут назвать это "так хорошо, что они назвали его дважды", но я всегда буду знать, что Нью-Йорк является "городом 657, охватывает большинство наших тестовых случаев". Это только сокращение, но -2147482991 было бы не так удобно.

* Чтобы добавить немного к этому. С некоторыми вещами вы можете сказать "ах около 100" и найти на самом деле 110, хорошо. С другими вы обнаружите, что на самом деле это 100 000 - вы были на порядок. Чем выше число, тем чаще ошибка возникает из-за проблем, которые заканчиваются оценкой в ​​миллиардах, отличающихся от оценок, которые в конечном итоге получаются с ответами в десятках. Если вы оцениваете 200, это ваш максимум в данном случае, вы, вероятно, должны оставить место, возможно, еще на несколько сотен. Если вы оцениваете 2 миллиарда в данном случае, вы, вероятно, должны оставить место для нескольких квадриллионов больше. Тем не менее, единственный раз, когда я увидел, что кто-то действительно запустил идентификатор на минус 2 миллиарда, у них оказалось около 3000 строк.

Ответ 2

На стороне SQL Server отрицательные идентификаторы одобрены, обрабатываются как положительные числа, поэтому вы можете это сделать.

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

Скажем, возьмите MS Enviroment. Вот пример: .NET DataSet использует отрицательный идентификатор -s для автоинкрементных идентификаторов для отслеживания изменений кода. Так что у вас могут быть проблемы, потому что:

Отрицательные клавиши используются для временных экземпляров для строк.

Вот ссылка: MSDN

Так что определенно неплохо было бы создать такую ​​базу данных для MSSQL в среде MS Enviroment.

Ответ 3

Если у вас есть класс, который представляет вашу таблицу в вашем коде (что, скорее всего, произойдет), каждый раз, когда вы создадите новый объект, ему будет присвоен ID 0 по умолчанию. Это может привести к ошибкам, которые перезаписывают данные в базе данных, если идентификатор 0 уже назначен. Это также позволяет легко определить, является ли объект новым или если он пришел из базы данных, просто выполнив if (myObject.ID != 0)

Ответ 4

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

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

Таким образом, это одна из причин, по которой я очень рад, чтобы семена мои личности в 1 и не на -2147483231, и вместо этого, как и, как предлагает @Jon, перейти к a BIGINT в любое время, когда мне может понадобиться больше 2 миллиардов строк в моей таблице.

Ответ 5

Когда вы переходите от отрицательных чисел к положительным ids, вы пересечете ноль. Это означает (если вы фактически вставляете пару миллиардов строк), что в конечном итоге вы получите идентификатор нулевой. Это не является внутренне плохим, но может представлять потенциальный краевой пример для инструментов ORM или просто небрежный код приложения, который имеет трудности с дифференциацией между нулем и нулем.

Ответ 6

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

Отрицательные идентификаторы также могут быть полезны для целей администратора в однострочных таблицах только для чтения (т.е. нет транзакций, а исполняемый SQL-код не выполняется в таблице).

Помимо этих конкретных целей, значения идентичности <= 0 будут генерировать больше тепла, чем свет.