Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Базарная площадь
  
О разделе

Основная страница

Группы обсуждений


Тематический каталог обсуждений

Архив

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  04:03[Войти] | [Зарегистрироваться]
Обсуждение темы:
Синтетические и естественные ключи.

Добрый день.

Может кто поможет мне определиться в том, какие ключи лучше использовать в качестве первичных - синтетические или естественные. Я прочитал несколько статей на эту тему, но не уверен, что пришел к определенным выводам. С одной стороны преимущество синтетического ключа кажется неоспоримым исходя из того постулата, что любой объект реального мира подвержен изменениям, иногда кардинальным. Очень многое из того, что кажется незыблемым, может меняться и довольно быстро. Трудно придумать действительно уникальный естественный ключ, например, возьмем таблицу рабочих предприятия. Что взять в качестве первичного ключа? Не буду говорить банальности о смене ФИО, пола, паспорта и т.п. Взять за основу псевдо естественное поле - табельный номер (ведь для того его и придумали)? А теперь представьте ситуацию - предприятие работает долго, имеет обширные архивы на CD-ROM, база эксплуатируется практически непрерывно (вполне реальные параметры для серьезных баз данных). Руководство отделов кадров решило, что теперь табельный номер должен быть не числовой, а текстовой и нести в себе некую доп. информацию (причем это с точки зрения программиста ситуация весьма нестандартная, а с точки зрения отдела кадров проста и менять свои взгляды на формат табельного номера оно может раз в неделю, кстати, на период становления нового стандарта так оно и будет). Что делать? Ну, в общем-то "что" понятно, но, боюсь, что будет плохо и базе и программисту.

С другой стороны в примере с тем же табельным номером абсолютно ясно, что он должен оставаться уникальным на протяжении всей жизни базы и появление искусственного ключа мало того, что нарушает правило нормализации, так еще и противоречит фундаментальному философскому принципу Оккама - "сущности не следует умножать без необходимости" ("Entities should not be multiplied unnecessarily", William of Ockham). Я уж не говорю, что в справочниках, как правило, тоже есть естественные натуральные ключи, а их значения вставляются практически во все таблицы. В таких случаях кажется неестественным организовывать сложнейшие соединения таблиц по 10-20. Кроме того, чем больше синтетических ключей в таблице, тем меньше она несет информации сама по себе и тем больше чувствительна к потерям и ошибкам в связанных таблицах.

Я постарался объяснить, почему ответ - "используй синтетические ключи там, где нельзя использовать естественные", не кажется мне разумным. Т.е. это тот случай, когда желательно все же не действовать по принципу "и ты прав и ты тоже прав".

Sergey

Количество сообщений на странице

Порядок сортировки сообщений
Новое сообщение вверху списка (сетевая хронология)
Первое сообщение вверху списка (обычная хронология)

Перейти на конкретную страницу по номеру


Всего в теме 290 сообщений

Добавить свое сообщение

Отслеживать это обсуждение
<<<... | 220—211 | 210—201 | 200—191 | ...>>>
Всего сообщений в теме: 290; страниц: 29; текущая страница: 9


№ 210   30-09-2009 06:01 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 209« (Geo)
___________________________
>>> каждой квартире нужно поставить в соответствие некоторое абстрактное уникальное число,
>>> и в запись для человека прописывать это самое число, а не номер квартиры.

Правильно.
И если появляется неучтённая квартира, то операции с ней можно делать
только после того, как ей будет присвоено "абстрактное уникальное число".


№ 209   30-09-2009 05:09 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 207« (Как слышно? Приём!)
___________________________
>>> Если же база данных должна общаться с внешним миром, то либо подавай естественные ключи с правилами их формирования, либо налаживай сервис присвоения искусственных ключей.
Вот и стала ясна причина спора ;-)

Давайте все же определимся, что именно мы понимаем под ключом. Вообще-то базданщики первичными и внешними ключами (primary key, foreign key) понимают способ реализации отношений на таблицах за счет механизмов СУБД. К пользовательскому интерфейсу это не имеет никакого отношения. Пусть у нас БД, учитывающая, в частности, квартиры многоквартирного дома, и людей, которые в этих квартирах живут. Имеется таблица людей (с их атрибутами) и таблица квартир (с их атрибутами). Для реализации отношения "Человек проживает в такой-то квартире" сторонники естественных ключей считают, что надо в записи для человека ввести поле, в котором прописывать номер квартиры. А сторонники искусственных ключей считают, что каждой квартире нужно поставить в соответствие некоторое абстрактное уникальное число, и в запись для человека прописывать это самое число, а не номер квартиры.

А что там будет отображаться в окошечках, когджа пользователь будет кнопки нажимать, это уже другой вопрос. Он тоже важен, но выходит за рамки данного спора.
 Geo


№ 208   30-09-2009 04:59 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 207« (Как слышно? Приём!)
___________________________
Если же база данных должна общаться с внешним миром, то либо подавай естественные ключи
с правилами их формирования
Это устоявшееся заблуждение. Результат: всякие там ОКОНХ, ОКПО, ИНН, и прочие числа зверя. По сути это пережитки тех времен, когда в каждом уездном городке изобретали свою систему учета. Достаточно было бы для всех объектов учета иметь только один идентификатор, тогда даже бумажные квитанции заполнять было бы гораздо проще. Тем более, что так или иначе для регистрации любого ларька требуется отправить данные в какие-то центральные БД, нет ни каких проблем получить значение нового идентификатора исключив вероятность повторения.
 Cep


№ 207   30-09-2009 04:06 Ответить на это сообщение Ответить на это сообщение с цитированием
Скажу по другому.
Если Вы хотите со своей БД вариться в собственном соку - то извольте пройти к искусственным ключам.
Это случай подавляющего большинства программных систем для внутреннего потребления.
Если же база данных должна общаться с внешним миром, то либо подавай естественные ключи
с правилами их формирования, либо налаживай сервис присвоения искусственных ключей.


№ 206   30-09-2009 04:01 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 205« (Geo)
___________________________
Вот Ваши слова
>>> искуссвтенные первичные ключи предназначены только для того, чтобы обеспечивать целостность данных внутри системы, не вылезая наружу.

Вот мои
>>> Но если БД эксплуатируется с выходом и входом в реальную жизнь, например, на бумажные носители,
>>> то некий сервис обработки и поддержания естественных ключей неизбежен.

Не видно корреляции?


№ 205   30-09-2009 03:14 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 201« (Как слышно? Приём!)
___________________________
>>> Как тебе песенка 38652004?
>>> Не-а, мне больше 79223133 по душе :)
...
>>> Тут придумывают ИНН с процедурами регистрации - сервис поддержки суррогатных ключей
У меня складывается впечатление, что Вы не совсем себе понимаете, что такое искусственные ключи и зачем они нужны. Но сначала (как водится) аналогия

-- А как мне в Вашей программе ввести ФИО пользователя?
-- Откройте форму TForm1 ;-)

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

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


№ 204   30-09-2009 02:46 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 202« (Cepгей Poщин)
___________________________
>>> Речь о случаях когда например по табельному номеру выстраиваются связи главный подчиненный.

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


№ 203   30-09-2009 02:41 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 202« (Cepгей Poщин)
___________________________
>>> по табельному номеру выстраиваются связи главный подчиненный
Не люблю быть ни главным, ни подчинённым.
Поэтому я табельные номера и не перевариваю :)

>>> Да, не люблю [философию].
Вот в этом углу философия, а в том - эклектика и софистика.


№ 202   30-09-2009 01:47 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 201« (Как слышно? Приём!)
___________________________
Как тебе песенка 38652004? По моему это несколько не то. Речь о случаях когда например по табельному номеру выстраиваются связи главный подчиненный.
Не любите Вы философию :) Да, не люблю. Потомучто под любую ситуацию можно найти соответствующее изречение и в результате тот, кто лучше владеет искусством софистики и эклектики, оказывается прав, только какое это имеет отношение к практической целесообразности.
 Cep


№ 201   30-09-2009 00:08 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 200« (Geo)
___________________________
>>> в голову никому не придет использовать естественные ключи

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

Представляю, скажем, обсуждение музыкальных записей.
Как тебе песенка 38652004?
Не-а, мне больше 79223133 по душе :)

>>> Для создания идентификаторов все пользуются стандартными средствами безо всякой философии.

Не любите Вы философию :)
А, по моему, при росте скорострельности техники на четыре-пять порядков
использовать прежние подходы неестественно по философским основаниям.


<<<... | 220—211 | 210—201 | 200—191 | ...>>>
Всего сообщений в теме: 290; страниц: 29; текущая страница: 9


Добавить свое сообщение

Отслеживать это обсуждение

Дополнительная навигация:
Количество сообщений на странице

Порядок сортировки сообщений
Новое сообщение вверху списка (сетевая хронология)
Первое сообщение вверху списка (обычная хронология)

Перейти на конкретную страницу по номеру
  
Время на сайте: GMT минус 5 часов

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

Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

 
© При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
Все используемые на сайте торговые марки являются собственностью их производителей.

Яндекс цитирования