Назначить уникальный идентификатор в группах записей - начать с 0 или 1 - PullRequest
0 голосов
/ 15 февраля 2010

Это, вероятно, субъективный вопрос, но я хотел бы узнать ваше мнение. Это как-то связано с этим вопросом , но мне бы хотелось, чтобы вы начали с баз данных с 0 или 1. Автоинкрементные идентификаторы в sqlserver начинаются с 1, поэтому мое субъективное мнение будет начинаться с 1. С другой стороны, в большинстве языков программирования индексы начинаются с 0.

Ответы [ 5 ]

5 голосов
/ 15 февраля 2010

Лично я бы начал любые идентификаторы в базе данных с 1, а не с 0. Затем я бы рассматривал 0 как недопустимое значение для идентификатора.

Причина этого в том, что когда вы работаете с объектами из базы данных в коде, обычно значение идентификатора сохраняется в поле целочисленного типа. В некоторых языках программирования (я говорю на C # и Java) значение по умолчанию для неинициализированных целочисленных полей равно 0, что означает, что если бы поле идентификатора не было установлено в коде, вы получили бы то же значение, что и строка база данных с идентификатором 0. Это приводит к неоднозначности и, возможно, трудно отследить ошибки.

2 голосов
/ 15 февраля 2010

Мы зарезервируем индекс 0 для неприменимого элемента и затем продолжим автоинкремент, таким образом, мы всегда можем присоединиться к таблице без левого соединения или нулевых значений. Например, в таблице брендов мы могли бы иметь:

  • 0: без марки / без машины
  • 1: Ford
  • 2: Тойота
  • и тд ....

и в таблице фактов инвентаризации у нас могут быть товары без клейма, и все же у нас есть идеальное соединение с таблицей брендов.

Thomas

1 голос
/ 15 февраля 2010

Суррогатный первичный ключ не должен опираться на какие-либо бизнес-процессы / логику в приложении. В этом случае допустимо любое действительное значение и последовательность PK.

началось с -1, только шансы, закончилось только 7 и т. Д. И т. Д.

это не имеет значения, просто потому что это искусственный ключ

1 голос
/ 15 февраля 2010

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

1 голос
/ 15 февраля 2010

С моей точки зрения, индексы в коде просто отличаются от индексов, используемых в базах данных, поэтому зачем вам в любом случае сравнивать эти два. Просто начни с того, что тебе нравится. В любом случае, у вас не возникнет проблем с использованием обоих способов.

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