powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Первичный ключ из нескольких внешних
25 сообщений из 148, страница 3 из 6
Первичный ключ из нескольких внешних
    #34366985
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerБыть может я неправ, но по моим ощущениям, термин "денормализация" сейчас означает нечто большее, нежели "нарушение нормальных форм", которые, при всей их полезности, избавляют не от всех возможных некорректностей.Какой смысл вносить нечто большее, если сам термин "денормализация" уже говорит о своем происхождении ?
softwarerСкажем, давайте рассмотрим таблицы из моего примера:

Код: plaintext
1.
2.
3.
create table "tables" ( table#, ...) ;
create table "table_columns" ( table_column#, table#, ...) ;
create table "reports" ( report#, table#, ...) ;
create table "report_columns" ( report#, table#, table_column#, ...) ;

Что касается table#, с ним все понятно - самый обычный автоинкрементный ключ. Интерес представляют колонки report# и table_column#. У нас есть выбор:

1. Сделать их уникальными (то есть потенциальными ключами), опять же обычный автоинкремент.
2. Сделать их уникальными в пределах #table, но не гарантируя уникальность вообще.

Полагаю, очевидно, что первое решение "гарантированно не хуже" второго. Гарантированно - в том плане, что это "второе плюс дополнительное требование", а следовательно, любая аномалия, допускаемая первым, допускается и во втором итп. Короче говоря, множество недостатков первого подхода содержится во множестве недостатков второго подхода. Мало того, легко назвать, чем первых подход лучше, то есть включение строгое, множества не равны. Однако! Однако, второй подход строго соблюдает нормальные формы, в то время как первый - нарушает.В меру моего понимания данного примера.
Гарантировано хуже. Сначала о поле table_column# . По первому способу оно становится независимым от table# и, соответственно, поле table# исключается из состава ключа (хотя и может входить в состав суперключа, но это пока неважно в данном случае). Таким образом может возникнуть нарушение целостности данных, т.е., в таблице report_columns может нарушиться соответствие между значениями полями table_column# и table# .
Если же сделать по второму способу, то такая ситуация возникнуть уже не может, именно благодаря составному ключу.
Аналогично в случае поля report# . Если Вы его объявляете независимым и ключом, то в таблице report_columns может возникнуть казус, подобный вышеупомянутому, несоответствие значений полей report# и table# .
Причиной всего этого безобразия стало наличие неявных зависимостей между полями, включенными в таблицу report_columns . Так что если мы хотим воспользоваться уникальностью(суррогатностью) полей table_column# и report# без появления аномалий, то придется приложить некоторые усилия и, в первую очередь, исключить из нее поле table# . Впрочем, это только полумера, IMHO, стоило бы начать проектирование сначала.
softwarerПо этой причине мне кажется правильным рассматривать фактическую ситуацию, не переоценивая формальные критерии соответствия.Ваше безусловное право, но в покер я бы с Вами играть не сел.
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34367061
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4321 mcureenabТогда мы будем идентифицировать БУМАЖКУ, и ВЕРИТЬ в то, что её не переклеят на другой объект.физика считает объекты идентифицируемыми, если они без сторонней помощи или наблюдаемых манипуляций не обмениваются (к примеру) бумажками. Для идентифицируемости в этом смысле требуется не вера, а принципиальная возможность проследить.


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

softwarerСкажем, давайте рассмотрим таблицы из моего примера:

Код: plaintext
1.
2.
3.
create table "tables" ( table#, ...) ;
create table "table_columns" ( table_column#, table#, ...) ;
create table "reports" ( report#, table#, ...) ;
create table "report_columns" ( report#, table#, table_column#, ...) ;

[quot ChA]Гарантировано хуже. Сначала о поле table_column# . По первому способу оно становится независимым от table# и, соответственно, поле table# исключается из состава ключа (хотя и может входить в состав суперключа, но это пока неважно в данном случае).
Я не понимаю, что такое "ключ и суперключ" в Вашем примере.

"Соответственно" - неверно. Никто ниоткуда это поле исключать не будет. В иллюстрации названы именно те колонки, которые будут объявлены первичным ключом соответствующей таблицы. Разница в том, что в первом случае объявляется еще одно, дополнительное ограничение -

Код: plaintext
alter table "table_columns" add constraint table_columns_ak unique ( table_column# )

ChAТаким образом может возникнуть нарушение целостности данных, ..... Если же сделать по второму способу, то такая ситуация возникнуть уже не может, именно благодаря составному ключу.
Надеюсь, я показал, что Ваши рассуждения исходят из неверной предпосылки (вообще, судя по "благодаря составному ключу", Вы полагаете, что я сравниваю простые ключи с составными, чего нет).

ChAТак что если мы хотим воспользоваться уникальностью(суррогатностью) полей table_column# и report# без появления аномалий, то придется приложить некоторые усилия и, в первую очередь, исключить из нее поле table# .
Если мы исключим поле table# , мы как раз добавим аномалию. Можно будет создать отчет, опирающийся на таблицу А, а в колонках этого отчета ссылаться на колонки, принадлежащие таблице Б.

ChAВпрочем, это только полумера, IMHO, стоило бы начать проектирование сначала.
Имхо Вы просто совершенно не поняли приведенный пример и начали рассуждать, исходя из совершенно ложных предпосылок о тех объектах, DDL которых я опустил (оговорив его смысл словесно).

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

Ok. Ошибку осознал. Действительно, дублирование данных не всегда есть проблема.
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34367419
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ModelRИдентифицировать объект (человека) по базе данных - значит среди записей базы найти наиболее подходящую или решить, что такой не существует.
А если так: найти объект с заданным ID (и никаких тебе "подходящих").
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34367440
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мод ModelRИдентифицировать объект (человека) по базе данных - значит среди записей базы найти наиболее подходящую или решить, что такой не существует.
А если так: найти объект с заданным ID (и никаких тебе "подходящих").

А где у человека ID?
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34367495
кхе-кхе
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mcureenab мод ModelRИдентифицировать объект (человека) по базе данных - значит среди записей базы найти наиболее подходящую или решить, что такой не существует.
А если так: найти объект с заданным ID (и никаких тебе "подходящих").

А где у человека ID?



например когда АйДи задается по какому либо алгоритму учитывающему, например,

имя-фамилию (soundex as var) или
по сетчатке глаза или
по отпечаткам пальцев...

хотя... наверное нет - ведь можно и без глаз остаться или без пальцев... вот расшифруют ДНК и создадут единую базу тогда, пожалуй что...

пока еще нет у человека ID и, пожалуй, только это внушает оптимизимь
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34367515
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabА где у человека ID?
На бумажке напечатали, когда его регистрировали
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34367520
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
модА если так: найти объект с заданным ID (и никаких тебе "подходящих").Иначе говоря, взять объект, лежащий там, где мы его и положили. Коль УЖЕ знаем где, так что ж не взять.
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34367524
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кхе-кхепока еще нет у человека ID и, пожалуй, только это внушает оптимизимь

В лагерях эту проблему решали клеймлением. Каждому ЗК лагерный номер наносили на тело. Такой подход оптимизим внушает?
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34367541
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мод mcureenabА где у человека ID?
На бумажке напечатали, когда его регистрировали

Я себя ощупал. Никакой бумажки не нашёл.
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34367544
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ModelRИначе говоря, взять объект, лежащий там, где мы его и положили. Коль УЖЕ знаем где, так что ж не взять.
Ну да, использовать внутренний ИД для внешней идентификации (часто применяется).
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34367546
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
модНа бумажке напечатали, когда его регистрировали Верим - берем, не верим- опять давай паспорт, ой что-то вы тут на себя не похожие...
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34367555
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ModelRВерим - берем, не верим- опять давай паспорт, ой что-то вы тут на себя не похожие...
То что это вопрос доверия - конечно согласен
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34367574
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabЯ себя ощупал. Никакой бумажки не нашёл. Шо, вообще ни одной??? А-а, понял. Только по улице так не ходите.
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34367627
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ModelR mcureenabЯ себя ощупал. Никакой бумажки не нашёл. Шо, вообще ни одной??? А-а, понял. Только по улице так не ходите.

Да уж куда там... Холодно ведь!
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34367680
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer ChAКакой смысл вносить нечто большее, если сам термин "денормализация" уже говорит о своем происхождении ?
Полагаю, смысл в том, чтобы избежать мучительного поиска общепонятного термина со смыслом "денормализация и еще некоторые фокусы с очень похожими результатами".Некоторая вольность в обращении с терминами не способствует взаимопониманию.
softwarerВы полагаете, что я сравниваю простые ключи с составными, чего нет.
Да, именно так и предполагал, так как исходил из фразы softwarerСделать их уникальными (то есть потенциальными ключами)Мне показалось естественным, что таким образом подразумевается противопоставление ключа ( table_column# ) ключу ( table# , table_column# ) при связке таблиц table_columns и report_columns . А иначе какой смысл в таком решении, т.е., дополнительной уникальности поля table_column# ? Фактически, мы таким образом превратили комбинацию ( table# , table_column# ) в суперключ, т.е., ключ, множество атрибутов которого превышает минимально необходимое. В этом случае, мы действительно можем смело употребить термин "денормализация", так как поле table# становится лишним атрибутом для формирования ключа, и становится обычным, не идентифицирующим сущность атрибутом. Соответственно, при связке с таблицей report_columns по, теперь уже, суперключу ( table# , table_column# ) и миграции в оную поля table# оно приведет к той самой денормализации. Но таким путем можно связаться и по суперключу, включающему в себя все атрибуты мастер-таблицы. Собственно это и будет денормализация в чистом виде, но совсем не потому, что составной ключ softwarerПреимущества такого ключа - в денормализации. и денормализация - это близнецы-братья. А ровно потому, что сам суперключ ведет к денормализации, так как он включает в себя атрибуты, не нужные для однозначной идентификации сущности. И то что он составной, роли не играет, другим он в принципе быть и не может.
softwarerЕсли мы исключим поле table# , мы как раз добавим аномалию. Можно будет создать отчет, опирающийся на таблицу А, а в колонках этого отчета ссылаться на колонки, принадлежащие таблице Б.Разумеется, именно об этом я и говорил, подразумевая, что ключом является только поле table_column# . Если же связка идет по ( table# , table_column# ), то исключить поле table# не представляется возможным в принципе, так как оно является частью внешнего ключа для таблицы report_columns . Собственно, здесь и так все тривиально, чтобы обсуждать.
softwarerИмхо Вы просто совершенно не поняли приведенный пример и начали рассуждать, исходя из совершенно ложных предпосылок о тех объектах, DDL которых я опустил (оговорив его смысл словесно).В нашем с Вами общении это не редкость. А по сути, лучше было 2 строки на DDL, чем пару абзацев пояснений, особенно учитывая некоторую вольность в использовании терминов.
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34367753
кхе-кхе
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mcureenab кхе-кхепока еще нет у человека ID и, пожалуй, только это внушает оптимизимь

В лагерях эту проблему решали клеймлением. Каждому ЗК лагерный номер наносили на тело. Такой подход оптимизим внушает?

как раз такой и не внушает...

перечтите внимательнее - собственно это я и и мел в виду
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34367854
mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Клёво, ребятушки. Единственно, предлагаю вообще оказаться от попыток идентификации человека, ибо сие, как (по-моему) известно, решения не имеет. Впрочем, примерно об этом уже хорошо сказал guest_20040621.
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34368035
mirоказаться от попыток идентификации человека.

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

чтобы обойти проблему Русский-Английский можно сначала транслитерировать (можно в бэкграунде - скрыто от пользователя) личные данные с Русского на Английский (алгоритм не то чтобы тривиален, но не сложен ИМХО) и только потом применить для кодирования классический Сандекс... этакий вот квази-суррогатный ключ
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34368061
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mirКлёво, ребятушки. Единственно, предлагаю вообще оказаться от попыток идентификации человека, ибо сие, как (по-моему) известно, решения не имеет. Впрочем, примерно об этом уже хорошо сказал guest_20040621.

Отсутствие точного решения не означает, что приближённое решение непригодно для использования в практических задачах.
Если это действительно нужно, нет проблем завести таблицу "Чел" с суррогатным ID и всякими атрибутами, типа фотографии, отпечатков пальцев, фактов из биографии, образцом подписи и т.п. свойств принадлежащих непосредственно человеку. Реальный чел может знать свой ID в нашей системе, может не знать, намеренно скрывать или сообщать ложные сведения. Тогда поиск ID придётся выполнять косвенными методами. Например по базе паспортов, свидетельств о постановке на налоговый учёт, фотографиям, отпечаткам пальцев, биографическим сведениям и т.п. Для надёжности можно использовать сразу несколько методов.
Не исключено, что один и тот же чел будет зарегистрирован в БД с разными ID. Но тут уж надо блительность проявлять. Регулярно проводить аналитические проверки с целью выявления таких фактов и актуализации сведений.
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34368088
йо-хо-хо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mcureenabРегулярно проводить аналитические проверки с целью

Штатники например остро озаботились этой проблемой после 9.11.

раньше иностранцу можно было въезжать в ЮСА под новыми именами чуть не каждый раз - как документы на визу подал

Куренков - Kurenkov
Куренков - Kurenkoff
Куренков - Kourenkov

и т.д. (и это еще не самая сложная фамилия) теперь бьются над едиными правилами записи - анализируют, проверяют

а наши выдают визы транслитерируя с латиницы по единой нотации (французской)

(оригинально/пишеццо -- записывается в визе -- читаеццо/произносиццо)

Caufield -- Куафиелд -- Кофилд
Darwazeh -- Дарвазех -- Дарваже
Kustrimovic -- Кустримовик -- Кустримович
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34368262
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChAДа, именно так и предполагал, так как исходил из фразы softwarerСделать их уникальными (то есть потенциальными ключами)Мне показалось естественным, что таким образом подразумевается противопоставление ключа ( table_column# ) ключу ( table# , table_column# )
Хм. Имхо, слово "потенциальный" вполне подчеркивает, что речь идет не о существующем ключе. Мне кажется, не имеет смысла обсуждать поотдельности каждую фразу "что как следовало понимать", поэтому позволю себе ответить "по основной теме и в целом".

1. Где подразумевалась денормализация, мы выяснили и вроде как расхождений не имеем.

2. ИМХО описанная денормализация - основной плюс миграции идентифицирующих атрибутов, и это практически единственный вариант, когда составной ключ может оказаться оправданным. Второй вариант - таблица, на которую никто никогда не будет ссылаться, и как следствие, для нее незачем специально вводить простой.

3. "Пару строк DDL" я бы конечно написал. Проблема в том, что их требовалось штук пятнадцать, и приведенные мной четыре основных среди них потерялись бы. Я полагал, что выделив суть, обеспечу лучшее восприятие читателями. Возможно, ошибался.
...
Рейтинг: 0 / 0
Первичный ключ из нескольких внешних
    #34368286
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mirКлёво, ребятушки. Единственно, предлагаю вообще оказаться от попыток идентификации человека, ибо сие, как (по-моему) известно, решения не имеет. Впрочем, примерно об этом уже хорошо сказал guest_20040621.

Причем тут человек. Свойства любого объекта формируются субъектом по своему усмотрению. Если не принудить, то у же при количестве субъектов >= 2 объект имет шанс остаться неидентифицируемым. Потому нужен принудительный идентификатор. В лоб каждому, каленым железом, в три слоя. GUID + PDF417. :)
...
Рейтинг: 0 / 0
25 сообщений из 148, страница 3 из 6
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Первичный ключ из нескольких внешних
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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