• 11042
  • 49
  • 5
Нравится блог?
Подписывайтесь!

Первичные ключи - что это такое и какие они должны быть

Привет всем. Этот пост касается скорей проектированю нежели админисрированию БД. А речь пойдет о Перивичных ключах.

Многие почему что не уделяют этому большого внимаение, хотя это является одной из состовляющих реляционных БД.

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

Так же хотел заметить что есть такое понятие как уникальный ключ(УК). Разлие м\у ПК и УК является то что УК может содержать пустые записи (null в занчениях), тем самым создавая псевдо дублирование, однако если эти поля поставить как не пустые (not null), то различие от ПК будет только в названии.

ПК бывают 2 видов естественные и суррогатные.

  • Естественные ключи это те поля которые несут информацию реального объетка, например номер удостоверения личности, паспорта, рнн и т.д.
  • Суррогатные ключи это те поля которые генерируются искусственно. И признаны заменить естественные ключи для случаев когда их просто нет, для оптимизации и по другим поводам.

Спорить о том какие ключи лучше естественные или суррогатные бессмысленно, так как у каждого есть свои достоинства и недостатки. А если подойти философски то м\у ними нет разницы, так как есстественные ключи тоже генерируются, взять тот же РНН, удост. личности. Да даже имя :), оно присваиватся вам при рождении.

Как определить какой ключ использовать?!Для этого есть несколько критериев отбора

  1. Размер ключа. Если есстесвенный ключ сликом большой. то можно его заменить суррогатным поменьше. Яркий пример когда ключ составной. Другой пример справочники. Однако у этого подхода и есть недостатки, ключи нужно сихронизировать. Большая проблема это обновление справочников.
  2. Изменение ключа. Если есстесвенный ключ часто меняется то придется каскадно менять все его значения в других таблицах, в данном случае нас спасет сурогатный ключ, менять придется только в одно месте.
  3. Ключ которого нет. Иногда требуется сгенерировать номер документа без самого документа, вот тут без суррогатныйх ключей не обойтись.
  4. Разлиные номера и коды обычно всегда являются есстественными.

Тип полей желательные для построения суррогатного ПК

  1. Char(1)
  2. Char(2) или SmallInt
  3. Char(3)
  4. Char(4) или Integer
  5. Char(5-7)
  6. Char(8) или BigInt

Елси же строка у вас переменной длинны то тогда используйте VarChar(), Старайтесь не использовать числа с плавающей точкой.

Почему именно так?! Потомучто чем менше по размеру ПК тем лучше. Если вы у вас намечатся новый справочник прикинте сколько примерно значений он может содержат если в приделах 30 то смело можно брать Char(1) и пронуберовать буквами от A-z, не больше 50000 то smallInt вполне хватит. Integer это самый "Попсовый ключ" для таблиц. BigInt практически вообще не нужен, Ни разу не видел таблицу больше 2 млд. записпей (половина емкости integer). Однако хочу заметить что это все в теории  на самом деле у разных БД есть свои ньюансы хранения данных. И разница в 2 байта практически не заметна. Однако если разница в РАЗЫ то стоит призадуматься. По моему мнению сурогатный ключ не должен быть больше 4 байт. Есстественный не болше 16 байт. Если у вас это не так значит что вы не так напроектировали.

 

 

 

 

 

 

 

Olzhas
4 мая 2009, 16:07
1328

Загрузка...

Комментарии

Werser
0
0
Мне кажется, сначала стоило бы рассказать о делении ПК на простые и составные, а потом уже о делении на естественные и суррогатные.
Rex
0
0
Хорошая тема, но если человек "придет со стороны" - то он может реально поплыть, вводной информации слишком мало.
Rex
0
0
Кстати, имело смысл указать примеры использования первичных ключей (связь таблиц, обращение к записи по ее ключю)
Olzhas
0
0
Да статься не для новичков. А вы что нибудь новое для себя подчеркнули?
о да,теперь узнал что праймэри кеи есть естественные и суррогатные. а то мой кругозор был ограничен простым и составным первичным ключом.
наверное нужно почитать Ливингстона "Проектирование баз данных"
Rex
0
0
Узнал про суррогатные. Думаю браться за литературу. Минут 15 курил википедию, с вашей подачи заинтересовался :)

Оставьте свой комментарий

Спасибо за открытие блога в Yvision.kz! Чтобы убедиться в отсутствии спама, все комментарии новых пользователей проходят премодерацию. Соблюдение правил нашей блог-платформы ускорит ваш переход в категорию надежных пользователей, не нуждающихся в премодерации. Обязательно прочтите наши правила по указанной ссылке: Правила

Также можно нажать Ctrl+Enter

Популярные посты

Мысли вслух. Почему казахи перестали общаться с родственниками и ходить в гости?

Мысли вслух. Почему казахи перестали общаться с родственниками и ходить в гости?

Дастархан в те времена был скромен. Не было понятия «сынау» - осуждения кто как живет, какой в доме ремонт и т.д. Пока взрослые обсуждали задержку заработной платы, мы играли в армию, жмурки, строили городки...
socium_kzo
5 дек. 2016 / 15:19
  • 21724
  • 27
Верховный Суд презентовал комментарий к Гражданскому процессуальному кодексу

Верховный Суд презентовал комментарий к Гражданскому процессуальному кодексу

ГПК содержит 505 статей, многие из которых написаны несколько сложным юридическим языком. Однако теперь понять их можно проще и без обращения к юристу.
RuSnake
6 дек. 2016 / 10:31
  • 10835
  • 0
Японец о Казахстане: «Ваши девушки уж сильно себе набивают цену...»

Японец о Казахстане: «Ваши девушки уж сильно себе набивают цену...»

"Мужчины должны у вас тут права качать, ибо их процент в вашей численности населения уступает проценту женщин". Я машинально начала уверять, что у нас в стране таковых не имеется...
Sapientia
5 дек. 2016 / 10:52
  • 10146
  • 71
Распил 1 млрд долларов или спасение для Алматы? В 2017-м начнётся строительство БАКАД

Распил 1 млрд долларов или спасение для Алматы? В 2017-м начнётся строительство БАКАД

Конечно, Алматы заслужил эту дорогу. Невзирая на все издержки, которые могут возникнуть. Заслужил и как крупнейший город Казахстана, и как субъект, формирующий своими налогами около четверти всех...
merurg
7 дек. 2016 / 12:35
  • 6924
  • 19
Известный европейский фотограф показал истинную красоту казашек

Известный европейский фотограф показал истинную красоту казашек

С 26 по 30 ноября в Алматы гостил известный европейский фотограф Ян Маклайн в рамках реализации совместного проекта с Казахстаном. Подробности не уточняются, однако ходят слухи о том, что этот...
Muchacho55
7 дек. 2016 / 18:29
  • 6803
  • 8
10 причин, по которым я не смогла работать учителем. Не только в зарплате дело, ребята

10 причин, по которым я не смогла работать учителем. Не только в зарплате дело, ребята

Я почти год проработала в школе, и когда уходила оттуда, была самым счастливым человеком в мире. Тот год, честно говоря, я и сейчас вспоминаю с ужасом.
demonica
6 дек. 2016 / 17:21
  • 5563
  • 78
На самом деле дела плохи: казахстанские школьники на 49-м, а не на 12-м месте по математике

На самом деле дела плохи: казахстанские школьники на 49-м, а не на 12-м месте по математике

О том, как масс-медиа раздула миф о казахстанских вундеркидов в розовый воздушный шар, пока его не проколола правда-иголка. Получается, что казахстанские дети не могут применить теорию в практике...
ardakzhurynov
7 дек. 2016 / 0:17
  • 4795
  • 35
Почему Дональд Трамп назвал Казахстан чудом. Президент подтягивается по географии

Почему Дональд Трамп назвал Казахстан чудом. Президент подтягивается по географии

Трамп и не подозревает, что 16 декабря 1991 Казахстан не создал, а восстановил свою национальную государственность. Иначе бы он упомянул не только 25 лет, а больше чем 550 лет казахской истории.
Stehlikova
2 дек. 2016 / 9:02
  • 5235
  • 88
Молчание врачей. Дети ЮКО, заражённые ВИЧ 10-11 лет назад, узнают о диагнозе-приговоре

Молчание врачей. Дети ЮКО, заражённые ВИЧ 10-11 лет назад, узнают о диагнозе-приговоре

Как сообщают новостные издания, в ближайшее время в Южном Казахстане 102 детям в возрасте 11-12 лет сообщат об их страшном диагнозе. Все эти дети были заражены ВИЧ, причём большинство было инфицировано по вине врачей.
openqazaqstan
2 дек. 2016 / 13:57
  • 4535
  • 4