|
|
|
Суррогатный ключ. Оставить?
|
|||
|---|---|---|---|
|
#18+
Прочитал несколько статей о применении суррогатных ключей. В основном в них мысль сводится к тому, что не надо их использовать где попало и где имеются поля которые могут служить естественным ключом. После прочтения задумался, а какие поля, в приведенном ниже на картинке фрагменте схемы данных, могут быть естественным ключом? По логике должны быть те, что выделил красным цветом. Это серии и номера оружия, служебного удостоверения и разрешения на оружие. У автомобиля-гос.номер. И вопрос:как считаете, могут ли эти поля однозначно выступать в роли уникального ключа или нет? Ведь тип данных в таких ключах будет строка, а не число. Или может оставить как есть и суррогат никому и не чему не мешает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2012, 08:12 |
|
||
|
Суррогатный ключ. Оставить?
|
|||
|---|---|---|---|
|
#18+
orehov_i, оставляйте суррогатные ключи + делайте ограничения (unique, check, etc) на естественные ключи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2012, 08:21 |
|
||
|
Суррогатный ключ. Оставить?
|
|||
|---|---|---|---|
|
#18+
orehov_iПрочитал несколько статей о применении суррогатных ключей. В основном в них мысль сводится к тому, что не надо их использовать где попало и где имеются поля которые могут служить естественным ключом. Это очень правильные, наверное, статьи, и мысли в них очень верные. Но скорее всего в них не упоминается один печальный факт: естественных ключей в природе не существует. orehov_i После прочтения задумался, а какие поля, в приведенном ниже на картинке фрагменте схемы данных, могут быть естественным ключом? Ни один из. Номер удостоверения дублируется, номера оружия перебиваются, номера разрешения подделываются. Но данные об этом ты видимо должен хранить. orehov_i По логике должны быть те, что выделил красным цветом. Это серии и номера оружия, служебного удостоверения и разрешения на оружие. У автомобиля-гос.номер. И вопрос:как считаете, могут ли эти поля однозначно выступать в роли уникального ключа или нет? Однозначно -- НЕТ. Это всё т.н. псевдоуникальные поля, псевдоключи. Все думают, что они уникальны, но они НЕ уникальны. Как думаешь, ИНН и номер соцстрахования уникальны ? (это домашнее задание) orehov_iВедь тип данных в таких ключах будет строка, а не число. Или может оставить как есть и суррогат никому и не чему не мешает? Это как раз не имеет значение, какой тип данных. НУЖНО оставить ключи сурогатными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2012, 10:04 |
|
||
|
Суррогатный ключ. Оставить?
|
|||
|---|---|---|---|
|
#18+
MasterZiv orehov_i По логике должны быть те, что выделил красным цветом. Это серии и номера оружия, служебного удостоверения и разрешения на оружие. У автомобиля-гос.номер. И вопрос:как считаете, могут ли эти поля однозначно выступать в роли уникального ключа или нет? Однозначно -- НЕТ. Это всё т.н. псевдоуникальные поля, псевдоключи. Все думают, что они уникальны, но они НЕ уникальны. Как думаешь, ИНН и номер соцстрахования уникальны ? (это домашнее задание) Это как раз не имеет значение, какой тип данных. НУЖНО оставить ключи сурогатными. Я понимаю, что в нашей стране ничего вечного не бывает :( Спасибо за совет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2012, 11:22 |
|
||
|
Суррогатный ключ. Оставить?
|
|||
|---|---|---|---|
|
#18+
orehov_iПрочитал несколько статей о применении суррогатных ключей. В основном в них мысль сводится к тому, что не надо их использовать где попало и где имеются поля которые могут служить естественным ключом. В печь! (с) проф. Преображенский. Либо это какие-то неправильные пчелы статьи, либо неправильный мед. Суррогатные ключи надо использовать, в приведенном примере, везде. А на "естественные ключи" попробовать наложить те же ограничения, как если бы Вы хотели видеть их первичными: обязательность и уникальность. И посмотреть, что будет. orehov_iУ автомобиля-гос.номер. Хакер! Укради номер - завали информационную систему! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2012, 11:23 |
|
||
|
Суррогатный ключ. Оставить?
|
|||
|---|---|---|---|
|
#18+
Cane Cat Fisherorehov_iПрочитал несколько статей о применении суррогатных ключей. В основном в них мысль сводится к тому, что не надо их использовать где попало и где имеются поля которые могут служить естественным ключом. В печь! (с) проф. Преображенский. Либо это какие-то неправильные пчелы статьи, либо неправильный мед. http://baks.gaz.ru/oradoc/ora/ora368.htm http://habrahabr.ru/post/107834/ orehov_iУ автомобиля-гос.номер. Хакер! Укради номер - завали информационную систему![/quot] Да, про то что кто-то может свинтить номера с автомобиля я как-то и не подумал. Но это только если бросать авто где попало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2012, 11:45 |
|
||
|
Суррогатный ключ. Оставить?
|
|||
|---|---|---|---|
|
#18+
orehov_iмысль сводится к тому, что не надо их использовать где попало и где имеются поля которые могут служить естественным ключом В реальности всё почти-что наоборот (я так понимаю, речь про Первичный Ключ?). Потому что никогда нельзя гарантировать идеальность мира, в котором и с которым приходится работать. Уважаемый товарищ MasterZiv привёл примеры для этого конкретного случая. Я добавлю, что в принципе ни одна "умная" (эти - либо перечитать, либо сжечь!) книжка не научит, как создавать структуру БД, стойкую к небольшим вероятным модификациям исходной задачи. Чтобы было понятнее - формат номера авто часто меняется, для прицепов другой, для мотоциклов третий, для иностранцев четвёртый, и.т.п. Никто вообще не гарантирует, что это одно поле. Так вот чтобы не поставить БД раком и без проблем отработать всевозможные ситуации, даже ещё до которых никто не додумался в мире и правительстве, ПК должен быть только суррогатным. Это без проблем позволит реализовать любую возможную логику и проверки, хоть в хранимках, хоть в триггерах, хоть уникальность по каждому формату, хоть проверку на корректность формата номера исходя из даты постановки на учёт, хоть ещё что угодно. Максимум что потребуется - добавить поле, увеличить размер существующего поля, создать ил изменить индекс - на выбор совершенно плёвые операции по сравнению с изнасилованием ПК и всей таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2012, 11:47 |
|
||
|
Суррогатный ключ. Оставить?
|
|||
|---|---|---|---|
|
#18+
Сергей ВаскецовПотому что никогда нельзя гарантировать идеальность мира, в котором и с которым приходится работать. Это Вы в точку. Спасибо за мнение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2012, 11:55 |
|
||
|
Суррогатный ключ. Оставить?
|
|||
|---|---|---|---|
|
#18+
orehov_i http://baks.gaz.ru/oradoc/ora/ora368.htm http://habrahabr.ru/post/107834/ Просмотрел. Первая - обсуждает не совсем наш вопрос, а частный случай. Она не про "Естественный против суррогатного", а "составной против суррогатного". И то автор склоняется скорее к суррогатному ключу, оставляя за естественной "тройкой" право на существование "только если на нее никто не ссылается". Впрочем, за его витиеватой многословной дипломатией это понять трудновато. Вторая - в печь. Джоша Беркус, CEO компании PostgreSQL Experts Inc.Однако иногда разработчики говорят о том, что ключи [первичные] для записи меняться не должны и должны оставаться одинаковыми на всей протяженности жизненного цикла записи. Имейте ввиду, что это утверждение яйца выеденного не стоит и уж, разумеется, полностью отсутствует в реляционной теории. У Гулливера выеденное яйцо было достойным поводом многолетней войны. Реляционная теория - это, в сущности, алгебра отношений, и в ней много что отсутствует. Например, она не описывает жизненного цикла БД. Она не знает, что такое архивные данные, сброшенные на ленту или CD, или сидящие за 1000 км в оффлайне. К ним она тоже захочет применить ON UPDATE CASCADE первичного ключа? Полностью изничтожать взгляды Джоша не стану, поскольку это неоднократно делалось на форуме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2012, 12:55 |
|
||
|
Суррогатный ключ. Оставить?
|
|||
|---|---|---|---|
|
#18+
Ну что ж, мнение высказавшихся однозначно. Всем спасибо за советы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2012, 08:00 |
|
||
|
Суррогатный ключ. Оставить?
|
|||
|---|---|---|---|
|
#18+
Я сам жертва решения с естественным ключом :-) , поэтому советую различать бизнез-ключ и первичный. История в кратце: когда регистриривал свой первый автомобиль, гаишник не знал где та Peugeot наити ВИН, и вбил в базу какой то левый номер. Поменять никак ( поскольку первичный ключ, в базе не предусмотрно ), а каждое общение с гаишниками приходилось доказывать что я не бандит на с...ной тачке... Так что никогда не используйте данные вводимые человеком в качестве первичного ключа. Кто то обязательно ошибется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2012, 11:25 |
|
||
|
Суррогатный ключ. Оставить?
|
|||
|---|---|---|---|
|
#18+
Cane Cat Fisher<> Вторая - в печь. Джоша Беркус, CEO компании PostgreSQL Experts Inc.Однако иногда разработчики говорят о том, что ключи [первичные] для записи меняться не должны и должны оставаться одинаковыми на всей протяженности жизненного цикла записи. Имейте ввиду, что это утверждение яйца выеденного не стоит и уж, разумеется, полностью отсутствует в реляционной теории. <> если подумать, то попытка всегда протаскивать "естественный ключ" в базу - это попытка изначально "денормализовывать" (не денормализовывая) её с тем, чтобы не приходилось потом строить мат-вью по кросс-наборам-полей таблиц и т.п. (и иметь составные индексы по реальным реквизитам предметной области "из разных таблиц", а не по смеси суррогатов и реквизитов) И on update cascade - тут очень даже приемлемая плата (в противном - для той же производительности поиска - надо поддерживать обновляемые мат-вью, с той же проблемой массового апдейта). т.е. в случае, если рисуем базу один раз, а потом пользуемся по гроб жизни, не натыкаясь на ограниченность ключей - оно наверное неплохое. вот только обычно на ограниченность естественного ключевания наталкиваешься раньше, чем на проблемы с размером/производительностью базы. Если конечно это не дубовое хранилище неизменных сущностей, а живая система. откуда мораль - джоша видимо проектант больших (очень больших) неизменных хранилищ. причем "большое" тут главное, а гибкость - не важна (изменится набор требований - джоша за отдельную, гораздо большую денюжку, перепишет старую систему - и все в шоколаде - переписать тут проще, чем обеспечить ту же производительность лишними сущностями типа мат-вью по кросс-наборам-реквизитов связки таблиц) для заведомо же не очень больших но навороченных логикой БД - использовать суррогаты гораздо более правильно, чем сомнительные кандидаты в естественные ключи, в которые почти наверняка упрёшься, а вот в производительность - почти наверняка нет. так что и в печь рановато, но и принимать на веру всегда - лишнее. думаецца ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2012, 12:39 |
|
||
|
Суррогатный ключ. Оставить?
|
|||
|---|---|---|---|
|
#18+
думаеццаоткуда мораль - джоша видимо проектант больших (очень больших) неизменных хранилищ. причем "большое" тут главное, а гибкость - не важна (изменится набор требований - джоша за отдельную, гораздо большую денюжку, перепишет старую систему - и все в шоколаде - переписать тут проще, чем обеспечить ту же производительность лишними сущностями типа мат-вью по кросс-наборам-реквизитов связки таблиц) Хорошо. Сделаем предположение (весьма правдоподобное), что Джоша проектирует большое хранилище данных о физ.лицах. Тогда можно как-то понять его высказывание, что ключевые атрибуты записей, скорее всего, будут меняться: люди выходят замуж, отказываются от ИНН по религиозным соображениям, меняют паспорта и т.д. Но это же говорит о разумности суррогатного ключа? Короче, дядька что-то имел в виду, но что - непонятно. Без него этот разговор не имеет смысла. Может кто-то его сюда позвать? Пусть бы пояснил. Или где он тусуется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2012, 13:09 |
|
||
|
Суррогатный ключ. Оставить?
|
|||
|---|---|---|---|
|
#18+
Cane Cat FisherКороче, дядька что-то имел в виду, но что - непонятно. Да понятно что. Естественные ключи - это основа теории нормализации. Поскольку практическая ценность этой теории =0, то и т.н. "естественные ключи" справедлиыо заменяются суррогатными ID. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2012, 14:06 |
|
||
|
Суррогатный ключ. Оставить?
|
|||
|---|---|---|---|
|
#18+
Cane Cat Fisherдумаеццаоткуда мораль - джоша видимо проектант больших (очень больших) неизменных хранилищ. причем "большое" тут главное, а гибкость - не важна (изменится набор требований - джоша за отдельную, гораздо большую денюжку, перепишет старую систему - и все в шоколаде - переписать тут проще, чем обеспечить ту же производительность лишними сущностями типа мат-вью по кросс-наборам-реквизитов связки таблиц) Хорошо. Сделаем предположение (весьма правдоподобное), что Джоша проектирует большое хранилище данных о физ.лицах. Тогда можно как-то понять его высказывание, что ключевые атрибуты записей, скорее всего, будут меняться: люди выходят замуж, отказываются от ИНН по религиозным соображениям, меняют паспорта и т.д. Но это же говорит о разумности суррогатного ключа? Короче, дядька что-то имел в виду, но что - непонятно. Без него этот разговор не имеет смысла. Может кто-то его сюда позвать? Пусть бы пояснил. Или где он тусуется?нет, не говорит. предположим ,что в большинстве выборок (не из мн-ва физ-лиц, а из мн-ва, куда входит первичный ключ физ-лица в качестве ФК или ссылки) участвует "битой строкой" естественный ключ физ-лица, и скажем в устойчивая комбинация этого естественного ключа с каким-то реквизитом этой подчиненной таблицы . Тогда для быстрого поиска при суррогатном ключе нам придется поддерживать еще и мат-вью с вхождением естественного ключа физ-лица, ключа [не важно суррогата или естественного] починенной таблицы, и указанного реквизита подчиненной таблицы, входящего в связанные поиски. В лучшем случае, если позволяет СУБД , это будет Index-Organized Table - т.е. искомый кросс-табличный индекс. И обновление его будет практически столь же медленным , как и обновление ON UPDATE CASCADE при естественном ключе в таблице физлиц (обновить придется столько же строк нашего IOT - мат-вью). Но в случае с мат-вью нам надо поддерживать ещё одну лишнюю сущность (и лишние JOIN-ы с ними). А при естественном ключе - не надо - там всё проще. хотя, если иметь в виду версионник, и длина записи матвью много меньше длины записи исходной подчиненной таблицы - non-updateble (ON UPDATE RESTRICT) суррогат несомненно выигрывает по размеру новой версии записи - т.е. дисковой операции. и с необходимостью поддержания лишних мат-вью вероятно можно примириться. -- как видим, соображения не имеют никакого отношения к реляционной алгебре, но к реализации быстрого поиска, индексов[, денормализации - опционально] и т.п. "низким" материям ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2012, 14:09 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37965494&tid=1541540]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
150ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 224ms |
| total: | 456ms |

| 0 / 0 |
