powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Первичный ключ из нескольких внешних
25 сообщений из 148, страница 4 из 6
Первичный ключ из нескольких внешних
    #34368367
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerИмхо, слово "потенциальный" вполне подчеркивает, что речь идет не о существующем ключе.Ну да. Только после его введения именно этот потенциальный и становится настоящим ключом, а существующий до этого перестает быть таковым, и становится суперключом. Мне казалось, что это очевидно. Именно поэтому 2 решения, которые Вы предложили рассмотреть, являются принципиально разными, а не различаются всего лишь добавлением еще одного ограничения в первом из упомянутых.
softwarerИМХО описанная денормализация - основной плюс миграции идентифицирующих атрибутов, и это практически единственный вариант, когда составной ключ может оказаться оправданным.Опять не понимаю. Денормализация появляется только при миграции неидентифицирующих атрибутов, т.е., когда связь происходит не по одному из возможных ключей, а по суперключу. Если же связь происходит именно по ключу, пусть даже составному, то никакой денормализации нет. И оправданность с теоретической точки зрения только одна, это естественно, т.е., не требует появления каких-либо избыточных атрибутов типа суррогатных ключей, происходит в рамках стандартной нормализации и не вызывает никаких дополнительных аномалий.
Некоторые же из практических плюсов и минусов использования суррогатных ключей, как альтернативы составных, Вы упоминали ранее, и по ним у нас нет разногласий.

Хотя я не сторонник бездумного использования суррогатных ключей. А то доходит до смешного. Делают связь "многие-ко-многим" через дополнительную таблицу и помимо добавленных ключей с каждой стороны в нее громоздят еще один суррогатный ключ. Спроси зачем, ответа не скажут или начинают нести откровенный бред. Одним из таких объяснений является непонятный миф, что таблица обязательно должна иметь суррогатный ключ. Трудно сказать истоки его появления, хотя я лично склонен считать, что из неверно понятого условия обязательности ключа в любой таблице. Впрочем, это уже зыбкая почва предположений и не вижу смысла в нее углубляться.
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34368389
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChA softwarerИмхо, слово "потенциальный" вполне подчеркивает, что речь идет не о существующем ключе.Ну да. Только после его введения именно этот потенциальный и становится настоящим ключом, а существующий до этого перестает быть таковым,
:)) Признаться, не припомню, чтобы в теории существовали такие понятия как "настоящий" и "ненастоящий" ключ.

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

ChAОдним из таких объяснений является непонятный миф, что таблица обязательно должна иметь суррогатный ключ. Трудно сказать истоки его появления
Я бы не назвал это мифом. Имхо это что-то типа принципа унификации; простое, автоматически выполняемое и не требующее размышлений правило, дающее при этом довольно близкий к идеалу результат. Кроме того, я бы предположил, что существенный вклад внесли всякого рода CASE-ы, фреймворки (не понимающие составных ключей), автогенерируемый код (опять же склонный быть реализованным "тупо и просто") итп.
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34368549
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerПризнаться, не припомню, чтобы в теории существовали такие понятия как "настоящий" и "ненастоящий" ключ.Такие понятия действительно отсутствуют, собственно, эти формулировки целиком на Вашей совести. Но условие неизбыточности потенциального ключа упоминается практически во всех изданиях по СУБД, считающихся классическими. По этой причине, по первому решению, комбинация (table#, table_column#) после добавления уникальности на table_column# выходит из категории потенциальных ключей и начинает относиться уже только к категории суперключей. Дейт даже делает специальную оговорку по поводу использования избыточного ключа в качестве внешнего, указывая, что такой подход явно ведет к денормализации, хотя это и так очевидно, чтобы быть поводом для оговорки. Максимальный суперключ, как крайний случай, включает в себя все атрибуты сущности на которой он построен, хотя не исключено, что он при этом останется потенциальным ключом. Впрочем, не вижу смысла мусолить одно и тоже, посему закрываю для себя эту нить обсуждения.

Кстати, был не совсем прав, по поводу определения суперключа. Есть немало разночтений этого термина вплоть до абсурдного - эквивалентности понятия "составной ключ" и "суперключ", но заслуживающими внимания, IMHO, можно считать понятия от апологетов или лиц, известных и авторитетных в определенных кругах. По их, в целом, общему мнению, под понятие суперключа подходит любой набор атрибутов, включающий в себя целиком хотя бы один потенциальный ключ. Из этого следует, что вырожденный случай, когда суперключ целиком равен потенциальному ключу также допустим. Впрочем, IMHO, это не принципиально в контексте обсуждаемой темы. В любом смысле, было полезно освежить свои знания.

softwarerЯ бы не назвал это мифом. Имхо это что-то типа принципа унификации; простое, автоматически выполняемое и не требующее размышлений правило, дающее при этом довольно близкий к идеалу результат.Понятие идеала - вещь сугубо субъективная и не может быть использовано в качестве объективного критерия. С моей точки зрения, использование суррогатного ключа только потому, что, например, лень указывать несколько условий вместо одного, или боязнь запутаться, или забыть все условия по составному ключу, выглядит несколько абсурдным. Я могу понять эти причины с практической точки зрения, но при этом надо отдавать себе отчет, что такое решение может сильно усложнить работу СУБД. В частности, когда могла бы происходить (а она будет обязательно) связка или были бы условия (а они будут обязательно) по конкретным атрибутам составного ключа, как естественной альтернативы суррогатному. В этом случае Engine будет вынужден выполнять двойную работу: слияние по суррогатному ключу и слияние или проверка условий по атрибутам, которым было отказано в миграции в связи с заменой их множества на суррогатный ключ, или наоборот, но в любом случае - оба действия. А если у нас будет "вложенность" на несколько уровней с заменой миграции на суррогатность на каждом из них ? Боюсь, что в таком случае "унификация" может оказаться чересчур дорогим удовольствием. Не говоря уж о том, что вместо N естественно мигрирующих атрибутов у нас появляется еще того же порядка суррогатных атрибутов в общей схеме. И в запросах могут появиться уже больше условий, чем если бы мы позволили миграцию составных ключей, так кроме условий на них мы вынуждены включать и условия на суррогатные. В связи с вышеупомянутым, лично для меня, замена составных ключей на суррогатные выглядит не столь привлекательно, чтобы хоть в какой-либо степени считать ее близкой к идеалу.
IMHO, единственное оправданное применение суррогатных ключей, заключается только в минимизации физических объемов при замене ими естественных ключей. Попутно же решается проблема с потенциальной изменчивостью естественного ключа, но это, скорее, дополнительный бонус, хотя и очень ценный, иногда только ради него происходит подобная замена.
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34368550
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По поводу разгоревшейся дискуссии (про паспорт и инн, нормализацию и заявление mcureenab "пилить") хочу напомнить еще одно золотое правило: не плодить сущности без нужды .
Если нашей системе не ставится задача отслеживать историю получения человеком паспортов, то не надо пилить ...
...А может, в нашей системе для идентификации человека номер паспорта вообще не нужен. Тогда и атрибут такой человеку не нужно заводить. ;-)
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34368553
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChA softwarer ChA softwarerИмхо, слово "потенциальный" вполне подчеркивает, что речь идет не о существующем ключе.Ну да. Только после его введения именно этот потенциальный и становится настоящим ключом, а существующий до этого перестает быть таковым,
:)) Признаться, не припомню, чтобы в теории существовали такие понятия как "настоящий" и "ненастоящий" ключ.Такие понятия действительно отсутствуют, собственно, эти формулировки целиком на Вашей совести.Прошу прощения, просмотрел, слово "настоящий" было действительно мною использовано, но, хотелось бы подчеркнуть, что не в качестве термина или понятия, а чтобы донести смысл, так как ряд используемых терминов ранее был признан неизвестным. Так что не вижу смысла в Вашей, несомненно остроумной, реплике.
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34368655
mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer ChAОдним из таких объяснений является непонятный миф, что таблица обязательно должна иметь суррогатный ключ. Трудно сказать истоки его появления
Я бы не назвал это мифом. Имхо это что-то типа принципа унификации; простое, автоматически выполняемое и не требующее размышлений правило, дающее при этом довольно близкий к идеалу результат.Будем помнить, что такое автоматически выполняемое и не требующее размышлений правило имеет и свой побочный отрицательный эффект. Многие с младых ногтей привыкают без раздумий сразу заводить для таблицы суррогатный ключ (ID..., Код...) и на этом успокаиваются и даже не пытаются искать наличие других потенциальных ключей. А ведь их обязательно надо объявить UNIQUE. Вот и плодятся базы, где внешне нормальная схема (все таблицы имеют ПК) на поверку оказывается г@вном. Я такого на примере своих студентов насмотрелся. Если его (студента) кто-то сразу научил, что каждой таблице надо заводить суррогатный ключ, -- пиши пропало. Этот горе-проектировщик больше о необходимости определять альтернативные ключи никогда не вспомнит.

Я к тому, что если какая-то методика проектирования "не требует размышлений" , то от этого может быть вреда не меньше, чем пользы. Размышления все же нужны.
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34368665
mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВАФЫВАВЫАЫФВА mirоказаться от попыток идентификации человека.

с определенной (ИМХО достаточной) степенью достоверности можно использовать алгоритм формирования АйДи персоны по сочетанию его ФамилииИмениОтчества - типа Soundex + дата рождения

чтобы обойти проблему Русский-Английский можно сначала транслитерировать (можно в бэкграунде - скрыто от пользователя) личные данные с Русского на Английский (алгоритм не то чтобы тривиален, но не сложен ИМХО) и только потом применить для кодирования классический Сандекс... этакий вот квази-суррогатный ключНикому не нужное и нерабочее решение. Если ФИО+Дата уникальны, никакой "АйДи" уже и не нужен. А если он нужен, то правильным решением будет создать суррогатный ключ-счетчик и GUID. Какой смысл заводить "АйДи" как функцию от других атрибутов? Они же могут меняться.
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34368669
mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В смысле суррогатный ключ -- счетчик или GUID
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34368713
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChAС моей точки зрения, использование суррогатного ключа только потому, что, например, лень указывать несколько условий вместо одного, или боязнь запутаться, или забыть все условия по составному ключу, выглядит несколько абсурдным. Я могу понять эти причины с практической точки зрения, но при этом надо отдавать себе отчет, что такое решение может сильно усложнить работу СУБД.
На моей практике, при прочих равных, усложняло работу с БД именно отсутствие суррогатного PK. Например, в текущем проекте он практически во всех таблицах есть. Это позволяет(позволило) идентифицировать запись в триггере на изменение при множественном изменении записей, написать единую настраиваемую универсальную функциональность протоколирования на триггерах, реализовать опять же такое же универсальное позаписное разграничение прав доступа, универсальные произвольные дополнительные атрибуты любой записи в БД и многое другое, что нельзя было бы сделать также просто, не будь везде суррогатного PK. В общем, если есть вероятность, что на таблице будет висеть хотя бы один триггер - суррогатный PK создаю без раздумий, альтернативные - как UNIQUE INDEX.
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34368778
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Васкецов... и многое другое, что нельзя было бы сделать также просто, не будь везде суррогатного PK
Собственно, как я и говорил: ".. Кроме того, я бы предположил, что существенный вклад внесли всякого рода CASE-ы, фреймворки (не понимающие составных ключей), автогенерируемый код (опять же склонный быть реализованным "тупо и просто") итп."
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34368780
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mirЯ к тому, что если какая-то методика проектирования "не требует размышлений" , то от этого может быть вреда не меньше, чем пользы. Размышления все же нужны.
Я с этим абсолютно согласен. Но хватает и сторонников противоположного подхода.
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34368895
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ВаскецовНа моей практике, при прочих равных, усложняло работу с БД именно отсутствие суррогатного PK...К тому, что сказал softwarer по этому поводу, мне, в целом, добавить нечего. Вы имеете полное право решать проблемы тем способом, который вас устраивает, я лишь подчеркнул минусы, проистекающие из тотального применения суррогатных ключей. Кстати, насколько я понял, то причины, побудившие Вас к активному использованию суррогатных ключей идут вне контекста обсуждаемой темы - отказа от миграции составного ключа в пользу миграции суррогатного.
В контексте решения некоторых частных проблем требующих упрощенной идентификации записей посредством введения суррогатных ключей не вижу смысла. Впрочем, не уверен, что нельзя было бы их решить на более раннем этапе проектирования с помощью традиционных подходов.
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34368906
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChA Сергей Васкецов...В контексте решения некоторых частных проблем требующих упрощенной идентификации записей посредством введения суррогатных ключей не вижу смысла...Прошу прощения, в результате правки смысл фразы сильно изменился. 37.5 0 C не очень хороший помошник :(
Правильно так:
Если решение некоторых частных проблем требует упрощенной идентификации записей посредством введения суррогатных ключей, то не нахожу в этом сильной беды.
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34369119
Yulka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ввиду того, что проблема чуть ли не повсеместная (длиннющих составной естественный ключ с потенциальной изменчивостью, сам из внешних, необходимость миграции неключевых дальше и т.д.), опять же давно бы решили на уровне СУБД. «Транзитных» и т.п. ключей бы навводили. Вопрос, хоть проверка уникальности PK и UNIQUE INDEX оптимизирована? Или тоже дважды проверяется?
Опять же, таблицы вообще без PK – это аномалия, это НЕ МНОЖЕСТВО, дубли только для целей оперирования могут быть. А значит, давно пора суррогатные ключи прошить в подкорку (тут я согласна с «CASE-средствами»), чтобы разработчики занимались только содержанием. И студентов с множествами учить работать, а не с ключами.
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34370285
mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YulkaВвиду того, что проблема чуть ли не повсеместная (длиннющих составной естественный ключ с потенциальной изменчивостью, сам из внешних, необходимость миграции неключевых дальше и т.д.), опять же давно бы решили на уровне СУБД.Да, в общем, и нет никакой проблемы. Тем более такой, чтобы решать на уровне СУБД. А что такое "миграции неключевых"?
Yulka«Транзитных» и т.п. ключей бы навводили.Это что за зверь такой?
YulkaВопрос, хоть проверка уникальности PK и UNIQUE INDEX оптимизирована? Или тоже дважды проверяется?Все нормальные РСУБД для PK автоматически создают UNIQUE INDEX, с помощью которого и проверяется уникальность. "Руками" делать ничего не надо.
YulkaОпять же, таблицы вообще без PK – это аномалия, это НЕ МНОЖЕСТВО, дубли только для целей оперирования могут быть.Это абсолютно верно. YulkaА значит, давно пора суррогатные ключи прошить в подкоркуЭто абсолютно неверно.
YulkaИ студентов с множествами учить работать, а не с ключами.Это что же за такое противопоставление: множества VS. ключи? Что бы это значило?
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34370562
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChAОдним из таких объяснений является непонятный миф, что таблица обязательно должна иметь суррогатный ключ. Трудно сказать истоки его появления
Все очень просто - это необходимо вытекает из определения понятия Таблица.
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34370594
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Yulka
СУБД работает с множествами - адресуемыми элементами данных. Адресное пространство - множество в силу своего устройства.
Все проблемы - во взаимодействии с внешним миром. Например, мы знаем, что люди образуют множество, но не имеем возможности эффективно его представить. Более того если однажды установлена связь человека и записи БД, то нет 100% надежного способа эту связь сохранить.
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34370600
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YulkaОпять же, таблицы вообще без PK – это аномалия, это НЕ МНОЖЕСТВО
1. Таблица вообще не множество
2. Пример: поток событий - могут отличаються только порядковым номером, т.е. номером строки таблицы.
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34370802
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мод ChAОдним из таких объяснений является непонятный миф, что таблица обязательно должна иметь суррогатный ключ. Трудно сказать истоки его появления
Все очень просто - это необходимо вытекает из определения понятия Таблица.Процитируйте, пожалуйста, это определение и не забудьте указать источник. Что-то мне подсказывает, что ни Кодд, ни Дейт, ни многие другие апологеты с ним незнакомы.
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34370893
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChAПроцитируйте, пожалуйста, это определение и не забудьте указать источник. Что-то мне подсказывает, что ни Кодд, ни Дейт, ни многие другие апологеты с ним незнакомы.[/quot]
Таблица - это массив строк, т.е. каждая строка имеет индекс (какие еще источники .
ps поменьше апологетов слушайте
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34370900
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
модТаблица - это массив строк, т.е. каждая строка имеет индекс (какие еще источники
Здравствуйте, Андрей Леонидович.
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34370901
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
модТаблица - это массив строк, т.е. каждая строка имеет индекс (какие еще источники .
ps поменьше апологетов слушайтеПросто какое-то нашествие практиков от сохи... :(
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34370916
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
модТаблица - это массив строк, т.е. каждая строка имеет индекс (какие еще источники
Это в принципе верно, если дополнительно требуется условие идентификации любой записи в таблице по подному полю (см. мои примеры выше), что приводит к замечательному следствию, что любая строка в любой таблице в БД идентифицируется по полному имени таблицы и идентификатору строки. Внутри сервера БД такая идентификация есть всегда, но она в большинстве случаев недоступна для разработчика и может меняться со временем.
В общем же случае безотносительно требования идентификации - это принципиальная ошибка в рассуждениях, в таблице вообще-то могут быть даже полностью идентичные записи с точки зрения select * from table.
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34370969
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Васкецовчто приводит к замечательному следствию, что любая строка в любой таблице в БД идентифицируется по полному имени таблицы и идентификатору строки.
Это не слишком замечательное следствие. Если требуется такое (как правило, для трехзвенок-ормов) то куда удобнее идентифицировать записи без имени таблицы, идентификатором, уникальным в пределах базы (попросту - запитать все таблицы от одного секвенсора).
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34371004
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нда, прямо на глазах от утверждения "нет ничего практичней хорошей теории" не остается ни камня на камне.
Сергей Васкецовчто любая строка в любой таблице в БД идентифицируется по полному имени таблицы и идентификатору строки. Внутри сервера БД такая идентификация есть всегда, но она в большинстве случаев недоступна для разработчика и может меняться со временем.Возможно не удивлю Вас, но такой идентификатор далеко не всегда представляет собой простое и однозначные число.
Сергей ВаскецовВ общем же случае безотносительно требования идентификации - это принципиальная ошибка в рассуждениях, в таблице вообще-то могут быть даже полностью идентичные записи с точки зрения select * from table.И Кодд может смело идти в сад, РМД здесь рядом не стояла. Действительно, если такое поведение позволяет себе то, что сейчас идет под названием РСУБД, то этого, оказывается, уже достаточно, чтобы считать теоретически обоснованным.
...
Рейтинг: 0 / 0
25 сообщений из 148, страница 4 из 6
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Первичный ключ из нескольких внешних
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]