2016-05-13 2 views
0

У меня есть буквенно-цифровые данные с максимальной длиной 20 символов. Я собираюсь хранить эти данные в столбце с типом NVARCHAR(20).Первичный ключ NVARCHAR или INT с ограничением UNIQUE

Эти данные являются КОДАМИ и должны быть уникальными, поэтому я решил сделать его основным столбцом ключа.

Но, спрашивая another question, кто-то «предложил» мне использовать столбец INT в качестве первичного ключа.

Что вы думаете? Первичный ключ INT и добавьте столбец с ограничением UNIQUE или моим текущим дизайном?

Я думаю, что добавляю новый столбец, который я не буду использовать, потому что мне нужен столбец NVARCHAR(20) для поиска и избежания дубликатов. Другими словами, 99% моего предложения where будет иметь эту колонку NVARCHAR.

ответ

1

Я сильный поклонник цифровых, синтетических первичных ключей. Что-то вроде того, что вы хотите, может быть объявлено unique и быть атрибутом ключа.

Вот несколько причин:

  • Цифровые клавиши занимают 4 или 8 байт и имеют фиксированную длину. Это более эффективно для построения индексов.
  • Цифровые клавиши часто короче строк. Это экономит место для ссылок на внешние ключи.
  • Синтетические ключи обычно вставляются с использованием автоинкрементных столбцов. Это даёт вам знать порядок вставки. Примечание. В некоторых приложениях знание порядка может быть недостатком, но это необычно.
  • Если значение уникальной строки изменяется, вам нужно изменить значение только в одном месте, а не в каждой таблице с ссылкой на внешний ключ. И, если вы не укажете ссылку на внешний ключ, целостность базы данных находится под угрозой.
  • Если строка идентифицирована несколькими ключами, то более эффективна одна цифровая клавиша.
  • Синтетический ключ может помочь в обеспечении безопасности.

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

+0

Я не знаю, какие преимущества У меня будет добавление первичного ключа INT здесь, если я не буду его использовать. Все мои действия будут работать с столбцом 'NVARCHAR (20)'. – VansFannel

+0

Привет, вы можете вставить в столбец INT значение хэша для ввода sring (в oracle вы можете использовать функцию ORA_HASH для этого - вставить в значения таблицы (ORA_HASH ('somt string))), когда вам нужно запросить на основе этого вы может делать что-то подобное », где myIntColumn = ORA_HASH (« INPUT STRING ») – elirevach

+0

@VansFannel ... Сохранение целого числа более эффективно, как для поиска индекса, так и для ссылок на внешние ключи. –

Смежные вопросы