Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / нормализация по BCNF / 25 сообщений из 25, страница 1 из 1
18.10.2007, 22:14
    #34879364
dante77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нормализация по BCNF
Имеется таблица заказов с потенциальным первичным ключом (Поставщик, Наименование_детали)
Однако, требуется, чтобы каждому заказу был присвоен идентификационный код, следовательно, это тоже потенциальный первичный ключ. Получается, что эта таблица не нормализована по BCNF и как это сделать ума не приложу. Выводить Отношение (Поставщик, Наименование_детали) в отдельную таблицу не функционально, если учесть, что каждый поставщик может поставлять большое количество наименований деталей.
Помогите, пожалуйста, решить проблему.

Заранее спасибо.
...
Рейтинг: 0 / 0
18.10.2007, 22:23
    #34879371
Baldoha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нормализация по BCNF
dante77Имеется таблица заказов с потенциальным первичным ключом (Поставщик, Наименование_детали)
Однако, требуется, чтобы каждому заказу был присвоен идентификационный код, следовательно, это тоже потенциальный первичный ключ. Получается, что эта таблица не нормализована по BCNF

Почему? Где написано, что при наличии потенциального ключа/ключей таблица не нормализована?

dante77Выводить Отношение (Поставщик, Наименование_детали) в отдельную таблицу не функционально

Что значит "не функционально"?

dante77Выводить Отношение (Поставщик, Наименование_детали) в отдельную таблицу ... если учесть, что каждый поставщик может поставлять большое количество наименований деталей.


Как раз-таки здесь прямо напрашивается отношение "один-ко-многим": у одного поставщика много наименований деталей.
...
Рейтинг: 0 / 0
18.10.2007, 22:26
    #34879375
Baldoha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нормализация по BCNF
Вдогонку: а зачем нормализовать именно до Бойса-Кодда? В обычной жизни хватает нормализации до 3-й формы. Или описанная ситуация чисто академическая?
=========================================================
This posting is provided "AS IS" with no warranties, and confers no rights.
...
Рейтинг: 0 / 0
18.10.2007, 22:44
    #34879391
dante77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нормализация по BCNF
Таблица может находиться в 3NF, но не в BCNF, только в одном случае: если она имеет, помимо первичного ключа, ещё по крайней мере один составной возможный ключ, и по крайней мере один из атрибутов таблицы входит и в первичный, и в возможный ключи.

Или я промаргал, что "...и по крайней мере один из атрибутов таблицы входит и в первичный, и в возможный ключи"?

Не функционально - значит неудобно, т.е. в результате получиться очень большой справочник, в котором оператору трудно будет что-либо отыскать.

По поводу BCNF можно, конечно, не морочить голову, но не окажется потом, что база организована не оптимально, и что, в свою очередь породит проблему быстродействия, когда база разрастется
...
Рейтинг: 0 / 0
19.10.2007, 01:04
    #34879484
ChA
ChA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нормализация по BCNF
У вас, если я правильно понял описанию(и предполагая его верным), нет атрибутов, которые входят в оба ключа. Соответственно, таблица находиться в BCNF.

P.S. Приведение к оптимальным формам желательно не из-за целей оптимизации, а только лишь для того, чтобы избежать тех или иных аномалий при модификации данных.
...
Рейтинг: 0 / 0
19.10.2007, 10:30
    #34880017
Grigor iy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нормализация по BCNF
иногда оптимизация для быстродействия как раз-таки требует денормализации
...
Рейтинг: 0 / 0
19.10.2007, 11:43
    #34880298
mir
mir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нормализация по BCNF
dante77Имеется таблица заказов с потенциальным первичным ключом (Поставщик, Наименование_детали)
Однако, требуется, чтобы каждому заказу был присвоен идентификационный код, следовательно, это тоже потенциальный первичный ключ. Получается, что эта таблица не нормализована по BCNFНормализована. Определение BCNF весьма простое: отношение находится в BCNF, если каждый детерминант функциональной зависимости является потенциальным ключом.
BaldohaВдогонку: а зачем нормализовать именно до Бойса-Кодда? В обычной жизни хватает нормализации до 3-й формы. Кому хватает? В какой ещё "обычной жизни"? Мы вроде не личную жизнь обсуждаем, а проектирование БД.
...
Рейтинг: 0 / 0
19.10.2007, 13:43
    #34880896
dante77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нормализация по BCNF
Может действительно голову не морочить c BCNF, сколько я ресурсов в сети перерыл, часто пишут, что нормализация по BCNF, 4NF и 5NF при решении практических задач встречается редко. Это, наверное, и имелось в виду под "обычной" жизнью.

"иногда оптимизация для быстродействия как раз-таки требует денормализации"

А если имеется избыточность и возникает необходимость обновления данных в базе? Машина будет обрабатывать гораздо больший объем данных, чем могла бы при нормализации. Вот Вам и быстродействие.
...
Рейтинг: 0 / 0
19.10.2007, 13:50
    #34880937
dante77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нормализация по BCNF
А интересно, возможно в клиент-серверном приложении отказаться от использования клиента, а всю работу построить только на SQL-запросах и работать через SQL Server Management Studio. Настроить типовые запросы, функции, представления и т.д. и вперед.
...
Рейтинг: 0 / 0
19.10.2007, 16:39
    #34881533
mir
mir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нормализация по BCNF
dante77Может действительно голову не морочить c BCNF, сколько я ресурсов в сети перерыл, часто пишут, что нормализация по BCNF, 4NF и 5NF при решении практических задач встречается редко. Это, наверное, и имелось в виду под "обычной" жизнью.
Следует точно различать две встречающиеся трактовки ситуции с нормальными формами.

Первая.
Ситуации, в которых нарушается BCNF, 4NF и 5NF, встречаются при проектировании намного реже, чем нарушение 3NF. Просто потому, что нарушить НФ высоких порядков более сложно. Это факт. Однако правильно трактуется он только так: в подавляющем большинстве случаев отношение, находящееся в 3NF, сразу находится в BCNF, 4NF и 5NF .

Вторая.
НФ высоких порядков (обычно выше 3NF) "в обычной жизни" не нужны, стремиться к ним не надо, и вообще это что-то сугубо теоретическое и от практики далёкое.

Первая трактовка правильная, вторая нет. Можно сказать, это один из тестов на профпригодность.

При некотором внешнем сходстве этих трактовок они принципиально различаются. Различие в том, надо или нет стремиться к 5NF. В первом вариант суть в ответе "надо, просто в большинстве случаев 5NF получается автоматом". Во втором варианте суть в ответе "не надо, ибо не царское это дело".

dante77"иногда оптимизация для быстродействия как раз-таки требует денормализации"Один из главных принципов оптимизации гласит: "Прежде, чем решать проблему, убедитесь, что она существует". Как сказал старик Кнут, преждевременная оптимизация -- источник всех бед .

Короче, сначала надо
(1) спроективать правильно, потом
(2) выявить реальные проблемы и
(3) только потом начинать оптимизацию, если есть нужда.
Беда многих начинающих в том, что они начинают что-то там оптимизировать еще на стадии проектирования и вместо качественного проекта зачастую выдают полуублюдка.

Да и сама оптимизация вещь сложная и вовсе не сводится к денормализации. Дело ещё и в том, что денормализация одни проблемы решает, но другие создаёт. Как правило, создаваемых проблем больше, чем разрешаемых.
...
Рейтинг: 0 / 0
19.10.2007, 16:45
    #34881554
mir
mir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нормализация по BCNF
dante77А интересно, возможно в клиент-серверном приложении отказаться от использования клиента, а всю работу построить только на SQL-запросах и работать через SQL Server Management Studio. Настроить типовые запросы, функции, представления и т.д. и вперед.Можно в жизни всё. Круглое носить, квадратное катить. Смысл?
...
Рейтинг: 0 / 0
19.10.2007, 17:23
    #34881693
dante77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нормализация по BCNF
По поводу денормализации я процитировал:

Grigor iyиногда оптимизация для быстродействия как раз-таки требует денормализации

Основная проблема для меня - это то, что изначально неправильно спроектированная БД в последствии может дать тормоза.

По крайней мере, насколько я теперь понимаю, если какой-л. атрибут присутствует и в составном первичном и в составном возможном ключе, то тогда таблица по BCNF не нормализована.
...
Рейтинг: 0 / 0
19.10.2007, 17:29
    #34881710
dante77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нормализация по BCNF
mir dante77А интересно, возможно в клиент-серверном приложении отказаться от использования клиента, а всю работу построить только на SQL-запросах и работать через SQL Server Management Studio. Настроить типовые запросы, функции, представления и т.д. и вперед.Можно в жизни всё. Круглое носить, квадратное катить. Смысл?

А смысл не делать клиента - это экономия трудозатрат.

Да хотя это пустой разговор, так как ничего из ActiveX-компонентов использовать нельзя, а оператор не будет каждый раз руками вбивать наименования поставщиков, даты и т.д. Ему нужны выпадающие списки, календари и прочее.
...
Рейтинг: 0 / 0
21.10.2007, 16:12
    #34883167
Baldoha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нормализация по BCNF
mirКому хватает? В какой ещё "обычной жизни"? Мы вроде не личную жизнь обсуждаем, а проектирование БД

Общественное мнение - это мнение тех, кого не спрашивают.
...
Рейтинг: 0 / 0
23.10.2007, 13:53
    #34887860
vadiminfo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нормализация по BCNF
dante77Имеется таблица заказов с потенциальным первичным ключом (Поставщик, Наименование_детали)
Однако, требуется, чтобы каждому заказу был присвоен идентификационный код, следовательно, это тоже потенциальный первичный ключ. Получается, что эта таблица не нормализована по BCNF
Заранее спасибо.
Еще не видно, что "Получается, что эта таблица не нормализована по BCNF". Нужны еще зависимости. Наличия нескольких ключей не достаточно. Нужны транзитивные зависимомсти.

dante77
Может действительно голову не морочить c BCNF, сколько я ресурсов в сети перерыл, часто пишут, что нормализация по BCNF, 4NF и 5NF при решении практических задач встречается редко. Это, наверное, и имелось в виду под "обычной" жизнью.

Если схема нормализована по 3НФ, но не нормализована по НФБК, то нормализация по последней может привести к невозможности обеспечить полноту схемы (нельзя навязать ФЗ с помощью выделения ключей). Т.е. сложноссти с обеспечением ОЦ.


dante77
По крайней мере, насколько я теперь понимаю, если какой-л. атрибут присутствует и в составном первичном и в составном возможном ключе, то тогда таблица по BCNF не нормализована.

Вообще то нужны транзитивные зависмости. Без этого хоть сто составных всевозможных ключей не помогут нарушить НФБК. Т.е. нужно, чтобы был(и) атрибут(ы), от которого(ых) бы зависел ваш Поставщик или Наименование детали, но этот атрибут(ы) не был(и) бы ключем (ни каким: ни потенциальным, ни первичным). Если бы при таковой зависимости пара (Поставщик, Наименование_детали) не была бы ключем, то было бы нарушение 3НФ.
...
Рейтинг: 0 / 0
23.10.2007, 17:42
    #34888852
dante77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нормализация по BCNF
Почему? Транзитивные зависимости устраняются же при нормализации по 3NF!

Таблица находится в третьей нормальной форме (3NF), если
она находится во второй нормальной форме (2NF),
и при этом любой ее неключевой атрибут зависит только от первичного ключа (Primary key, PK)
...
Рейтинг: 0 / 0
24.10.2007, 01:15
    #34889629
vadiminfo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нормализация по BCNF
dante77Почему? Транзитивные зависимости устраняются же при нормализации по 3NF!

Таблица находится в третьей нормальной форме (3NF), если
она находится во второй нормальной форме (2NF),
и при этом любой ее неключевой атрибут зависит только от первичного ключа (Primary key, PK)
Не все транзитивные зависимости устраняются из отношения при нормализации по 3NF!
Еще могут оставаться транзитивные зависимомсти для НФБК. Вот при нормализации по
НФБК устраняются все транзитивные зависимости.
Отношение находится в 3НФ, если оно находится в 1НФ и не один не первичный атрибут (т.е. который не входит ни в один ключ, наверное, в Ваших терминах - не ключевой) транзитвно не зависит ни от одного ключа.
А при НФБК снимается требование первичности транзитивно зависимого атрибута:
там просто ни один атрибут не должен транзитивно зависеть ни от одного ключа.
Т.е. и первичные (ключевые) не должны транзитивно зависеть. Вот их то Вы и устраняете нормализуя по НФБК, если отношение уже нормализовано по 3НФ (устранены для не ключевых).
Это существенно из-за того, что у НФБК есть проблемы с полнотой, а у 3НФ их нет.
Ну там еще кое-что про сложность алгоритма выявления проверки НфБК отличает от 3НФ.
...
Рейтинг: 0 / 0
24.10.2007, 09:28
    #34889892
dante77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нормализация по BCNF
Нижеприведенное определение BCNF правильное?

Нормальная форма Бойса-Кодда (BCNF)
Таблица находится в BCNF, если она находится в третьей нормальной форме, и при этом отсутствуют функциональные зависимости атрибутов первичного ключа от не-ключевых атрибутов.

Данная нормальная форма — это модификация третьей нормальной формы. Таблица может находиться в 3NF, но не в BCNF, только в одном случае: если она имеет, помимо первичного ключа, ещё по крайней мере один составной возможный ключ, и по крайней мере один из атрибутов таблицы входит и в первичный, и в возможный ключи. Такое бывает достаточно редко, в остальном 3NF и BCNF эквивалентны.
...
Рейтинг: 0 / 0
24.10.2007, 11:00
    #34890271
ModelR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нормализация по BCNF
dante77Нижеприведенное определение BCNF правильное?

Нормальная форма Бойса-Кодда (BCNF)
Таблица находится в BCNF, если она находится в третьей нормальной форме, и при этом отсутствуют функциональные зависимости атрибутов первичного ключа от не-ключевых атрибутов.Нет. В РМД нет концепции первичного ключа, только возможные ключи. Первичный ключ - это понятие СУБД но не РМД. mir привел корректное определение.
...
Рейтинг: 0 / 0
24.10.2007, 11:00
    #34890273
vadiminfo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нормализация по BCNF
dante77Нижеприведенное определение BCNF правильное?

Нормальная форма Бойса-Кодда (BCNF)
Таблица находится в BCNF, если она находится в третьей нормальной форме, и при этом отсутствуют функциональные зависимости атрибутов первичного ключа от не-ключевых атрибутов.

Данная нормальная форма — это модификация третьей нормальной формы. Таблица может находиться в 3NF, но не в BCNF, только в одном случае: если она имеет, помимо первичного ключа, ещё по крайней мере один составной возможный ключ, и по крайней мере один из атрибутов таблицы входит и в первичный, и в возможный ключи. Такое бывает достаточно редко, в остальном 3NF и BCNF эквивалентны.
Ну я приводил Вам определение. Ведь есть же смысл нормализации, а не просто так табу какие-то там, чтобы их знать и отличаться от тех кто не знает. Зачем нужны эти нормальные формы?
Из тех простых определений, что я приводил это видно (без лишних слов "состаной", "возможный" и проч):
Ясно что если есть транзитивная зависимость, то это означает возможность избытка.
Ее устранение приводит к устранию именно этой возможности (хотя есть другие причины для избыточности, устраняемые более высокими формами НФ), потому транзитивная зависимость и фигкрирует в определении.
Если схема в BCNF, то нет вообще транзитивных зависимостей, а при 3НФ они еще могут быть - BCNF более сильная, сильнее подавляет избыток. Зачем тогда нужна 3НФ? Ее определение расчитано на частный случай транзитивных зависмостей. Зачем все эти упоминания про первичные ключи - определение выглядит сложнее, чем НФБК.
Проще продемонстрировать проблему:
Рассмотрим схему отношения из трех атрибутов:
A, B, C.
Пусть есть ФЗ: С от В, В от А, но нет ФЗ А от В, т.е. транзитвная зависмость (обеспечивает избыток по С). Тогда А ключ (иначе дубли, а их не может быть в отношении). С не входит ни в один ключ (нет кроме перечисленных ФЗ) Нарушена 3НФ. Нормализуем (устраняем избыточность вызванную транзитивной зависимостью):
декомпозиция на отношения со схемами АВ и ВС. Соединение без потерь обеспечивает ФЗ С от В.
И еще важная деталь: в первом выделим (объявим) ключ А, а во втором В и тем самым навяжем схеме все выше перечисленные ФЗ: юзер не сможет для одного значения А внести разные В и т.д.
Теперь НФБК:
Та же схема, но зависимости:
С от В, В от АС.
Теперь очевидно есть ключи АС и АВ. Причем от АВ транзитивно зависит С, что дает повод беспокоиться об избыточности. Однако, С - первичный: входи в ключ АС. Отношение находится в 3НФ, но не в НФБК.
Если мы теперь устраним избыточность как и прежде, то выяснится, что мы не можем навязать схеме ФЗ В от АС с помощью выделения ключей, поскольку АС не содержится ни в одном отношении. Но схема в НФБК, хотя юзер может для однинаковых значений пары АС внести разные В. Т.е. проблемы с контролем избыточности устранили, а с контролем ОЦ есть.
Есть другой вариант схемы: первое отношение сохранили и добавили отношение ВС. В первом выделили ключи АС и АВ, а во втором В. Теперь схема в 3НФ, все ФЗ навязаны, но НФБК нарушена, есть проблемы избыточности. Однако, это показывает, что у 3НФ нет проблемы с навязываеием всех ФЗ, а у НФБК есть, что и делает 3НФ достойной быть выделенной в отдельную форму.
Такова примерно обусловленность наличия 3НФ, более слабой чем НФБК, но более сложной в определении.
...
Рейтинг: 0 / 0
24.10.2007, 11:55
    #34890533
vadiminfo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нормализация по BCNF
Опечатка: вместо пеервичные ключи читать первичные атрибуты. Т.е. атрибуты которые входят хоть в один ключ.
...
Рейтинг: 0 / 0
24.10.2007, 14:02
    #34891252
dante77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нормализация по BCNF
vadiminfo
Теперь НФБК:
Та же схема, но зависимости:
С от В, В от АС.
Теперь очевидно есть ключи АС и АВ. Причем от АВ транзитивно зависит С, что дает повод беспокоиться об избыточности. Однако, С - первичный: входи в ключ АС. Отношение находится в 3НФ, но не в НФБК.


Для "особо одаренных" поясните на какие отношения производится декомпозиция в данном случае для нормализации по BCNF.
...
Рейтинг: 0 / 0
24.10.2007, 14:24
    #34891353
vadiminfo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нормализация по BCNF
На те же в первом примере: AB и BC. Устраняем ить транзитивную зависимость С от АВ. Кроме того, только зависмость С от В позволяет произвести декомпозицию без потерь. Если произвести на АС и СВ, то после соединения можем получить несколько больше записей, чем было в АВС. А больше вариантов устранить транзитивную (для нее нуно как минимум три атрибута) зависмомть нет - тока два. Ну извиняюсь, если невнятно написал в предыдущем посту.

А Вы все еще думаете найти в этих формах семидесятых годов, что-то новое, кроме избитых истин, которым нас учили в свое время все эти профессора?
...
Рейтинг: 0 / 0
24.10.2007, 18:15
    #34892440
dante77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нормализация по BCNF
Я понял, спасибо.

Хотя я бы, увидев, что и первичный ключ АС и возможный ключ АВ имеют общий атрибут А и руководствуясь принципом "таблица может находиться в 3NF, но не в BCNF, только в одном случае: если она имеет, помимо первичного ключа, ещё по крайней мере один составной возможный ключ, и по крайней мере один из атрибутов таблицы входит и в первичный, и в возможный ключи", произвел бы декомпозицию на те же отношения АВ и ВС. В результате таблица нормализована по BCNF. Так ведь?

> А Вы все еще думаете найти в этих формах семидесятых годов, что-то новое, кроме избитых истин, которым нас учили в свое время все эти профессора?

Я хочу теорию максимально применять на практике и посмотреть что из этого выйдет.
...
Рейтинг: 0 / 0
24.10.2007, 20:07
    #34892748
vadiminfo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нормализация по BCNF
dante77Я понял, спасибо.

Хотя я бы, увидев, что и первичный ключ АС и возможный ключ АВ имеют общий атрибут А и руководствуясь принципом "таблица может находиться в 3NF, но не в BCNF, только в одном случае: если она имеет, помимо первичного ключа, ещё по крайней мере один составной возможный ключ, и по крайней мере один из атрибутов таблицы входит и в первичный, и в возможный ключи", произвел бы декомпозицию на те же отношения АВ и ВС. В результате таблица нормализована по BCNF. Так ведь?

Этот Ваш принцип, а точнее какая-то теорема, которую еще надо вывести из того простейшего и ямно определения, что я дал (а я его естевтвенно давно вычитал в книгах по теории РБД, а не сам придумал), не совсем ясен в плане пользы от него. Мне кажется, что он тока все усложняет, даже если окажется не ошибочным. Тем более, что первичные ключи к НФ не имеют отношения по любому. Они имеют отношение к навязыванию схеме ФЗ, наряду с альтернативными. Т.е. это разновидности того, что я называл выделенными.

Схема то нормализована по BCNF. Это позволяет подавить избыточность. Но что делать с ОЦ?
Ведь зависимость В от АС в этой схеме навязать нельзя (с помощью объявления хать первичных, хоть альтернативных ключей). Значит она будет нарушена?
Произойтет нарушение логических правил, которым должны отвечать данные. Это придется как-то контролировать. Не ясно что хуже. Проектировщик стоит перед выбором.

dante77Я хочу теорию максимально применять на практике и посмотреть что из этого выйдет.
Это, конечно, доброе дело.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / нормализация по BCNF / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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