Использование идентификаторов, определенных дизайнером, по сравнению с автоматическими идентификаторами - PullRequest
0 голосов
/ 20 марта 2012

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

Рассмотрим следующее: получим большую таблицу с ID # из 10 или около того цифр. Это, конечно, будет первичным ключом. Из того, что я понимаю, это плохая практика хранить ключ как целое число, если вы не планируете делать с ним математику (пожалуйста, исправьте меня, если я здесь не прав). Лучше всего хранить ключ как nvarchar (n), где n - длина строки ключа? Как насчет создания ваших собственных первичных ключей (скажем, инкрементного ключа)? Размер ключа будет меньше, но достаточно ли это важно, чтобы отвлечь внимание от того факта, что вы можете импортировать данные непосредственно в базу данных, для которой уже определены отношения? (Импорт таблицы с внешним ключом из другой таблицы. Как код состояния).

1 Ответ

2 голосов
/ 20 марта 2012

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

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

Если у вас есть гарантированное уникальное значение (неизменяемое), вы можете использовать естественный ключ вместо суррогата.Это может замедлить некоторые соединения, но это также может означать, что вам не нужно делать столько объединений.Однако, если вы используете естественный ключ, убедитесь, что он действительно уникален и что он будет меняться очень редко.Такие вещи, как имя человека, название компании, адрес электронной почты и т. Д., Не являются хорошими кандидатами на противовесный ключ, автомобильный VIN-номер.Помните, что вы не хотите изменять десять миллионов дочерних записей, потому что название компании изменилось.

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