powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Насколько действительно полезна нормализация?
68 сообщений из 68, показаны все 3 страниц
Насколько действительно полезна нормализация?
    #33039392
DarkBoatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуй, All!
На тему нормализации исписаны горы бумаги электронного текста. Но возник спор, в котором некие люди утверждают, что нормализация - это не всегда надо и не всегда есть хорошо. Логические аргументы в том виде, в котором они приведены в литературе не действуют. Хочется знать максимальное число аргументов за и против. Подробно проблема будет описана ниже...

Есть такая объектная модель:

Есть ИЗДЕЛИЯ с атрибутом (КОД)
Внутри изделия есть КОМПОНЕНТЫ с атрибутом (ОБОЗНАЧЕНИЕ)
Каждый компонент состоит из ДЕТАЛЕЙ с атрибутом (ТИП)
У деталей могут быть ВЫВОДЫ с атрибутом (ИМЯ)
Выводы деталей соединены проводами с атрибутами (ВЫВОД1, ВЫВОД2)

Напрашивается такая структура таблиц:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
ИЗДЕЛИЯ (КОД, ИИД)     ИИД -первичный ключ, автоинкрементное поле

КОМПОНЕНТЫ(ОБОЗНАЧЕНИЕ, КИД, ИИД) КИД - ключ, ИИД ссылается в ИЗДЕЛИЯ

ДЕТАЛИ (ТИП, КИД, ДИД)  .....

ВЫВОДЫ (ИМЯ, ДИД, ВИД) ....

ПРОВОДА (ВИД1, ВИД2)  ВИДх - ссылка на ВЫВОДЫ.ВИД
Подразумеваются соответствующие первичные и внешние ключи, в общем все, как учили отцы.

На практике предлагается такая структура
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
ИЗДЕЛИЯ (КОД, ИИД)     ИИД -первичный ключ, автоинкрементное поле

ДЕТАЛИ1 (ИД, ИИД, ТИП, ОБОЗНАЧЕНИЕ)

ПРОВОДА1 (ИД1, ИД2, ИМЯ1, ИМЯ2)

ИДх - ссылка в ИД детали, ИМЯх - имя вывода

Второй вариант денормализованный и содержит многие потенциальные проблемы, описанные в литературе. Все это хозяйство живет в MS SQL Server и объемы таковы, что производительность никого не колышет. В ответ на высказывания про проблемы с целостностью выдвигается аргумент, что целостность обеспечим софтом. Зато, мол, так проще писать селект, ибо тут меньше таблиц (А, следовательно, и джойнов...)

В общем неделя ожесточенных споров привела меня в параноическое состояние в котором я готов усомниться в собственной вменяемости.
Могут местные отцы высказать аргументы с оценкой (по возможности) насколько действительно так можно или нельзя? По тому, что мы все знаем, что работать будет и так и так....
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33039484
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Могут местные отцы высказать аргументы с оценкой (по возможности) насколько
> действительно так можно или нельзя? По тому, что мы все знаем, что работать
> будет и так и так....

[Без претензий на местного отца] Работать будут оба варианта.

> Логические аргументы в том виде, в котором они приведены в литературе не
> действуют.

Какие именно аргументы Вы имели в виду, поясните, пожалуйста?

Если Вы проектируете базу данных без собственных метаданных, без семантической структуры, без регистрации истории изменений, без политик доступа, без версионности, то если денормализация оправдана логически и потенциальных проблем с увеличением данных она не создает, - большого криминала в денормализации как таковой imho нет. Если реализуете хотя бы одно из перечисленного - 3 н. ф. как минимум. Просто потому, что иначе не получится.

Задайте себе вопрос: что будет представлять собой эта база данных через год? Через пять лет? Если это такая одноразовая базенка, ;) imho можно особо не париться над структурой. Если планируется, что она будет расти и развиваться, - см. выше. ;)
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33039669
Фотография Va1entin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Одно маленькое замечание.
Поле, являющееся первичным ключом,
лучше делать первым в таблице.

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33039726
Фотография Va1entin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дополнительно. Соображения насчёт нормализации.

Представтьте себе денормализованную базу,
состоящую из нескольких десятков или сотен таблиц.

Разобраться в её структуре (что, согласитесь, необходимо для работы) -
это будет тихий ужас.

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33039762
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если дать таблицам и полям понятные названия, то ничего, разберутся.
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33039789
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkBoatmanнекие люди утверждают, что нормализация - это не всегда надо и не всегда есть хорошо.
ИМХО, это всегда хорошо, но не всегда производительно, что не хорошо.
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33040007
Фотография Va1entin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BTW, 1NF тоже называется нормальной.

Короче говоря, в каждом конкретном случае
надо смотреть, на какой нормальной форме лучше остановиться.

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33040362
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkBoatmanНо возник спор, в котором некие люди утверждают, что нормализация - это не всегда надо и не всегда есть хорошо.
Ключевые слова - хранилище данных. Откройте любой материал - будет объяснено, сколько суток будет считаться типичный DWH-запрос в нормализованной схеме.

DarkBoatmanВ ответ на высказывания про проблемы с целостностью выдвигается аргумент, что целостность обеспечим софтом.
Я всегда говорил, что самое страшное в ИТ - это неленивый программист. Программист, которому не лень делать руками нечто, а потом руками же исправлять ошибки из-за того, что кое-что упустил - и все это в ситуации, когда то же самое может сделать отлаженная автоматика.

Я хорошо отношусь к денормализации, но приведенные Вами за оппонентов аргументы, мягко говоря, не канают.

DarkBoatmanЗато, мол, так проще писать селект, ибо тут меньше таблиц (А, следовательно, и джойнов...)
Для "проще писать селект" существуют вьюхи. Писать денормализацию и ее софтовую поддержку - может и интереснее, чем селекты, но насчет "проще" я бы поспорил.

DarkBoatmanВ общем неделя ожесточенных споров привела меня в параноическое состояние в котором я готов усомниться в собственной вменяемости.
Неделя ожесточенных споров означает, что ваш начальник ловит вафли.

Сомневаться в собственной вменяемости - если все обстоит именно так - вам пока незачем. Убедить оппонентов логикой - после недели ожесточенных споров - я бы назвал совершенно нереальной идеей. Я бы на Вашем месте - объяснил бы начальнику, что денормализация в данном случае приведет к дополнительной и чреватой ошибками работе. Дополнительная - влияет на бюджет, а за ошибки вообще говоря отвечает начальник.

Так или иначе, именно ведущему - PM-у, начальнику или кто у вас за него - следует принять волевое решение. Если Вы будете с ним не согласны - можете смириться, можете искать варианты куда-то перейти.
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33040374
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Va1entinПредставтьте себе денормализованную базу,
состоящую из нескольких десятков или сотен таблиц.
Совершенно рядовая ситуация.

Va1entinРазобраться в её структуре (что, согласитесь, необходимо для работы) - это будет тихий ужас.
Да нет, на самом деле. Хотя отсутствие логики и единого подхода, отсутствие документации, невнятное именование и прочие забавные приемы разработки способны сделать этот процесс интересным и полезным упражнением для ума. Впрочем, денормализация здесь особо не при чем; без нее будет то же самое.
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33040472
DarkBoatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, вы меня немножко успокоили. Это архив документации предприятия. Представленный фрагмент базы хранит информацию об электрической схеме изделий. И развиваться это будет не один год...
Оттуда эта информация берется технологическими модулями для использования в процессе технологической подготовки производства.
А помещается в базу документооборотным софтом после проверки целостности.
Проблема как раз в том, что САПРА у нас уже 2 и помещающего софта, соответственно назревает тоже, как минимум, 2 варианта.

А начальника нет в природе, то есть есть два разработчика, у которых неожиданно начали пересекаться куски работы. А начальник в этом сам не сечет.
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33040752
YBW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
YBW
Гость
DarkBoatmanА начальника нет в природе, то есть есть два разработчика, у которых неожиданно начали пересекаться куски работы.

капец (.) в смыс - точка...

а кто заказчик-то...
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33040803
DarkBoatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Начальник электромонтажного производства взял на работу двух программистов, чтобы автоматизировать документооборот, учет и технологическую подготовку. Он и заказчик и ставит задачу, но, как можно понимать, в ИТ разбирался тогда, когда 36Кб памяти было сверхмного. Он на них решал проблему трассировки печатных плат... А сегодня у нас на повестке вопросы проектирования БД и архитектуры системы, о которых с напарником тяжело догорвориться... Но это уже разговор о тяжелой жизни разработчика, а не о проектировании БД.
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33040873
34rtertertety
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
думаю возможно совместить оба варианта

сама структура БД нормальная (любая достаточная НФ) используются обычные методы поддержания ссылочной целостности данных

а для доступа к данным на чтение обновляемый избыточный денормализованный массив
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33040881
Фотография Хрен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не насколько действительно полезна нормализациия, насколько действительно вредно ее отсутствие
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33041321
Фотография Va1entin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мой вам добрый совет: если эти некие
успешно будут вас зажимать своей радиотехникой
пошлите их на хрен и ищите нормальную работу...

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33041583
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нормализованная БД способна обеспечить свою целостность и непротиворечивость одними только связями между таблицами и ограничениями в них. Хранимые процедуры понадобятся только для реализации специфичной бизнес-логики. В этом - плюс нормализации (чисто академический, на практике нормализовать все и вся бывает и вредно).
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33041760
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Мои эмпирические правила. Сначала все нормализуется. Потом, если время SELECT начинает превышать некие разумные пределы, критические по скорости расчета поля денормализуются.
Денормализация всегда повышает скорость SELECT и ровно во столько же раз замедляет INSERT, UPDATE и DELETE.

Кстати, Ваш пример очень прост - простые джоины со справочниками, и я бы не стал прибегать к денормализации.
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33041800
DarkBoatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тогда сразу еще такой вопрос. Все говорят, что в денормализованном виде выборка работает быстрее.
А есть наблюдения, когда сканирование одной большой таблицы с поиском нужных строк становится медленнее, чем сканирование короткого справочника, а потом джойн по числовому ключу?
И еще вопрос, джойн по текстовым полям не может работать быстрее, чем джойн по числовым ключам, я правильно понимаю?
О каком быстрее здесь все мне толкуют?
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33041820
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
DarkBoatman. О Боже мой! Кто же находясь в здравом рассудке и трезвой памяти сканирует таблицу (не будем вспоминать те редкие случаи, когда курсор действительно выгоднее )? Вы на чем пишете?

Скорость джоина по текстовым полям действительно может быть медленнее, но это связано скорее с физическим размером индекса на диске. Джоин по полю char(1) скрее всего будет быстрее, чем по числу.

О каком быстрее? На соединение таблиц в запросе тратится время. При выборке по денормализованной таблице соединения не делаются.
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33041857
DarkBoatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Курсор не причем. Выборка из таблицы с фильтрацией, которая заставляет сервер прочесть ее всю подряд иногда называется scanning.
И тут еще я не сказал (забыл). Что при денормализованном варианте из таблиц все равно потребуется выборка с джойнами. Какие-то выборки будут быстрее, зато другие медленнее. А, например, чтобы получить все выводы компонента придется делать UNION.
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33042000
Фотография Va1entin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если это критично, подумайте об индексации
(хотя бы части, потому что по всем полям индексы - тоже плохо)
полей, по которым производится фильтрация.

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33042018
Сержант Золотарев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот пример, когда нормализация на выходе дает только красоту и дикие тормоза.
Тех задание: создать базу для хранения документов, объем - до одной сотни тысяч. Требования:
- переменный набор атрибутов разного рода (число, дата, трока, значение из справочника.).
- документы требуется сортировать, искать, группировать по произвольной совокупности этих самых искусственныйх атрибутов, время реакции системы в худшем случае - 1 секунда

Ну вот, когда была построена красивая классическая нормализованная структура, при не очень сложных запросах система захлебываться стала уже при 10 000 документов.
Когда переделали на "кирпичный" вариант (жестко забили в таблицу "Документы" сто полей f1...f100), и дабавили менеджер "Логическое поле <-> физическое поле", скорость реакции на машинке P-III, 800 mhz стала не более 0, 5 сек в худшем случае. Естественно, некрасиво, да и проблемы при изменении справочных данных (изменения приходится "в лоб" распространять по всем документам), но из-за небольшого объема (напомню - 100 000 документов) тормозов нет даже при изменении. В этом случае главным было - быстрая выборка.
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33042115
Фотография Хрен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Мои эмпирические правила. Сначала все нормализуется. Потом, если время SELECT начинает превышать некие разумные пределы, критические по скорости расчета поля денормализуются.

... а потом требуется какой нибудь другой запрос, и DBA начинает плясать с бубном и писать программы на перле, пытаясь извлечь информацию из ненормализированной базы
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33042124
Фотография Va1entin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сержант,
для тех, кто на бронепоезде повторяю:

Тормозит не нормализация,
а неразумное её использование.

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33042313
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня есть предложение рассмотреть все на небольшом примерчике:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
create table t1 (
   id1 int not null,
   ...
   constraint pk1 primary key (id1)
)
create table t2 (
   id2 int not null,
   id1 int not null,
   ...
   constraint pk2 primary key (id2),
   constraint fk2 foreign key (id1) references t1 (id1)
)
create table t3 (
   id3 int not null,
   id2 int not null,
   ...
   constraint pk3 primary key (id3),
   constraint fk3 foreign key (id2) references t2 (id2)
)
... и т.д.
Т.е. имеем цепочку взаимосвязанных таблиц t1 <- t2 <- t3 <-...<-tn
и другой пример:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
create table t1 (
   id1 int not null,
   ...
   constraint pk1 primary key (id1)
)
create table t2 (
   id1 int not null,
   id2 int not null,
   ...
   constraint pk2 primary key (id1,id2),
   constraint fk2 foreign key (id1) references t1 (id1)
)
create table t3 (
   id3 not null,
   id1 not null,
   id2 not null,
   ...
   constraint pk3 primary key (id3),
   constraint fk3 foreign key (id1,id2) references t2 (id1,id2)
)
... и т.д.

Т.е. как вы думаете когда надо будет пулучить что-то вида:
Код: plaintext
1.
select count(*) from ....tn group by id1
т.е. получить аналитику по id1, в каком случае это будет сделать легче?
в первом случа нужно будет поднять все индексы по всем связанным таблицам, а во втором - только индекс по последней таблице...
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33042521
Фотография SanyL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Плюсы нормализации:
1)Относительно меньший объем данных (соответственно БД)
2)Проще прояснить моменты с целостностью данных
3)Модель более близка к реляционной теории
4)Более логически -понятная БД (хотя могут написать такое что даже в нормализованной БД без 05 литры не разберешьси)
5)Возможно при репликациях будет нужно пересылать меньшие объемы данных - если например сидите на трафике... (возможно денормализованные участки не будут нуждаться в реплицировании конечно)
6)Возможно удастся избежать некоторых JOINов

Плюсы денормализации
Трудно сказать = тобишь на вскидку особо не вспомню моментов когда это было необходимо... Но был случай, относился к CD дискам исполнителей, для какойто выборки надо было производить конкатенацию строк - было предложено сделать дополнительно столбец который будет собержать результат конкатенации этих двух строк - соответственно скорость выборок была увеличена....
В учебниках грится что к денормализации надо прибегать только тогда когда это необходимо - а это значит на Ваше усмотрение...
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33042635
Semaphore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SanyLПлюсы нормализации:
1)Относительно меньший объем данных (соответственно БД)
Не факт. Если поля из "detail" таблицы сложить в одно поле "master" таблицы, то объем может быть меньше (на размер FK detail таблицы).

SanyL2)Проще прояснить моменты с целостностью данных
Что понимается под этим термином: "целостность данных"?

SanyL3)Модель более близка к реляционной теории
Ничуть...

Остальное не более убедительно.

Единственное (но несомненное!) преимущество нормализации состоит в исключении АНОМАЛИЙ (об этом написано в любом приличном учебнике).
Нормализация - это набор правил, основанных не на какой-то строгой математической теории, а на... здравом смысле. Соответственно, призывы к денормализации - это призыву к отходу от здравого смысла (не более, но и не менее, того). И опасность денормализации состоит только в возможности появления аномалий при "сборке" данных (что, как правило, проявляется не в момент разработки базы данных, а в момент ее эксплуатации).
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33042757
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SemaphoreЕдинственное (но несомненное!) преимущество нормализации состоит в исключении АНОМАЛИЙ
Не такая уж и плохая формулировка.

SemaphoreНормализация - это набор правил, основанных не на какой-то строгой математической теории, а на... здравом смысле.
Факт.

SemaphoreСоответственно, призывы к денормализации - это призыву к отходу от здравого смысла
Бред.

Денормализация - это набор правил, основанных на том же самом здравом смысле.
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33042776
YBW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
YBW
Гость
softwarer SemaphoreЕдинственное (но несомненное!) преимущество нормализации состоит в исключении АНОМАЛИЙ
Не такая уж и плохая формулировка.

SemaphoreНормализация - это набор правил, основанных не на какой-то строгой математической теории, а на... здравом смысле.
Факт.

SemaphoreСоответственно, призывы к денормализации - это призыву к отходу от здравого смысла
Бред.

Денормализация - это набор правил, основанных на том же самом здравом смысле.

5!

вообще-то любопытно, по такой теме и уже вторая страница... все вроде как ясно, но споры не стихают...

пытка апельсинами продолжалась уже два часа...
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33042794
Фотография Va1entin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerДенормализация - это набор правил, основанных на том же
самом здравом смысле.

И нормализация тоже.

P.S. платон мне друг, но истина дороже.

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33043204
DarkBoatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, народ, вы спасли мое душевное здоровье :), когда долго варишься в собственном соку, начинаются странные вещи...
В результате была проломлена нормализованная структура именно этого участка на основании того, что если одни запросы писать проще, то другие сложнее... Хотя, местные автоматизаторы мне это еще припомнят :)
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33043674
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Заранее прошу прощения у всех за резкость - Пятница.

Хрен. А JScript не пользовали? Уверяю, гораздо проще, чем на Перле. Не вижу связи. Или у

Вас любой новый запрос вызывает икоту?

gardenman. Никто не будет разбиратся в Вашем примере. Решение о денормализации принимается

не на основе структуры, а на основе реальной скорости обработки, которая является функцией

от общего объема информации.

SanyL. Вы бы матчасть поучили, что ли. Особенно меня убили сведения, что нормализованые данные близки к реляционной теории. Реляционной теории это пофиг. Нормализация - это способ без дополнительных затрат получить целостность и непротиворечивость данных.

Денормализация предполагает, что для этого нужно задействовать дополнительные механизмы поддержки целостности и непротиворечивости. Реализовать их можно по разному: тригерами, хранимыми процедурами, тразакциями с клиента (хотя я и ярый пртивник этого метода)
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33043774
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SanyL
3)Модель более близка к реляционной теории

Это как? Неормализованная далека от теории? В каком смысле? Она (теория) их всех как бы рассматривает, и грит о последствиях не нормализованных. Она же (теория) говорит и проблемах нормализации выше третьей нормальной формы.


Semaphore
Что понимается под этим термином: "целостность данных"?

Удовлетворение данных некоторым логическим правила во всех состояниях БД.
Вот пример, про сложности нормализации по 3НФБК:
Пусть есть Договоры (Д), отделения (О) и подразделения (П) этих отделений. И пусть есть логическое правило: Только одно подразделение отдела может участвовать в конкретном договоре (Назовем правило S1). Очевидно есть фукциональная зависимость П->O, поскольку подразделение может принадлежать только одному подразделению (тоже логическое правило). Тогда есть функциональная зависмость ДП->О => ДП - ключ (потенциальный). Если нет правила S1, то отношение R(Д,О,П) - не удовлетворяет 3НФ, и схема может быть нормализована декомпозицией на отношения Q(Д,П), T(П,О).
Но поскольку есть S1, и означает по сути ДО->П => атрибут О - первичный (входит в ключ). Отношение R(Д,О,П) - удовлетворяет 3НФ, но не удовлетворяет 3НФБК. Очевидно, там есть избыток: если подр п1 отделения о1 уже участвоало хоть в одном договре, то любое его участие в другом приведет к повторной записи о том что п1 принадлежит о1, хотя эта информация уже есть в БД п1. Однако, если нормализовать по 3НФБК декомпозицей как и раньше, то навязать схеме зависмосить ДО->П с помощью выделения ключей не удастся. Как следствие могут занести данные так, что в одном договоре будет участвовать несколько подразделений одного отделения - нарушение ограничения целостности S1.
Чтобы схема находилась в 3НФ, и в схеме были прописаны ограничения целостности с помощью выделения ключей, ее придется привести к виду:
R(Д,О,П), T(П,О) (и, например, объявить ключами в первом отношении пары {Д,О}, {Д,П}, а во втором {П}).
Вот проектировщик стоит перед выбором:

1) схема R(Д,О,П), T(П,О) - ограничения целостности навязаны с помощью выделение ключей, но она не удовлетворяет 3НФБК и есть соответсвующая этому избыточность

2) схема R(Д,П), T(П,О) в 3НФБК - избытка нет, но нельзя с помощью выделения (обяъвления) ключей навязать правило одного подразденления отделения в договоре. Но могут разные подразделения разных отделений, т.е. с помощью внешних ключей тоже нельзя.

Что лучше? Правда, в некоторых случаях на помощь 2 могут прийти триггера.
Но в общем случае есть проблема выбора.
Т.е. теория не может дать точных критериев оптимальной схемы во всех случаях, и потому пректирование может представлять из себя тскусство, наверное.
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33043784
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую, vadiminfo!

Проблема проектирования, описанная в Вашем примере, вызвана тем, что существует бизнес-правило, накладывающее ограничения на связь Д-П, вытекающие из связи П-О. И в жизни таких, а то и похуже, ограничений полным-полно. Проблема нормализации в этом примере может быть решена вводом идентифицирующего отношения П-О, когда O становится частью первичного ключа П и, далее, появляется в Д как часть FK. Рассмотренный случай демонстрирует, что ключом к каждой табличке проектируемой БД не всегда стоит делать суррогатный автоинкремент. Иногда нужно использовать составные ключи.
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33043795
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Urri
Как раз я пытался сказать, что она не может быть решена в схеме 2 никак кроме, может быть, триггеров. Но мы их не рассматриваем. Т.е. ни превичными, ни альтернативными, ни внешними.
То что Вы сказали про решение не совсем понял.

Вы пишите
когда O становится частью первичного ключа П и, далее, появляется в Д как часть FK.

В этой фразе не понял в каком смысле О является частью первичного ключа П? П - это атрибут. Я выделенные ключи обозначал взятием в фигурные скобки. Т.е. {O,П} - это выделенный ключ (не важно первичный или альтернативный) - декларативно объявляется уникальность и запрет на пустые значения. Если П это ключ, в который входит О, то под ним вы понимаете, то что я под {O,П}? Или что? Просто П - использовано под обозначение атрибута, и ключи лучше по другому обозначать, чтобы не запутаться. И в какм смысле О появляется в Д? Д - пока обозначет единичный атрибут, а не множество атрибутов.

Уточните Вы про первую схему или вторую говорите.
В схеме 1 ограничения навязать можно - избыток остается (ненорамлизованность по НФБК).
Во второй может быть только один FK, состоящий из единственного атрибута П.
Т.е. О в FK никак не войдет.

Суррогатный ключ ничего не меняет в это раскладе: не мешает и не помогает.
Ключей то может быть много в схеме.
Т.е. можно суррогаты добавить никак не повляияв на проблему.

Я хотел продемонстрировать, что ограничения целостности могут вызывать проблемы при нормализации выше третьей нормальной формы. Есть выбор - либо то потеряем, либо это.

Я там опечатку дал не 3НФБК, НФБК.
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33043885
ap99ap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkBoatmanКурсор не причем. Выборка из таблицы с фильтрацией, которая заставляет сервер прочесть ее всю подряд иногда называется scanning.

Индекс по фильтруемому полю создать не судьба?

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

Соответственно, джойны по индексированным полям будут достаточно быстрыми.
Соответственно, базу можно и нужно нормализовать до третьей формы.
О чем тут неделю спорить?
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33043889
Semaphore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer SemaphoreСоответственно, призывы к денормализации - это призыву к отходу от здравого смысла
Бред.
Денормализация - это набор правил, основанных на том же самом здравом смысле.
Таким образом, Вы хотите сказать, что здравый смысл лежит в основе и нормализации, и ее отрицании. Вот это действительно бред!
Денормализация - удел тех, кто не понимает очень простого правила: то как задумывалась БД, и то как она (в конечном счете) используется, разные вещи. Любая более или менее серьезная система имеет свою логику развития, которая может быть отличной от логики, заложенной разработчиком. (Дюма-отец говорил: "Не я управляю свими героями, но они водят кончик моего пера"). А, следовательно, велика вероятность того, что в денормализованной БД проявятся аномалии, и пользователи увидят информацию, которой... не существовало и не существует в реальности.
Денормализация основана не на здравом смысле, а на благих пожеланиях, которыми, как известно, "вымощена дорога в ад".
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33043904
Semaphore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vadiminfo Semaphore
Что понимается под этим термином: "целостность данных"?
Удовлетворение данных некоторым логическим правила во всех состояниях БД.
Вот пример, про сложности нормализации по 3НФБК:
Пусть есть Договоры (Д), отделения (О) и подразделения (П) этих отделений. И пусть есть логическое правило: Только одно подразделение отдела может участвовать в конкретном договоре (Назовем правило S1). Очевидно есть фукциональная зависимость П->O, поскольку подразделение может принадлежать только одному подразделению (тоже логическое правило). Тогда есть функциональная зависмость ДП->О => ДП - ключ (потенциальный). Если нет правила S1, то отношение R(Д,О,П) - не удовлетворяет 3НФ, и схема может быть нормализована декомпозицией на отношения Q(Д,П), T(П,О).
Но поскольку есть S1, и означает по сути ДО->П => атрибут О - первичный (входит в ключ). Отношение R(Д,О,П) - удовлетворяет 3НФ, но не удовлетворяет 3НФБК. Очевидно, там есть избыток: если подр п1 отделения о1 уже участвоало хоть в одном договре, то любое его участие в другом приведет к повторной записи о том что п1 принадлежит о1, хотя эта информация уже есть в БД п1. Однако, если нормализовать по 3НФБК декомпозицей как и раньше, то навязать схеме зависмосить ДО->П с помощью выделения ключей не удастся. Как следствие могут занести данные так, что в одном договоре будет участвовать несколько подразделений одного отделения - нарушение ограничения целостности S1.
Чтобы схема находилась в 3НФ, и в схеме были прописаны ограничения целостности с помощью выделения ключей, ее придется привести к виду:
R(Д,О,П), T(П,О) (и, например, объявить ключами в первом отношении пары {Д,О}, {Д,П}, а во втором {П}).
Вот проектировщик стоит перед выбором:

1) схема R(Д,О,П), T(П,О) - ограничения целостности навязаны с помощью выделение ключей, но она не удовлетворяет 3НФБК и есть соответсвующая этому избыточность

2) схема R(Д,П), T(П,О) в 3НФБК - избытка нет, но нельзя с помощью выделения (обяъвления) ключей навязать правило одного подразденления отделения в договоре. Но могут разные подразделения разных отделений, т.е. с помощью внешних ключей тоже нельзя.

Что лучше? Правда, в некоторых случаях на помощь 2 могут прийти триггера.
Но в общем случае есть проблема выбора.
Т.е. теория не может дать точных критериев оптимальной схемы во всех случаях, и потому пректирование может представлять из себя тскусство, наверное.
Что лучше? Давайте разберемся. Итак, подразделение однозначно определяет отделение, которому принадлежит. То есть, П -> О - первая ФЗ. Вторая ФЗ: договор определяет подразделение (правило S1), то есть, Д -> П. В результате приходим к двум отношениям: R1(#П, О) и R2(#Д, П). Отношение R2 не позволит нам иметь более более одного подразделения для данного договора, а отношение R1 поставит однозначное соответствие между подразделением и отделением, которому оно принадлежит.
Ваша ошибка вот здесь: "Тогда есть функциональная зависмость ДП->О => ДП - ключ (потенциальный)". Вы (напрасно) используете superkey, удалите из ключа договор (подразделение само однозначно определяет отделение).
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33043914
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Денормализация предполагает, что для этого нужно задействовать дополнительные механизмы поддержки целостности и непротиворечивости.
Реализовать их можно по разному: тригерами, хранимыми процедурами, тразакциями с клиента (хотя я и ярый пртивник этого метода)
Этот ответ стоит чуть дополнить. Ряд возможностей денормализации сегодня поддерживаются серверами БД, то есть "без дополнительных усилий". Это materialized view, это calculated fields, это nested tables и varrays, это, наконец, классический вариант включения дополнительного поля в уникальный ключ (приводящий к поддержанию целостности в дочерней таблице FK-constraint'ом). Можно назвать пару вещей, которые хоть формально не денормализация, но очень на нее похожи - на первом месте, безусловно, bitmap join indexes (это индекс который строится для таблицы A по значениям из таблицы B, взятых по внешнему ключу A->B). Это, собственно, умение "брать значения из индекса" - в MSSQL, как мне говорили, появляется специально заточенная под это фича "класть значения некоторых полей только в листья индекса, но не в промежуточные узлы".
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33043975
Semaphore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarerРяд возможностей денормализации сегодня поддерживаются серверами БД, то есть "без дополнительных усилий". Это materialized view, это calculated fields, это nested tables и varrays, это, наконец, классический вариант включения дополнительного поля в уникальный ключ (приводящий к поддержанию целостности в дочерней таблице FK-constraint'ом). Можно назвать пару вещей, которые хоть формально не денормализация, но очень на нее похожи - на первом месте, безусловно, bitmap join indexes (это индекс который строится для таблицы A по значениям из таблицы B, взятых по внешнему ключу A->B). Это, собственно, умение "брать значения из индекса" - в MSSQL, как мне говорили, появляется специально заточенная под это фича "класть значения некоторых полей только в листья индекса, но не в промежуточные узлы".
Во-первых, хотелось бы заметить, что создатели СУБД стремятся удовлетворить пожелания разработчиков программного обеспечения, далеко не всегда задумываясь о теоретических основах и последствиях своих решений. Об этом много говорилось на разных конференциях, например, посвященных вопросам стандартизации SQL (в частности, Joe Celko техническим редактором комитета стандартизации ANSI X3H2). Поэтому ссылаться на те или иные механизмы какой-то СУБД, надо с большой осторожностью, не забывая при этом, что большинство СУБД - коммерческие продукты и предназначены (в том числе) для получения прибыли (иногда потворствуя популизму). Во-вторых, опасно и то, что создатели СУБД порой весьма агрессивно пытаются "протащить" через стандарт те решения, которые приняты в данных СУБД, то есть, использовать стандарты, как средство конкурентной борьбы.
1. "materialized view" и "calculated fields" - эти два механизма не имеют никакого отношения к нормализации. Есть понятие таблицы и есть понятие представления (View) в полном соответствии со стандартом ANSI SPARC. Нормализация распространяется только на отношения (на концептуальном уровне), структуру таблиц (на физическом уровне), но не на view и не на вычисляемые поля, которые относятся к представительскому уровню. Никто и никогда не рассматривал вопросы нормализации на уровне представления информации.
2. "nested tables и varrays". Рассматривая вопрос о нарушении 1НФ посредством "сложных" структур, необходимо определиться с понятием атомарности атрибута. Например, является ли дата или строка атомарной величиной? Это относится и к вложенным структурам (таблицам) и массивам и BLOb полям. Почему строка, состоящая из символов, атомарна, а массив состоящий из элементов, неатомарен? То, что атомарно на одном уровне, может быть нетомарно на другом (более низком) уровне. Эта простая истина давно известна. Например, удобно хранить рабочий календарь на каждый месяц в массиве из 31 элемента. И если задача, стоящая перед разработчиком, не предусматривает рассмотрения отдельного элемента этого массива, то почему разработчик не может принять атомарность рабочего календаря? Какое же в этом нарушение 1НФ?
3. "классический вариант включения дополнительного поля в уникальный ключ (приводящий к поддержанию целостности в дочерней таблице FK-constraint'ом)". Что-то есть в этой "классике" от лукавого... Нет ни описания примера, ни рассмотрения альтернатив. Можно подробнее рассмотреть эту ситуацию "с поддержанием целостности"?
4. "Можно назвать пару вещей, которые хоть формально не денормализация"... Конечно, можно. Можно поговорить о погоде, например. Это тоже не имеет отношения к денормализации, но зато всегда злободневно.
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33043981
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Semaphore. Не согласен с Вами. Денормализация - это обычный прием проектирования. Другое дело, что для ее применения нужно сто раз отмерить. И, необходимо, что бы проектировщик в полном объеме продумал и реализовал поддержку целостности и непротивороречивости.
Немного перефразируя Вас () - денормализация - удел тех, кто четко и ясно понимает, к чему приведут ее последствия и знает как с этим боротся.
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33043998
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Semaphore

Ваша ошибка вот здесь: "Тогда есть функциональная зависмость ДП->О => ДП - ключ (потенциальный)". Вы (напрасно) используете superkey, удалите из ключа договор (подразделение само однозначно определяет отделение).

К сожелению, Вы не совсем поняли смысл примера (о какой пробле речь идет). В отношении R(Д,О,П) Д не является ключем. И потому ДП - это не суперключ в этом отношении а просто ключ. Т.е. возможно
Код: plaintext
1.
2.
3.
4.
5.
Д  О П
------
д1 о1 п1
д2 о1 п1
д1 о2 п2
Т.е. ни Д, ни П в этом отношении не являются уникальными. Вы устранив мои "ошибки" получили схему 2? Ваше R1(#П, О) и R2(#Д, П) это мое схема R(Д,П), T(П,О). Так и я ее получал. Вы получили через типа синтез, я через декомпозицию универсального отношения. Одно и тоже. Но проблема в том, что нельзя навязать ограничение целостности S1 такой схеме с помощью выделения ключей зависмомсть ДО->П.
Т.е. пользователь может ввести на один договор два подразделения одного отделения. Т.е. проблема осталась, тем более, что я такую схему описывал.
Вот в схему 1 можно навязать, но она избыточна.
Тема примера выбор между нормализацией по НФБК и ограничением целостности. Точнее навязыванием схеме функциональных зависимостей ПО.

Плиз. Будьте внимательнее - решайте поставленную проблему, а не какую-то другую.
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33044003
Semaphore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cat2Semaphore. Не согласен с Вами. Денормализация - это обычный прием проектирования
Добавлю от себя. Денормализация - это обычный прием проектирования основанный на отсутствии здравого смысла... :)
Cat2Другое дело, что для ее применения нужно сто раз отмерить.
Что отмерять-то будете? Аномалии? Тут есть один "пунктик": бороться с аномалиями придется вне физической схемы БД с помощью триггеров, хранимых процедур, приложений и т.п. Но появится новый разработчик, который не знает об этих "обходных" решениях, и... тогда пользователи, администраторы БД и это самый разработчик скажут Вам большое "спасибо"... на нашем выразительном русском языке.
Разработчики редко задумываются о том, что информация в БД может дорогого стоить! И забота о достоверности информации не бывает избыточной. Вырастут мощности "железа", улучшаться алгоритмы обработки информации, но достоверность информации при этом улучшиться не сможет!
Cat2И, необходимо, что бы проектировщик в полном объеме продумал и реализовал поддержку целостности и непротивороречивости
Не сочтите за труд и объясните, как обеспечить поддержку "целостности" и непротиворечивости. Есть у Вас в "кармане" набор более простых и ясных правил, чем правила нормализации? Можете их сформулировать? Премия Тьюринга Вам гарантирована! Ну, а мое внимание будет самым пристальным :)
Итак, что необходимо сделать для повышения "целостности" и "непротиворечивости" при несоблюдении нормализации? Жду!
Cat2Немного перефразируя Вас () - денормализация - удел тех, кто четко и ясно понимает, к чему приведут ее последствия и знает как с этим боротся.
Ну, вот и раскройте существо этого "четкого и ясного понимания". А мы посмотрим, надо ли выбирать этот удел.
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33044007
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. Ваша схема не допускает состояние БД
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
R1(#П, О)
---------
п1 о1
п2 о2

R2(#Д, П). 
----------
д1 п1
д1 п2   

А такое состояние допустимо. На одном договоре может быть много подразделений. Но не допустимо
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
R1(#П, О)
---------
п1 о1
п2 о1

R2(#Д, П). 
----------
д1 п1
д1 п2   


Не может быть двух из одного отделения.
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33044008
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. S1 это не Д -> П, а именно ДO -> П.
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33044018
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. суть проблемы, что как вы не объявляйте ключи в схеме R1(П, О) и R2(Д, П) Вы не навяжете функциональную зависмость ДO -> П. Но схема в НФБК.
Это схема 1 (в смысле структуры - ключи объявлять можно любыми).

В схеме
R1(П, О) и R2(Д, П, О) можно навязать, например, объявив составной ключ {Д,О} среди прочих. Но такая схема не удовлетворяет НФБК из-за транзитивной зависимости {Д,П}->П->О, хотя и удовлетворяет 3НФ, поскольку О входит в состав ключа {Д,О}.


Т.е. НФБК имеет проблемы с навязанностью функциональных зависмостей - не все ф зависимости ПО ей можно навязать. И стал быть с ограничениями целостности у нее проблемы.
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33044033
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разумеется речь идет о том, что нельзя навязать 1 схеме ДO -> П без навязывания зависимостей, которых нет в ПО. Типа Д -> П. Потому что такое лекарство хуже болезни.
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33044035
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Semaphore
Добавлю от себя. Денормализация - это обычный прием проектирования основанный на отсутствии здравого смысла... :)
Наоборот. Здравый смысл подсказывает, что в некоторых случаях можно поступится выгодами нормализации, ради выгод в скорости выбоорок.

что отмерять-то будете? Аномалии?... Но появится новый разработчик, который не знает об этих "обходных" решениях
Это вопрос о том, нужна ли для БД документация? К нормализации/денормализации никакого отношения не имеет

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

Ну, вот и раскройте существо этого "четкого и ясного понимания". А мы посмотрим, надо ли выбирать этот удел.
А вот этого не могу . Но эмпирический критерий есть. Если новая база у Вас на автомате получается сразу по 3NF, то "четкое и ясного понимание" у Вас есть.

Отметьте, пожалуйста, что не ВО ВСЕХ базах имется данные, когорые надо нормализовать по 4 и 5 формах.

+++++
Автоподпись - Близкий друг королевы Задолбало.
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33044041
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2
Денормализация - это обычный прием проектирования.

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

Cat2
Отметьте, пожалуйста, что не ВО ВСЕХ базах имется данные, когорые надо нормализовать по 4 и 5 формах

Субя по всему уже у НФБК есть проблемы с ограничениями целостности. И если проетировщик выбрал их, то чего уж думать о 4 и 5 формах?
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33044106
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SemaphoreВо-первых, хотелось бы заметить, что создатели СУБД стремятся удовлетворить пожелания разработчиков программного обеспечения,.....предназначены (в том числе) для получения прибыли (иногда потворствуя популизму)
В-последних, хотелось бы ответить, что лично мне малоинтересен вопрос, какой бы красивой была сферическая СУБД в вакууме, если бы ей не требовалось решать прикладные задачи.

Лет десять назад я как и Вы полагал, что serializable - единственный нормальный режим работы БД. Потом я смягчил свою позицию - и не вижу причин возвращаться в те времена.
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33044150
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
vadiminfo
Такая постановка вопроса означет необходимость нормализации
Так я об этом и писал выше. Сначала нормлизуем, а потом, при нужде, денормлизуем. Но очень акуратно.
============
прошу прощения сечас нет времени подробно ответить на все
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33044272
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfo2 Urri
То что Вы сказали про решение не совсем понял.

когда O становится частью первичного ключа П и, далее, появляется в Д как часть FK.

В этой фразе не понял в каком смысле О является частью первичного ключа П? П - это атрибут. Я выделенные ключи обозначал взятием в фигурные скобки. Т.е. {O,П} - это выделенный ключ (не важно первичный или альтернативный) - декларативно объявляется уникальность и запрет на пустые значения. Если П это ключ, в который входит О, то под ним вы понимаете, то что я под {O,П}?Да, видимо, так.
vadiminfoИ в какм смысле О появляется в Д? Д - пока обозначет единичный атрибут, а не множество атрибутов.

Уточните Вы про первую схему или вторую говорите.
В схеме 1 ограничения навязать можно - избыток остается (ненорамлизованность по НФБК).
Во второй может быть только один FK, состоящий из единственного атрибута П.
Т.е. О в FK никак не войдет.Значит, скорее, про первую.
Я в своем посте обозначил буквами сущности, а не их атрибуты. И имел в виду такую схему.
ОтделыPK{О}О - PK
ПодразделенияPK{О+П}О - PK и FK Cсылаемся на ОтделыП - PK Подразделение внутри отдела
ДоговорыPK{Д}Д - PK
Как я понял, у Договоров с подразделениями связь многие-ко-многим (иначе бизнес-правило "только одно подразделение отдела может принимать участие в договоре" теряет смысл).
Договоры - Подразделения PK{Д+О+П}Д - PK и FK Cсылаемся на ДоговорыО - PK и FK Cсылаемся на Подразделения; но через них - и на отделыП - PK и FK Cсылаемся на Подразделения.
Ну и, для реализации озвученного бизнес-правила, накладываем ограничения в виде дополнительного уникального индекса {Д, О} на "Договоры - Подразделения".
Это не будет соответствовать НФБК? Ну а третьей-то, хотя бы, будет?
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33044322
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Urri
Так у Вас 4 отношения?
Среди которых R1(Д,О,П) и R2(О,П)?
Если так, то R1(Д,О,П) не удовлетворяет НФБК => схема не удовлетворяет НФБК.
(Есть конечно и третья схема из одного отношения R1(Д,О,П) - она и не в НФБК и нельзя навязать зависимость П->О, и очевидны аномалии ввода и удаления. Но одно отношение.)
У Вас же 4. Чем больше отншений при прочих равных условиях, тем очевидно менее оптимальна схема. А она равна по условиям схеме из двух отношений R1(Д,О,П) и R2(О,П). Не в НФБК и можно реализовать ограничение целостности S1 (просто объявить уникальной пару {Д,О}). В R2 ключем объявить П. В принципе все фукциональные зависимости навязаны с точки зрения теории. Для того, чтобы все-таки обеспечить ограничения целостности и не допустить в R1 ввода подразделений, которых нет в R2 или не приписать чужих подразделенй отделению в R3 можно объявить сверх того суперключ в R2 - пару {О,П} ограничение ссылочной целостности с внешним ключем {О,П} в R1. Но это детали - просто этой пары достаточно, чтобы получить то же, что Вы получили с 4 отношениями.

Главное с точки зрения темы, что нормализация выше 3 формы (НФБК) имеет проблемы с ограничениями целостности. Т.е. чтобы показать, что этот пример не говорит об этом, надо чтобы схема была и в НФБК, и обеспечивались все ограничения целостности из примера, включая S1, но только они (например, никаких Д->П не должно быть).

Поскольку R1(Д,О,П) нарушает НФБК, то его быть не должно. А если его нет, то нельзя навязать ДО -> П с помощью декларативных ограничений целостности.



На практике и с триггерными схема R1(Д,О,П), R2(О,П) может оказаться предпочтительней. Так как О в R1 - просто в этом случае вычислимое поле, а пользователь вводит тока Д и П. Потому что скорей всего в схеме R1(Д,П), R2(О,П) - триггер обеспечивающий S1 может иметь сложности в зависимости от СУБД. Например в Оракле - с мутейтинг тэйбл придется столкнуться. Да и просматривать он должен гораздо больше, чем триггер первой схемы. Но так или иначе сложнее прояснять моменты с целостностью данных

А было утверждение

SanyL
2)Проще прояснить моменты с целостностью данных


До 3НФ включительно - это скорей всего так, а вот с НФБК - это, наверное, не так.

Кроме того, нормализация и по 3НФ (и вообще) может приводить к появлению отношений, которые не соответсвуют сущностям ПО. Т.е. может приводить к неадекватному представлению сущностей реального мира. Плюс дополнительные соединения.

С другой стороны преимущества нормализации очевидны - устранение избыточности и аномалий ввода и удаления.

Думаю, нормализация с возможной последующей денормализацией лучше в общем случае, чем проектирование вообще без этапа, на котором проводится нормализация в ходе поиска оптимальной схемы. Денормализация может понадобиться потом с целью оптимизации всей системы в целом с учетом особенностей выбранной СУБД.

Однако, считается, что опытный пректировщик может спроектировать и без нормализации. В любом случае вопрос проектирования БД - вопрос искусства проектировщика в сложных случаях, поскольку теория не дает критериев оптимальной схемы на все случаи.

Наши парни не заморачиваются нормализацией, и опыт у них есть.

Однако, я наблюдал БД, где явные нарушения 3НФ приводили не только большой избыточности, но и усложняли написание запросов, да и к противоречиям в данных - т.е там и ограничения целостности трудновато было обеспечить, да и не утруждали себя их обеспечением разработчики.
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33044502
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfoОднако, считается, что опытный пректировщик может спроектировать и без нормализации.
Я бы сказал чуть иначе - без явно выделенного этапа нормализации. Поскольку эта работа идет в фоне, в подкорке.

Что до денормализации - наверное, ее можно опять же делать сразу, но с моей точки зрения, целесообразно делать позже. Хотя бы потому, что сначала хочется посмотреть, обдумать, проверить "чистую" логическую схему, и уже когда нет сомнений в логике, спускаться к реализации.
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33044515
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Я бы сказал чуть иначе - без явно выделенного этапа нормализации. Поскольку эта работа идет в фоне, в подкорке.

Я имел в виду более радикальное: опытный проектировщик не знает ничего про нормальные формы, функциональные зависмости (ну может слышал сами термины). Нутром типа чувствует избыток или аномалии - чисто эвристический подход. Мне, кажется, что автор темы именно про это спрашивал.


Что касается явного выделения этапа нормализации (иногда этот этап называют этапом логического проектирования БД), то его, наверное, не присутствует в большинстве случаев. Возможно, в планах вообще есть этап проектирование БД, в который каждый уже включает что сочтет нужным.
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33044565
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
vadiminfo. Опытный проектировщик знает про нормальные формы, и они получваются у него на автомате. Глубокие раздумия у него вызывает обдумывание того, что что-то , возможно, нужно денормализовать.
Этапа нормализации у опытного проектировщика нет. Разве что в случаях, когда переписыватся другая база, написанная человеком, который не утруждал себя нормализацией.
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33044597
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Cat2
В моей фразе под "опытный проектировщик" имелось в виду некоторые "опытные проектировщики", но не обязательно все. Т.е. нельзя сказать, что опытный проектировщик, не знающий нормальных форм всегда спроектирует хуже, чем тот который знает. Причем это не мое мнение, а я где-то вычитал.

Этапа нормализации у опытного проектировщика нет.

Я пытался сказать, что такого этапа, скорей всего, нет у многих: и опытных, и, что хуже, у не опытных проектировщиков. Однако, он рекомендуется в толстых книгах.
И в общем случае он может быть и у опытного проектировщика. Наверное, во многих случаях сами функциональные зависимости довольно простые, и потому можно обойтись без явного выделения этого этапа.
Но, например, если было где-то явно написано, что схема нормализована по 3НФ, например, а потом денормализована так-то и так-то, то врядли в этом был вред для другого проектировщика, который бы сопровождал БД в будующем.
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33044751
Semaphore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vadiminfoТ.е. Ваша схема не допускает состояние БД
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
R1(#П, О)
---------
п1 о1
п2 о2

R2(#Д, П). 
----------
д1 п1
д1 п2   
А такое состояние допустимо. На одном договоре может быть много подразделений. Но не допустимо
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
R1(#П, О)
---------
п1 о1
п2 о1

R2(#Д, П). 
----------
д1 п1
д1 п2   
Не может быть двух из одного отделения.
Прошу прощения за то, что недопонял Вашу задачу.
Но должен заметить, что рассматриваемая Вами задача выходит за пределы понятия ФЗ (функциональной зависимости), а, следовательно, не может рассматриваться через "призму" нормализации.ФЗ - это качественное понятие, основанное на том, что один атрибут (или набор атрибутов) определяет другой набор атрибутов. Вот, например, определение Озкарахана: "атрибут (или сущность), являющийся областью определения, однозначно определяет атрибут (или сущность) области значений" (см. Э. Озкарахан "Машины баз данных", М.Мир, 1989). Но Вы в своей задаче вводите количественную характеристику "только одно подразделение данного отделения", считая ее частью ФЗ. Давайте слегка модифицируем это требование: "только два (три, ..., N) подразделения отделения могут участвовать в выполнении договора". Требование "только одно подразделение" ввело Вас в заблуждение, сподвигнув на поиски дополнительных ФЗ там, где их нет. Если мне не изменяет память, то что-то подобное рассматривалось Фейгиным (Fagin R. Multivaled dependencies and new normal form for relation databases, ACMTrans. on Database Systems, 1977 или других работах).
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33044754
Semaphore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer SemaphoreВо-первых, хотелось бы заметить, что создатели СУБД стремятся удовлетворить пожелания разработчиков программного обеспечения,.....предназначены (в том числе) для получения прибыли (иногда потворствуя популизму)
В-последних, хотелось бы ответить, что лично мне малоинтересен вопрос, какой бы красивой была сферическая СУБД в вакууме, если бы ей не требовалось решать прикладные задачи.
Один умный человек сказал, что "нет ничего практичнее хорошей теории". Правда, чтобы понять это надо хотя бы знать теорию...
softwarerЛет десять назад я как и Вы полагал, что serializable - единственный нормальный режим работы БД. Потом я смягчил свою позицию - и не вижу причин возвращаться в те времена.
Ваши догадки обо мне не очень уместны. Вы очевидно хотите аппелировать к своему десятилетнему опыту... мой опыт работы с БД примерно в два раза больше. А Ваше смягчение позиции может свидетельствовать как о раздумиях, так и о неумении размышлять.

PS. Будем все же говорить по теме или продолжим обсуждать друг друга?
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33044850
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Semaphore
Как же выходит за пределы ФЗ? Пожалуста все то же формально: есть две ФЗ вытекающие из ПО: П->О и ДО->П. Они порождают остальные с помощью аксим вывода Амстронга. Все остальное в моем примере просто интерпритация этих формальностей для наглядности. Потому что моей целью было ответить на вопроос и тем кто не изучал теорию рел БД про нормальные формы и огр целостности.

Что касается "только один", то это входит в определение ФЗ. Это и есть обеспечение однозначного определения атрибута в моем примере: пара ДО однозначно благодаря этому опрделяет П. Или Вы думаете нет?

PS
Хочу обратить Ваше внимание на то что книга Э. Озкарахан "Машины баз данных", М.Мир, 1989 (а она сейчас передо мной) не претендует на изложение теории рел баз данных - у нее другая цель: машины БД. От этого определения которые там есть недостаточно формально строги, и допучскают видимо Вам истолковать их как-то по своему. Я, однако, ввел "количественную характеристику" именно ради однозначного определения атрибута. Так чтобы у меня была именно функцианальная зависмость, т.е. чтобы, выражаясь Вашим языком, попасть в пределы ФЗ.
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33045923
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SemaphoreОдин умный человек сказал, что "нет ничего практичнее хорошей теории". Правда, чтобы понять это надо хотя бы знать теорию...
Отрадно, что хотя бы в чужих словах Вы не ошибаетесь.

Semaphore softwarerЛет десять назад я как и Вы полагал, что serializable - единственный нормальный режим работы БД. Потом я смягчил свою позицию - и не вижу причин возвращаться в те времена.
Ваши догадки обо мне не очень уместны. Вы очевидно хотите аппелировать к своему десятилетнему опыту...
Отнюдь. Я апеллирую к возрасту, когда придерживался столь категоричного подхода. Апеллировать к опыту - совершенно бессмысленно во флеймовой дискуссии. Помимо прочего, существует одна из любимых мной фраз:

- Мудрость не всегда приходит с возрастом. Бывает, что возраст приходит один.

SemaphorePS. Будем все же говорить по теме или продолжим обсуждать друг друга?
Простите, и что Вы теперь называете темой? Мне так казалось, что оной является флейм на тему "Нормализация forever и никаких гвоздей".
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33046336
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfoТ.е. S1 это не Д -> П, а именно ДO -> П.

На самом деле, когда говорят ( используя ER методологию) "O становится частью первичного ключа П " , то это означает, что ФЗ П->О упраздняется.
Здесь конечно следовало бы оговорить где П сущность, а где атрибут типа :
П(П#, O#) , O(O#).

После упразднения ФЗ задачка естественно вырождается, остается только
Д->ПО на что видимо Urri и намекал.
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33046409
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ModelR
На самом деле, когда говорят ( используя ER методологию) "O становится частью первичного ключа П " , то это означает, что ФЗ П->О упраздняется.
Здесь конечно следовало бы оговорить где П сущность, а где атрибут типа :
П(П#, O#) , O(O#).

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


ModelR
После упразднения ФЗ задачка естественно вырождается, остается только
Д->ПО на что видимо Urri и намекал.

К срожалению, ФЗ не склонны к упраздению. Склонны к пораждению новых. Задачка вроде не вырождалась ни естественно, ни противоестественно.

Я не уверен Вы про ту задачку говорите: есть три атрибута Д, О, П
Есть две ФЗ: ДО->П и П->О.

Построить схему в НФБК, чтобы она полностью характеризовала эти ФЗ, т.е. их можно было навязать с поммощью объявления ключей (не важно первичных альтернативных).

Я утверждаю, что этого нельзя сделать. Потому что если есть в схеме отношение R(Д,О,П) - то схема не в НФБК, а если этого отношения нет, то нельзя навязать ДО->П, (не навязывая ФЗ, которых нет типа Д->П).

Вы утверждаете обратное? Приведите схему.

Вывод: нормализация выше 3НФ имеет проблемы с ограничениями целостности.
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33046677
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfo ModelR
На самом деле, когда говорят ( используя ER методологию) "O становится частью первичного ключа П " , то это означает, что ФЗ П->О упраздняется.
Здесь конечно следовало бы оговорить где П сущность, а где атрибут типа :
П(П#, O#) , O(O#).

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

Ну, единственно просил бы пояснить термин "первичный атрибут".
vadiminfo ModelR
После упразднения ФЗ задачка естественно вырождается, остается только
Д->ПО на что видимо Urri и намекал.

К срожалению, ФЗ не склонны к упраздению. Склонны к пораждению новых. Задачка вроде не вырождалась ни естественно, ни противоестественно.

Иногда вместо того чтобы решать задачу полезно подумать над ее переформулировкой. Такова была мысль.
vadiminfo
Вывод: нормализация выше 3НФ имеет проблемы с ограничениями целостности.
Ни с этим утверждением, ни с Дейтом (см.седьмое издание, стр.447: " попытка достижения двух целей , а именно - декомпозиции исходной переменной-отношения на переменные-отношения, находящиеся в НФБК, и декомпозиции исходной переменной-отношения на независимые переменные-отношения, в некоторых случаях может привести к конфликтной ситуации" ) никто спорить и не собирался.
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33046887
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ModelR
Ну, единственно просил бы пояснить термин "первичный атрибут".

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

ModelR
Ни с этим утверждением, ни с Дейтом (см.седьмое издание, стр.447: " попытка достижения двух целей , а именно - декомпозиции исходной переменной-отношения на переменные-отношения, находящиеся в НФБК, и декомпозиции исходной переменной-отношения на независимые переменные-отношения, в некоторых случаях может привести к конфликтной ситуации" ) никто спорить и не собирался.


Однако, ранее , когда высказывались плюсы нормализации в теме было сделано предположение, которое я хотел уточнить этим примером.
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33048105
Фотография SanyL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2SanyL. Вы бы матчасть поучили, что ли. Особенно меня убили сведения, что нормализованые данные близки к реляционной теории. Реляционной теории это пофиг. Нормализация - это способ без дополнительных затрат получить целостность и непротиворечивость данных.

Денормализация предполагает, что для этого нужно задействовать дополнительные механизмы поддержки целостности и непротиворечивости. Реализовать их можно по разному: тригерами, хранимыми процедурами, тразакциями с клиента (хотя я и ярый пртивник этого метода)

Ну раз вы отправляете меня учить мат часть - то пожалуй стоит вам напомнить про нормальные формы БД... Я думаю что вы человек взрослый и в состоянии сами найти (например на yandex) что такое:
Первая нормальная форма базы данных
Вторая нормальная форма базы данных
Третья нормальная форма базы данных

Отсюда и вытекло мое, несколько кривое высказывание - за которое многие постарались зацепиться = хотя смысл его наверное поняли тоже...
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33048478
werwerer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SanyL
Отсюда и вытекло мое, несколько кривое высказывание - за которое многие постарались зацепиться = хотя смысл его наверное поняли тоже...

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

не хотите попробовать нормализовать собственные высказывания? по крайней мере до 1НФ...
...
Рейтинг: 0 / 0
Насколько действительно полезна нормализация?
    #33049793
Фотография SanyL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
werwerer
практикующие разработчики, уверенно могу сказать, сейчас ржут над фразой ...хотя смысл его наверное поняли тоже...


Над чем? У вас в речи ляпов не бывает? Причем ляп не связанный со знаниями - а именно речевой! У вас видимо несколько больное чувство юмора...

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


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