Разница между первичным ключом и идентификатором объекта - PullRequest
0 голосов
/ 19 апреля 2019

Меня немного смущает первичный ключ и идентификатор в таблице базы данных.

Я хочу идентифицировать строки в моей таблице на основе некоторого логического идентификатора, такого как pay_xyz123, pay_xyz124, order_xyz и т. Д. Если я использую этот формат как pk, который является строкой, это повлияет на производительность.

Или я должен использовать числа с автоинкрементом в качестве pk и идентификаторы как pay_xyz123 в качестве уникального ключа. Какой будет лучший подход

Редактировать: логические идентификаторы могут быть длинной строкой, скажем, 15 символов

Ответы [ 2 ]

0 голосов
/ 19 апреля 2019

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

Недостатком, на мой взгляд, использования логического ключа для внешних ключей является то, чтоесли логический ключ изменяется, вам необходимо обновить все внешние ключи.

0 голосов
/ 19 апреля 2019

В общем, я предпочитаю иметь синтетические идентификаторы (например, автоинкремент / серийный номер / столбец идентификаторов) для таких таблиц.Это имеет некоторые преимущества:

  • Вы можете легко обновить идентификатор объекта, поскольку он является атрибутом и не используется для ссылок на внешние ключи.
  • Целые числа (немного) более эффективны для индексациицели.
  • Синтетический идентификатор скрывает информацию об именах сущностей в таблицах, которые ссылаются на ключ.

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

Конечно, есть небольшие накладные расходы на хранение автоинкрементного ключа.Это увеличивает размер базовой таблицы.Обычно имена строк длиннее (как в вашем примере), поэтому это более чем компенсируется уменьшением длины в строках, которые ссылаются на сущность.

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