|
|
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
softwarerБыть может я неправ, но по моим ощущениям, термин "денормализация" сейчас означает нечто большее, нежели "нарушение нормальных форм", которые, при всей их полезности, избавляют не от всех возможных некорректностей.Какой смысл вносить нечто большее, если сам термин "денормализация" уже говорит о своем происхождении ? softwarerСкажем, давайте рассмотрим таблицы из моего примера: Код: plaintext 1. 2. 3. Что касается 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По этой причине мне кажется правильным рассматривать фактическую ситуацию, не переоценивая формальные критерии соответствия.Ваше безусловное право, но в покер я бы с Вами играть не сел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 14:50 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
4321 mcureenabТогда мы будем идентифицировать БУМАЖКУ, и ВЕРИТЬ в то, что её не переклеят на другой объект.физика считает объекты идентифицируемыми, если они без сторонней помощи или наблюдаемых манипуляций не обмениваются (к примеру) бумажками. Для идентифицируемости в этом смысле требуется не вера, а принципиальная возможность проследить. Принципиальная возможность проследить, это идеализация. В этом смысле человек идентифицируем, но на практике мы не можем проследить за каждым из миллиардов людей, тем более сделать это достоверно. Остаётся только доверять и по возможности проверять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 15:03 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
мод Сахават ЮсифовА можно ли вообще чего то идетифицировать по его свойствам? Можно, но не нужно. Идентифицировать объект надо сразу при его создании и навсегда, независимо от его свойств и истории их изменения.Путаница. Идентифицировать объект (человека) по базе данных - значит среди записей базы найти наиболее подходящую или решить, что такой не существует. При этом сравниваются данные базы и внешние данные о свойствах объекта. А то что память (программный объект) однозначно определяется адресом - и найденный адрес можно использовать для ссылок - это ж нечто другое. Мы "верим" этому адресу лишь потому, что он защищен от внешних помех, и будучи однажды вычислен, может использоваться чисто внутри системы (суррогат) или передан и во вне (искусственный ключ). Отсюда ясно, что все поступающие нам естественные ключи - это чьи-то искусственные. Так что авторНе... это не серьезно уже. Тогда верить в принципе нельзя никому и ничему. не так уж не серьезно. Истинно вопрос в доверии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 15:03 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
ChAКакой смысл вносить нечто большее, если сам термин "денормализация" уже говорит о своем происхождении ? Полагаю, смысл в том, чтобы избежать мучительного поиска общепонятного термина со смыслом "денормализация и еще некоторые фокусы с очень похожими результатами". softwarerСкажем, давайте рассмотрим таблицы из моего примера: Код: plaintext 1. 2. 3. [quot ChA]Гарантировано хуже. Сначала о поле table_column# . По первому способу оно становится независимым от table# и, соответственно, поле table# исключается из состава ключа (хотя и может входить в состав суперключа, но это пока неважно в данном случае). Я не понимаю, что такое "ключ и суперключ" в Вашем примере. "Соответственно" - неверно. Никто ниоткуда это поле исключать не будет. В иллюстрации названы именно те колонки, которые будут объявлены первичным ключом соответствующей таблицы. Разница в том, что в первом случае объявляется еще одно, дополнительное ограничение - Код: plaintext ChAТаким образом может возникнуть нарушение целостности данных, ..... Если же сделать по второму способу, то такая ситуация возникнуть уже не может, именно благодаря составному ключу. Надеюсь, я показал, что Ваши рассуждения исходят из неверной предпосылки (вообще, судя по "благодаря составному ключу", Вы полагаете, что я сравниваю простые ключи с составными, чего нет). ChAТак что если мы хотим воспользоваться уникальностью(суррогатностью) полей table_column# и report# без появления аномалий, то придется приложить некоторые усилия и, в первую очередь, исключить из нее поле table# . Если мы исключим поле table# , мы как раз добавим аномалию. Можно будет создать отчет, опирающийся на таблицу А, а в колонках этого отчета ссылаться на колонки, принадлежащие таблице Б. ChAВпрочем, это только полумера, IMHO, стоило бы начать проектирование сначала. Имхо Вы просто совершенно не поняли приведенный пример и начали рассуждать, исходя из совершенно ложных предпосылок о тех объектах, DDL которых я опустил (оговорив его смысл словесно). ChAВаше безусловное право, но в покер я бы с Вами играть не сел. Хм. Не знаю, при чем тут покер, но мне скучно в него играть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 15:11 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
ChA mcureenabНарушается принцип один факт - одна запись.Очень вольная интерпретация нормализации, IMHO. .... mcureenabВ итоге мы получаем аномалию обновления.В классическом смысле, насколько мне известно, аномалия обновления возникает в том случае, когда в таблице есть неключевые атрибуты, зависящие друг от друга. Поэтому, обновив лишь один из этих атрибутов, мы можем получить несогласованную информацию. И каскадные обновления не имеют к этому никакого отношения. Ok. Ошибку осознал. Действительно, дублирование данных не всегда есть проблема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 15:23 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
ModelRИдентифицировать объект (человека) по базе данных - значит среди записей базы найти наиболее подходящую или решить, что такой не существует. А если так: найти объект с заданным ID (и никаких тебе "подходящих"). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 16:16 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
мод ModelRИдентифицировать объект (человека) по базе данных - значит среди записей базы найти наиболее подходящую или решить, что такой не существует. А если так: найти объект с заданным ID (и никаких тебе "подходящих"). А где у человека ID? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 16:22 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
mcureenab мод ModelRИдентифицировать объект (человека) по базе данных - значит среди записей базы найти наиболее подходящую или решить, что такой не существует. А если так: найти объект с заданным ID (и никаких тебе "подходящих"). А где у человека ID? например когда АйДи задается по какому либо алгоритму учитывающему, например, имя-фамилию (soundex as var) или по сетчатке глаза или по отпечаткам пальцев... хотя... наверное нет - ведь можно и без глаз остаться или без пальцев... вот расшифруют ДНК и создадут единую базу тогда, пожалуй что... пока еще нет у человека ID и, пожалуй, только это внушает оптимизимь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 16:31 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
mcureenabА где у человека ID? На бумажке напечатали, когда его регистрировали ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 16:35 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
модА если так: найти объект с заданным ID (и никаких тебе "подходящих").Иначе говоря, взять объект, лежащий там, где мы его и положили. Коль УЖЕ знаем где, так что ж не взять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 16:35 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
кхе-кхепока еще нет у человека ID и, пожалуй, только это внушает оптимизимь В лагерях эту проблему решали клеймлением. Каждому ЗК лагерный номер наносили на тело. Такой подход оптимизим внушает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 16:37 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
мод mcureenabА где у человека ID? На бумажке напечатали, когда его регистрировали Я себя ощупал. Никакой бумажки не нашёл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 16:39 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
ModelRИначе говоря, взять объект, лежащий там, где мы его и положили. Коль УЖЕ знаем где, так что ж не взять. Ну да, использовать внутренний ИД для внешней идентификации (часто применяется). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 16:39 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
модНа бумажке напечатали, когда его регистрировали Верим - берем, не верим- опять давай паспорт, ой что-то вы тут на себя не похожие... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 16:39 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
ModelRВерим - берем, не верим- опять давай паспорт, ой что-то вы тут на себя не похожие... То что это вопрос доверия - конечно согласен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 16:41 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
mcureenabЯ себя ощупал. Никакой бумажки не нашёл. Шо, вообще ни одной??? А-а, понял. Только по улице так не ходите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 16:44 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
ModelR mcureenabЯ себя ощупал. Никакой бумажки не нашёл. Шо, вообще ни одной??? А-а, понял. Только по улице так не ходите. Да уж куда там... Холодно ведь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 16:56 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
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, чем пару абзацев пояснений, особенно учитывая некоторую вольность в использовании терминов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 17:10 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
mcureenab кхе-кхепока еще нет у человека ID и, пожалуй, только это внушает оптимизимь В лагерях эту проблему решали клеймлением. Каждому ЗК лагерный номер наносили на тело. Такой подход оптимизим внушает? как раз такой и не внушает... перечтите внимательнее - собственно это я и и мел в виду ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 17:30 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
Клёво, ребятушки. Единственно, предлагаю вообще оказаться от попыток идентификации человека, ибо сие, как (по-моему) известно, решения не имеет. Впрочем, примерно об этом уже хорошо сказал guest_20040621. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 17:51 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
mirоказаться от попыток идентификации человека. с определенной (ИМХО достаточной) степенью достоверности можно использовать алгоритм формирования АйДи персоны по сочетанию его ФамилииИмениОтчества - типа Soundex + дата рождения чтобы обойти проблему Русский-Английский можно сначала транслитерировать (можно в бэкграунде - скрыто от пользователя) личные данные с Русского на Английский (алгоритм не то чтобы тривиален, но не сложен ИМХО) и только потом применить для кодирования классический Сандекс... этакий вот квази-суррогатный ключ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 18:34 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
mirКлёво, ребятушки. Единственно, предлагаю вообще оказаться от попыток идентификации человека, ибо сие, как (по-моему) известно, решения не имеет. Впрочем, примерно об этом уже хорошо сказал guest_20040621. Отсутствие точного решения не означает, что приближённое решение непригодно для использования в практических задачах. Если это действительно нужно, нет проблем завести таблицу "Чел" с суррогатным ID и всякими атрибутами, типа фотографии, отпечатков пальцев, фактов из биографии, образцом подписи и т.п. свойств принадлежащих непосредственно человеку. Реальный чел может знать свой ID в нашей системе, может не знать, намеренно скрывать или сообщать ложные сведения. Тогда поиск ID придётся выполнять косвенными методами. Например по базе паспортов, свидетельств о постановке на налоговый учёт, фотографиям, отпечаткам пальцев, биографическим сведениям и т.п. Для надёжности можно использовать сразу несколько методов. Не исключено, что один и тот же чел будет зарегистрирован в БД с разными ID. Но тут уж надо блительность проявлять. Регулярно проводить аналитические проверки с целью выявления таких фактов и актуализации сведений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 18:43 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
mcureenabРегулярно проводить аналитические проверки с целью Штатники например остро озаботились этой проблемой после 9.11. раньше иностранцу можно было въезжать в ЮСА под новыми именами чуть не каждый раз - как документы на визу подал Куренков - Kurenkov Куренков - Kurenkoff Куренков - Kourenkov и т.д. (и это еще не самая сложная фамилия) теперь бьются над едиными правилами записи - анализируют, проверяют а наши выдают визы транслитерируя с латиницы по единой нотации (французской) (оригинально/пишеццо -- записывается в визе -- читаеццо/произносиццо) Caufield -- Куафиелд -- Кофилд Darwazeh -- Дарвазех -- Дарваже Kustrimovic -- Кустримовик -- Кустримович ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 18:58 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
ChAДа, именно так и предполагал, так как исходил из фразы softwarerСделать их уникальными (то есть потенциальными ключами)Мне показалось естественным, что таким образом подразумевается противопоставление ключа ( table_column# ) ключу ( table# , table_column# ) Хм. Имхо, слово "потенциальный" вполне подчеркивает, что речь идет не о существующем ключе. Мне кажется, не имеет смысла обсуждать поотдельности каждую фразу "что как следовало понимать", поэтому позволю себе ответить "по основной теме и в целом". 1. Где подразумевалась денормализация, мы выяснили и вроде как расхождений не имеем. 2. ИМХО описанная денормализация - основной плюс миграции идентифицирующих атрибутов, и это практически единственный вариант, когда составной ключ может оказаться оправданным. Второй вариант - таблица, на которую никто никогда не будет ссылаться, и как следствие, для нее незачем специально вводить простой. 3. "Пару строк DDL" я бы конечно написал. Проблема в том, что их требовалось штук пятнадцать, и приведенные мной четыре основных среди них потерялись бы. Я полагал, что выделив суть, обеспечу лучшее восприятие читателями. Возможно, ошибался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 20:28 |
|
||
|
Первичный ключ из нескольких внешних
|
|||
|---|---|---|---|
|
#18+
mirКлёво, ребятушки. Единственно, предлагаю вообще оказаться от попыток идентификации человека, ибо сие, как (по-моему) известно, решения не имеет. Впрочем, примерно об этом уже хорошо сказал guest_20040621. Причем тут человек. Свойства любого объекта формируются субъектом по своему усмотрению. Если не принудить, то у же при количестве субъектов >= 2 объект имет шанс остаться неидентифицируемым. Потому нужен принудительный идентификатор. В лоб каждому, каленым железом, в три слоя. GUID + PDF417. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 20:44 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=34368262&tid=1544689]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
220ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 513ms |

| 0 / 0 |
