| | | | |
Синтетические и естественные ключи. |
Добрый день.
Может кто поможет мне определиться в том, какие ключи лучше
использовать в качестве первичных - синтетические или
естественные. Я прочитал несколько статей на эту тему, но не
уверен, что пришел к определенным выводам. С одной стороны
преимущество синтетического ключа кажется неоспоримым исходя из
того постулата, что любой объект реального мира подвержен
изменениям, иногда кардинальным. Очень многое из того, что
кажется незыблемым, может меняться и довольно быстро. Трудно
придумать действительно уникальный естественный ключ, например,
возьмем таблицу рабочих предприятия. Что взять в качестве
первичного ключа? Не буду говорить банальности о смене ФИО,
пола, паспорта и т.п. Взять за основу псевдо естественное поле
- табельный номер (ведь для того его и придумали)? А теперь
представьте ситуацию - предприятие работает долго, имеет
обширные архивы на CD-ROM, база эксплуатируется практически
непрерывно (вполне реальные параметры для серьезных баз данных).
Руководство отделов кадров решило, что теперь табельный номер
должен быть не числовой, а текстовой и нести в себе некую доп.
информацию (причем это с точки зрения программиста ситуация
весьма нестандартная, а с точки зрения отдела кадров проста и
менять свои взгляды на формат табельного номера оно может раз в
неделю, кстати, на период становления нового стандарта так оно и
будет). Что делать? Ну, в общем-то "что" понятно, но, боюсь, что
будет плохо и базе и программисту.
С другой стороны в примере с тем же табельным номером абсолютно
ясно, что он должен оставаться уникальным на протяжении всей
жизни базы и появление искусственного ключа мало того, что
нарушает правило нормализации, так еще и противоречит
фундаментальному философскому принципу Оккама - "сущности не
следует умножать без необходимости" ("Entities should not be
multiplied unnecessarily", William of Ockham). Я уж не говорю,
что в справочниках, как правило, тоже есть естественные
натуральные ключи, а их значения вставляются практически во все
таблицы. В таких случаях кажется неестественным организовывать
сложнейшие соединения таблиц по 10-20. Кроме того, чем больше
синтетических ключей в таблице, тем меньше она несет информации
сама по себе и тем больше чувствительна к потерям и ошибкам в
связанных таблицах.
Я постарался объяснить, почему ответ - "используй синтетические
ключи там, где нельзя использовать естественные", не кажется мне
разумным. Т.е. это тот случай, когда желательно все же не
действовать по принципу "и ты прав и ты тоже прав". Sergey
Всего в теме 290 сообщений
Добавить свое сообщение
Отслеживать это обсуждение 290—281 | 280—271 | ...>>> Всего сообщений в теме: 290; страниц: 29; текущая страница: 1
№ 290 05-10-2009 14:50 | |
Ответ на »сообщение 289« (Как слышно? Приём!)
___________________________
Мой бедный, бедный монитор, пал первой жертвой вашего увлекательного схаластического спора, телевизор еще терпит :(
№ 289 05-10-2009 12:32 | |
Ответ на »сообщение 287« (Geo)
___________________________
>>> У меня это один и тот же человек под ЕК <Эдгар Франк «Тед» Кодд>
>>> ... Точно так же, как если бы ... БАШМАК
Обращаю внимание почтенных членов клуба, что это не я запустил с криком БАШМАКом
в уважаемого основоположника реляционных баз данных :)
Стиль Мунтазира аль-Зайди пробил дорогу в массы :)
№ 288 05-10-2009 11:09 | |
Ответ на »сообщение 286« (Как слышно? Приём!)
___________________________
Сказано громко, только неверно.
"Графом называется такая пара множеств G={R,V}, где V есть подмножество любого счётного множества, а R — подмножество V?V."
Заметим, что подмножество декартова произведения двух или более множеств и есть, по определению, отношение.
В реляционном исчислении V не обязано быть счетным, могут существовать другие базовые множества, кроме V и отношения могут иметь более чем над парой множеств.
Возвращаясь к теории графов это должно означать, что и вершины и дуги могут относится к различным типам и иметь индивидуальные характеристики.
Что касается транзитивных замыканий, то они действительно не могут быть получены с помощью операций реляционной алгебры. Но из этого никак не следует, что этого невозможно сделать для реляционной модели данных.
В конце концов, при программировании задач теории графов мы пользуемся именно реляционным представлением данных. Только простейшие задачи работают на матрице связей, в подавляющем большинстве случаев мы имеем дело именно со списком пар - отношением.
№ 287 05-10-2009 09:10 | |
Ответ на »сообщение 284« (Как слышно? Приём!)
___________________________
>>> У меня это один и тот же человек под ЕК <Эдгар Франк «Тед» Кодд>
Поэтому Вы и прокалываетесь. Точно так же, как если бы попытались надеть на ногу железнодорожный БАШМАК, протому что у Вас естественный ключ по наименованию, и Вы считаете его обувью :D
№ 286 05-10-2009 08:51 | |
Ответ на »сообщение 281« (Сергей Перовский)
___________________________
>>> теория графов, позволяющая описывать, как иерархические, так и сетевые структуры, является ЧАСТНЫМ СЛУЧАЕМ реляционного исчисления.
"И не надо кричать!
Я и в первый раз прекрасно слышал!"
(С) Кролик.
Сказано громко, только неверно.
№ 285 05-10-2009 08:48 | |
Ответ на »сообщение 282« (Сергей Перовский)
___________________________
>>> Реляционная алгебра - строгая математическая дисциплина.
Которая украшает и поддерживает моду на РСУБД.
Но как уже говорилось, математика с программированием
живут в общежитии в соседних комнатах, но это далеко не одно и то же.
№ 284 05-10-2009 08:45 | |
Ответ на »сообщение 282« (Сергей Перовский)
___________________________
>>> Давайте не путать Кодда-математика с Коддом-теоретиком СУБД.
В Вашей БД это две разные записи под разными синтетическими ключами? :)
У меня это один и тот же человек под ЕК <Эдгар Франк «Тед» Кодд>
№ 283 05-10-2009 08:42 | |
Оставив, пока, за скобками вопрос отношения абстрактной (и реально неприменимой) теории и практики заметим, что
примером невыразимых запросов в реляционной алгебре является простая агрегация
и исчисление транзитивных замыканий, заданных по их бинарным краевым отношениям.
Реляционная модель, даже теоретически, относится к логике первого порядка,
она принципиально не способна выразить ряд типов логических запросов -
запросов включающих транзитивные замыкания.
С сетевыми графами иначе.
№ 282 05-10-2009 08:35 | |
Ответ на »сообщение 280« (Как слышно? Приём!)
___________________________
Так что реальные БД замараны грязными руками недоучек
по сравнению с сияющими вершинами математических принципов :)
Давайте не путать Кодда-математика с Коддом-теоретиком СУБД.
Реляционная алгебра - строгая математическая дисциплина.
12 (13, а в последних версиях около 300) правил Кодда - всего лишь его личное мнение о программной реализации. Тут есть место для споров.
Не даром мы регулярно спорим о "запрещенном" GOTO.
Следовать ли советам профессионала - личное дело каждого. Важно, что поступая по своему, необходимо сознавать, откуда правило взялось и к каким последствиям может привести его нарушение.
№ 281 05-10-2009 08:18 | |
Ответ на »сообщение 279« (Как слышно? Приём!)
___________________________
И что?
Еще раз, медленно: теория графов, позволяющая описывать, как иерархические, так и сетевые структуры, является ЧАСТНЫМ СЛУЧАЕМ реляционного исчисления.
Противопоставлять реляционные модели сетевым бессмысленно. Все равно, что противопоставлять алгебру и арифметику.
290—281 | 280—271 | ...>>> Всего сообщений в теме: 290; страниц: 29; текущая страница: 1
Добавить свое сообщение
Отслеживать это обсуждение
Дополнительная навигация: |
|
|