|
|
|
3NF - есть ли транзитивная зависимость ?
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток. Тему нормализации вроде изучил нормально, но вот один момент весь мозг вынес, опишу ситуацию в упрощенном виде. Допустим есть таблица users с полями id, login, password, email. Согласно правилам третьей нормальной формы, в рамках одной таблицы нужно разорвать все транзитивные зависимости. По сути, тут явно прослеживается зависимость логина и эмейл, т.к. оба эти поля в базе уникальны, и если логин такой-то, то и мыло всегда будет связанное с ним. В этом и вопрос, это ведь является транзитивной зависимость или нет ? Когда нормализовал базу где в одной таблице были индексы и города, транзитивные связи были очевидны, а тут даже понять не могу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 20:23 |
|
||
|
3NF - есть ли транзитивная зависимость ?
|
|||
|---|---|---|---|
|
#18+
artem64Доброго времени суток. Тему нормализации вроде изучил нормально, но вот один момент весь мозг вынес, опишу ситуацию в упрощенном виде. Допустим есть таблица users с полями id, login, password, email. Согласно правилам третьей нормальной формы, в рамках одной таблицы нужно разорвать все транзитивные зависимости. По сути, тут явно прослеживается зависимость логина и эмейл, т.к. оба эти поля в базе уникальны, и если логин такой-то, то и мыло всегда будет связанное с ним. В этом и вопрос, это ведь является транзитивной зависимость или нет ? Когда нормализовал базу где в одной таблице были индексы и города, транзитивные связи были очевидны, а тут даже понять не могу. Это просто зависимость login-> email. Транзитивной могла бы быть зависимость id -> email, так как он уникален, насколько я понимаю, и от него зависит login. Но так как login уникальный, то есть ФЗ login-> id, что исключает транзитивность в id -> email через login. Нормализация всегда означает наличие возможных состояний, в которых в одной из полученных отношений (таблиц) кортежей (записей) меньше, чем в исходной. Но если login уникален, и окажется в обоих таблицах после нормализации, то записей быть меньше не может, поскольку их будет ровно столько сколько значений имеет login. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 21:37 |
|
||
|
3NF - есть ли транзитивная зависимость ?
|
|||
|---|---|---|---|
|
#18+
Вот если бы login не уникален: к примеру id это идентификатор человека, а человек может иметь несколько логинов. А логин только одну почту - ну так решил админ. Вот тада транзитивная зависимость: id->login, нет ФЗ login->id, login->email на лицо. Нарушена как минимум нормальная форма Бойса-Кода, но, скорее всего, и 3НФ (если email не входит ни в один ключ). Тогда нормализация, в которой одна из таблиц имеет столбцы login, email. И в этой таблице меньше записей чем в исходной, так как в ней значение login только один раз, а в исходной несколько. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 21:54 |
|
||
|
3NF - есть ли транзитивная зависимость ?
|
|||
|---|---|---|---|
|
#18+
vadiminfoartem64Доброго времени суток. Тему нормализации вроде изучил нормально, но вот один момент весь мозг вынес, опишу ситуацию в упрощенном виде. Допустим есть таблица users с полями id, login, password, email. Согласно правилам третьей нормальной формы, в рамках одной таблицы нужно разорвать все транзитивные зависимости. По сути, тут явно прослеживается зависимость логина и эмейл, т.к. оба эти поля в базе уникальны, и если логин такой-то, то и мыло всегда будет связанное с ним. В этом и вопрос, это ведь является транзитивной зависимость или нет ? Когда нормализовал базу где в одной таблице были индексы и города, транзитивные связи были очевидны, а тут даже понять не могу. Это просто зависимость login-> email. Транзитивной могла бы быть зависимость id -> email, так как он уникален, насколько я понимаю, и от него зависит login. Но так как login уникальный, то есть ФЗ login-> id, что исключает транзитивность в id -> email через login. Нормализация всегда означает наличие возможных состояний, в которых в одной из полученных отношений (таблиц) кортежей (записей) меньше, чем в исходной. Но если login уникален, и окажется в обоих таблицах после нормализации, то записей быть меньше не может, поскольку их будет ровно столько сколько значений имеет login. Ясно и понятно. Спасибо, vadiminfo! (еще один пример в копилку) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 22:10 |
|
||
|
3NF - есть ли транзитивная зависимость ?
|
|||
|---|---|---|---|
|
#18+
vadiminfoВот если бы login не уникален: к примеру id это идентификатор человека, а человек может иметь несколько логинов. А логин только одну почту - ну так решил админ. Вот тада транзитивная зависимость: id->login, нет ФЗ login->id, login->email на лицо. Нарушена как минимум нормальная форма Бойса-Кода, но, скорее всего, и 3НФ (если email не входит ни в один ключ). Тогда нормализация, в которой одна из таблиц имеет столбцы login, email. И в этой таблице меньше записей чем в исходной, так как в ней значение login только один раз, а в исходной несколько. Пардон. если человек имеет несколько логинов, то никакой зависимости нет по определению зависимости. Если несколько человек могут иметь один логин, а люди уникальны (login не уникален), тогда есть id->logi. Поскольку login не может иметь нескольких id в силу уникальности id. Тупанул, конкрено, по невнимательности. Смотрел после написания ошибки криминальную Россию и так всякое. Однако, лег спать, уже выключил компьютер, и вдруг вспомнил что написал несколько часов назад, и дошло что ошибся. А сразу не увидел. Как же непонятно устроено сознание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2015, 01:07 |
|
||
|
3NF - есть ли транзитивная зависимость ?
|
|||
|---|---|---|---|
|
#18+
artem64Допустим есть таблица users с полями id, login, password, email. Согласно правилам третьей нормальной формы, в рамках одной таблицы нужно разорвать все транзитивные зависимости. По сути, тут явно прослеживается зависимость логина и эмейл, т.к. оба эти поля в базе уникальны, и если логин такой-то, то и мыло всегда будет связанное с ним. В этом и вопрос, это ведь является транзитивной зависимость или нет ? Когда нормализовал базу где в одной таблице были индексы и города, транзитивные связи были очевидны, а тут даже понять не могу. Уровень нормализации отношения определяется семантикой, а не значениями данных, которые появились в отношении в некоторый конкретный момент времени. Невозможно по содержанию таблицы данного отношения в данный момент сказать, находится или нет это отношение, например, в 3НФ. Перед тем как сделать такое заключение, необходимо знать смысл данных, то есть имеющиеся зависимости между ними. Описывайте семантику (смысл) моделируемой ситуации, тогда можно будет что-то говорить о наличии или отсутствии транзитивных зависимостей. Нарисуйте схему функциональных зависимостей отношения. Это тоже способствует лучшему пониманию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2015, 01:01 |
|
||
|
3NF - есть ли транзитивная зависимость ?
|
|||
|---|---|---|---|
|
#18+
SQL*PlusНевозможно по содержанию таблицы данного отношения в данный момент сказать, находится или нет это отношение, например, в 3НФ. Отношение, имеющее "содержание" : <1,2,3> <1,2,4> <3,3,3> <3,2,3> находится в 3НФ, каков бы не был смысл данных. Поскольку нет вообще ни одной функциональной зависимости. Т.е. по состоянию иногда можно понять что находится, например, в 3НФ. Другое дело наоборот. По состоянию в данный можно сказать что находится, однако надо, что было во всех состояниях. Иначе нормализация приведет к проблемам потери информации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2015, 21:14 |
|
||
|
3NF - есть ли транзитивная зависимость ?
|
|||
|---|---|---|---|
|
#18+
опечатка: Другое дело наоборот. По состоянию в данный можно сказать что находится, надо читать Другое дело наоборот. По состоянию в данный можно сказать что НЕ находится, ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2015, 00:12 |
|
||
|
3NF - есть ли транзитивная зависимость ?
|
|||
|---|---|---|---|
|
#18+
vadiminfo, это твое последнее слово? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2015, 00:23 |
|
||
|
3NF - есть ли транзитивная зависимость ?
|
|||
|---|---|---|---|
|
#18+
vadiminfoОтношение, имеющее "содержание" : <1,2,3> <1,2,4> <3,3,3> <3,2,3> находится в 3НФ, каков бы не был смысл данных. Поскольку нет вообще ни одной функциональной зависимости. Т.е. по состоянию иногда можно понять что находится, например, в 3НФ. Другое дело наоборот. По состоянию в данный можно сказать что НЕ находится, однако надо, что было во всех состояниях. Иначе нормализация приведет к проблемам потери информации.(*) Высказывание vadiminfo скорректировано мною с учетом поправки НЕ Отношение, имеющее такое "содержание" состоит из трех атрибутов, совокупность которых является первичным ключом этого отношения. Поскольку никаких неключевых атрибутов нет, не может быть ни их неполной функциональной зависимости от первичного ключа, ни функциональной зависимости между ними (транзитивной зависимости от первичного ключа). То есть отношение, не имеющее неключевых атрибутов находится и в 2NF, и в 3NF. vadiminfoДругое дело наоборот. По состоянию в данный можно сказать что НЕ находится, однако надо, что было во всех состояниях. Иначе нормализация приведет к проблемам потери информации.Смысл этого абзаца поняь не удалось. Сформулируйте вашу мысль еще раз, другими словами и с примерами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2015, 00:56 |
|
||
|
3NF - есть ли транзитивная зависимость ?
|
|||
|---|---|---|---|
|
#18+
artem64, Зависимость - это кода одно поле выражается функцией другого. У тебя в таблице таких нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2015, 02:37 |
|
||
|
3NF - есть ли транзитивная зависимость ?
|
|||
|---|---|---|---|
|
#18+
SQL*Plus Отношение, имеющее такое "содержание" состоит из трех атрибутов, совокупность которых является первичным ключом этого отношения. Поскольку никаких неключевых атрибутов нет, не может быть ни их неполной функциональной зависимости от первичного ключа, ни функциональной зависимости между ними (транзитивной зависимости от первичного ключа). То есть отношение, не имеющее неключевых атрибутов, находится и в 2NF, и в 3NF. . Т.е. Вы согласны, что без "семантики" все же можно иногда понять, что отношение находится в 3НФ? т.е. не совсем точна фраза в плане выявляения нахождения в 3НФ по "содержанию" SQL*PlusНевозможно по содержанию таблицы данного отношения в данный момент сказать, находится или нет это отношение, например, в 3НФ. . Кроме того, мне кажется, проще сказать с точки зрения НФ, что там нет ФЗ ( кроме тривиальных: атрибут зависит от самого себя, и потому, подмножество атрибутов зависит от множества, содержащее данное подмножество). В частности, например, оно находится не только в "и в 2NF, и в 3NF.", но и нормальной форме Бойса Кодда, которое нарушена даже если транзитивно завит ключевой атрибут(входящий в некоторый ключ). Т.е. упоминание про не ключевые излишне, скорее всего, в данном примере. Еще, возможно, стоит упомянуть для начинающих, что если находится в в 3NF, то находится и в 2NF. Если в Бойса Кодда, то и подавно в "и в 2NF, и в 3NF." Но я был тоже не точен, не упомянув про тривиальные зависимости. Конечно, это формальность, но имеет значение при выводе одних ФЗ из других в теории. Для начинающих в связи с этим тут можно отметить, что есть понятие ключа, и есть понятие суперключа. Любой ключ если его дополнить атрибутом, тоже будет уникальным. И может быть назван супеключом. Однако, не ключом. У ключа никакое собственное подмножество не может быть ключом. Иначе это был не ключ, а суперключ. Однако, супеключ, скорей всего, имеет только то практическое значение, что мог быть ошибочно принят за ключ. Например, все атрибуты отношения всегда суперключ в теории. Но в реальных СУБД используется понятие мультимножества, вместо множества. Т.е. все записи таблицы могут быть не уникальны. SQL*PlusСформулируйте вашу мысль еще раз, другими словами и с примерами. Мысль в том, что тут без "семантики" нельзя сказать, что нарушена 3НФ. Т.е. в этой части, мне показалось, ваше утверждение точным. В основе утверждение что выявить ФЗ без семантики нельзя, так оно должно быть во всех возможных состояних БД, тогда как для нарушения достаточно одного состояния. Приведу пример. Но пояснения, окажутся длинными, иначе могут истолковать не то, что хотел сказать. Пример. 1 состояние, в котором как есть ФЗ для нарушения 3НФ. <1,2,3> <2,2,3> <3,3,3> Очевидно, первый атрибут выглядит как ключевой (но не факт что и потом останется таковым). И потому от него все остальные зависят. Однако он не зависит в данном состоянии ни от какого подмножества атрибутов, так как все они не уникальны, а он уникален. Но третий зависит от второго (третий вообще имеет только одно значение). Так как первый не зависит от второго, то это выглядит как транзитивная зависмость третьего атрибута от первого. Ну так же этот третий не входит на в один из ключей. Он мог входить только в ключ состоящий из второго и третьего. Но эта пара не уникальна (1 и 2 запись имеют одинаковый набор). Т.е. выглядит как нарушение 3НФ. Ну допустим провели диспозицию, посчитав, что есть избыточность. Получили два отношения <1,2> <2,2> <3,3> <2,3> <3,3> Видно, что во втором отношении 2 записи вместо 3. Есть «выигрыш» из-за устранения избыточности: если есть ФЗ, то для второго значения 2, третий всегда имеет значение 3. У нас один раз уже это была, что значению 2 соответствует 3. Второй раз занесли уже известное ранее. И, соединив эти отношения по атрибуту, который был вторым, получим в точности исходное отношение, т.е. правильную информацию (исходное считаем правильным) <1,2,3> <2,2,3> <3,3,3> Но ведь это все было сделано на основе состояния БД, без «семантики». Тогда не исключено переход БД в состояние, в котором “содержание” отношение: <1,2,3> <2,2,3> <3,3,3> <4,3,4> Нарушение ФЗ третьего атрибута от второго: значению 3 второго теперь может соответствовать как 3 так 4. Оно находится, к примеру, в 3НФ. И если провести его декомпозицию как в первом случае, то получим <1,2> <2,2> <3,3> <4,3> И <2,3> <3,3> <3,4> Но если теперь соединить, чтобы получить исходное, то получим <1,2,3> <2,2,3> <3,3,3> <3,3,4> <4,3,3> <4,3,4> Т.е. записи, которых не было в исходном отношении. Это и называют иногда соединением с потерей информации. Поэтому проводить декомпозицию нельзя. Есть теорема о том, что при нарушении НФ, существует декомпозиции без потерь информации (которая может снизить избыточность). ФЗ выведенные из "семантики" должны быть верны для всех состояний БД. Впрочем, их еще надо выявить и желательно навязать схеме. Что не удается например для нормальной формы Бойса Кодда, но всегда удается для 3Нф. Потому обычно 3НФ как может обеспечить логичческую оптимальность схемы, а выше уже как теория не может сказать что оптимальнее: навязывание ФЗ или отсутствие избыточности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2015, 11:53 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38993185&tid=1540526]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
166ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 245ms |
| total: | 508ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...