Мифология
Я всегда думал, что базы данных должны быть денормализованы для чтения, как это делается для проектирования баз данных OLAP, и не сильно преувеличивал 3NF для разработки OLTP.
Есть миф на этот счет. В контексте реляционной базы данных я повторно реализовал шесть очень больших так называемых «ненормализованных» «баз данных»; и выполнил более восьмидесяти заданий, исправляя проблемы других, просто нормализуя их, применяя стандарты и инженерные принципы. Я никогда не видел никаких доказательств мифа. Только люди повторяют мантру, как будто это какая-то магическая молитва.
Нормализация против ненормализованных
(«Денормализация» - это мошеннический термин, которым я отказываюсь его использовать.)
Это научная индустрия (по крайней мере, та, которая поставляет программное обеспечение, которое не ломается; оно отправляет людей на Луну; оно управляет банковскими системами и т. Д.). Это регулируется законами физики, а не магии. Компьютеры и программное обеспечение - это конечные, материальные, физические объекты, подчиняющиеся законам физики. По среднему и высшему образованию я получил:
более крупный, более толстый, менее организованный объект не может работать лучше, чем более мелкий, более тонкий и более организованный объект.
Нормализация дает больше таблиц, да, но каждая таблица намного меньше. И хотя таблиц больше, на самом деле (а) меньше соединений и (б) соединения быстрее, потому что наборы меньше. В целом требуется меньше индексов, потому что для каждой таблицы меньшего размера требуется меньше индексов. Нормализованные таблицы также дают значительно более короткие размеры строк.
для любого заданного набора ресурсов, Нормализованные таблицы:
- поместите больше строк в один и тот же размер страницы
- поэтому поместите больше строк в одно и то же пространство кеша, поэтому общая пропускная способность увеличится)
- поэтому поместите больше строк в одно и то же дисковое пространство, поэтому количество операций ввода-вывода уменьшится; и когда требуется ввод / вывод, каждый ввод / вывод более эффективен.
,
- невозможно, чтобы объект, который сильно дублирован, работал лучше, чем объект, который хранится как единая версия истины. Например. когда я удалил 5-кратное дублирование на уровне таблицы и столбца, все транзакции были уменьшены в размере; блокировка уменьшена; Аномалии обновления исчезли. Это существенно уменьшило конкуренцию и, следовательно, увеличило одновременное использование.
Таким образом, общий результат был намного выше производительности.
По моему опыту, который доставляет и OLTP, и OLAP из одной и той же базы данных, никогда не было необходимости "нормализовать" мои нормализованные структуры, чтобы получить более высокую скорость запросов только для чтения (OLAP). Это тоже миф.
- Нет, "ненормализация", запрошенная другими, снизила скорость, и она была устранена. Не удивительно для меня, но опять же, заявители были удивлены.
Многие книги написаны людьми, продающими миф. Нужно признать, что это не технические люди; так как они продают магию, магия, которую они продают, не имеет научной основы, и они удобно избегают законов физики в своей сфере продаж.
(Для тех, кто желает оспорить вышеупомянутую физическую науку, простое повторение мантры не будет иметь никакого эффекта, пожалуйста, предоставьте конкретные доказательства в поддержку мантры.)
Почему миф превалирует?
Ну, во-первых, это не распространено среди научных типов, которые не ищут пути преодоления законов физики.
Исходя из своего опыта, я определил три основные причины распространенности:
Для тех людей, которые не могут нормализовать свои данные, это удобное оправдание для того, чтобы этого не делать. Они могут ссылаться на магическую книгу и без каких-либо доказательств магии, они могут благоговейно сказать «увидеть, как известный писатель подтверждает то, что я сделал». Не выполнено, наиболее точно.
Многие кодеры SQL могут писать только простой одноуровневый SQL. Нормализованные структуры требуют немного возможностей SQL. Если у них нет этого; если они не могут производить SELECT без использования временных таблиц; если они не могут писать подзапросы, они будут психологически приклеены к бедру к плоским файлам (что и есть «ненормализованные» структуры), которые они могут обработать.
Люди любят читать книги и обсуждать теории. Без опыта. Особенно повторная магия. Это тоник, заменитель реального опыта. Любой, кто действительно нормализовал базу данных правильно, никогда не заявлял, что «нормализация происходит быстрее, чем нормализация». Любому, кто произносит мантру, я просто говорю «покажи мне доказательства», а они никогда не давали никаких доказательств. Таким образом, в действительности люди повторяют мифологию по этим причинам без какого-либо опыта нормализации . Мы стадные животные, а неизвестность - один из наших самых больших страхов.
Именно поэтому я всегда включаю «продвинутый» SQL и наставничество в любой проект.
Мой ответ
Этот ответ будет до смешного длинным, если я отвечу на каждую часть вашего вопроса или если я отвечу на неправильные элементы в некоторых других ответах. Например. Выше ответили только на один пункт. Поэтому я отвечу на ваш вопрос в целом, не обращаясь к конкретным компонентам, и использую другой подход. Я буду заниматься только наукой, связанной с вашим вопросом, в которой я квалифицирован и очень опытен.
Позвольте мне представить вам науку в управляемых сегментах.
Типичная модель из шести крупномасштабных полномасштабных заданий.
- Это были закрытые «базы данных», обычно встречающиеся в небольших фирмах, а организации были крупными банками
- очень хорошо для первого поколения, настроенного на работу с приложением, но полный провал с точки зрения производительности, целостности и качества
- они были разработаны для каждого приложения, отдельно
- отчетность не была возможна, они могли сообщать только через каждое приложение
- , так как «ненормализованный» - это миф, точное техническое определение состоит в том, что они были ненормализованными
- Чтобы «нормализовать», нужно сначала нормализоваться; затем немного изменить процесс
во всех случаях, когда люди показывали мне свои «ненормализованные» модели данных, простой факт заключался в том, что они вообще не нормализовались; таким образом, «нормализация» была невозможна; это было просто ненормализовано
- поскольку у них не было особой реляционной технологии или структур и управления базами данных, но они выдавались за «базы данных», я поместил эти слова в кавычки
- как с научной точки зрения гарантировано для ненормализованных структур, они претерпели множество версий истины (дублирование данных) и, следовательно, высокий уровень конкуренции и низкий параллелизм, в каждой из них
- у них была дополнительная проблема дублирования данных в «базах данных»
- организация пыталась синхронизировать все эти дубликаты, поэтому они внедрили репликацию; что, конечно, означало дополнительный сервер; ETL и синхронизирующие сценарии, которые будут разработаны; и поддерживается; и т.д.
- Излишне говорить, что синхронизации никогда не было достаточно, и они постоянно меняли ее
- со всем этим конфликтом и низкой пропускной способностью, не было никаких проблем с оправданием отдельного сервера для каждой "базы данных". Это не очень помогло.
Итак, мы рассмотрели законы физики и применили немного науки.
Мы внедрили стандартную концепцию, согласно которой данные принадлежат корпорации (а не отделам), и корпорация хотела иметь одну версию правды.База данных была чисто реляционной, нормализованной до 5NF.Чистая открытая архитектура, так что любое приложение или инструмент отчета может получить к ней доступ.Все транзакции в хранимых процессах (в отличие от неконтролируемых строк SQL по всей сети).Те же разработчики для каждого приложения кодировали новые приложения после нашего «продвинутого» образования.
Очевидно, наука работала.Ну, это была не моя личная наука или магия, это была обычная инженерия и законы физики.Все это работало на одной платформе сервера баз данных;две пары (производство и DR) серверов были выведены из эксплуатации и переданы другому отделу.5 «баз данных» общим объемом 720 ГБ были нормализованы в одну базу данных общим объемом 450 ГБ.Около 700 таблиц (много дубликатов и дублированных столбцов) были нормализованы в 500 не дублированных таблиц.Он работал намного быстрее, в общем, в 10 раз быстрее, а в некоторых функциях более чем в 100 раз.Это не удивило меня, потому что это было моим намерением, и наука предсказала это, но это удивило людей мантрой.
Больше нормализации
Ну, имеябыл успешным с нормализацией в каждом проекте, и уверенность в соответствующей науке, это было естественное продвижение к нормализации больше , а не меньше.В старые времена 3NF был достаточно хорош, а более поздние NF еще не были идентифицированы.За последние 20 лет я поставлял только базы данных с нулевыми аномалиями обновления, так что, судя по сегодняшним определениям NF, я всегда поставлял 5NF.
Аналогично, 5NF великолепен, но у него есть свои ограничения.Например.Поворот больших таблиц (не маленьких наборов результатов согласно расширению MS PIVOT) был медленным.Поэтому я (и другие) разработал способ предоставления нормализованных таблиц, чтобы Pivoting был (а) легким и (б) очень быстрым.Оказывается, теперь, когда определено 6NF, эти таблицы являются 6NF.
Поскольку я предоставляю OLAP и OLTP из одной базы данных, я обнаружил, что в соответствии с наукой, чем более нормализованы структуры:
Так что да, у меня есть постоянный и неизменный опыт, который не толькоНормализуется намного, намного быстрее, чем ненормализованный или «ненормализованный»; больше Нормализовано даже быстрее, чем меньше Нормализовано.
Одним из признаков успеха является рост функциональности (признаком неудачи является увеличение размера без роста функциональности).Это означало, что они немедленно запросили у нас дополнительные функции отчетности, что означало, что мы нормализовали еще больше , и предоставили больше этих специализированных таблиц (которые, спустя годы, стали 6NF).
Прогрессна эту тему.Я всегда был специалистом по базам данных, а не специалистом по хранилищу данных, поэтому мои первые несколько проектов со складами были не полноценными реализациями, а скорее существенными заданиями по настройке производительности.Они были в моей сфере, на продуктах, на которых я специализировался.
Давайте не будем беспокоиться о точном уровне нормализации и т. Д., Потому что мы смотрим на типичный случай.Мы можем считать, что база данных OLTP была достаточно нормализована, но не поддерживала OLAP, и организация приобрела совершенно отдельную платформу OLAP, аппаратное обеспечение;инвестировал в разработку и поддержку массы кода ETL;и т.д. И после внедрения потратил половину своей жизни на управление созданными ими дубликатами.Здесь нужно обвинять авторов книг и поставщиков за огромную трату аппаратного обеспечения и отдельных лицензий на программное обеспечение платформы, которые они заставляют организации покупать.
- Если вы еще этого не наблюдали, я бы попросил вас обратить внимание на сходство между Типовой базой данных первого поколения и Типичным хранилищем данных
Тем временем, возвращаясь на ферму (базы данных 5NF выше), мы просто продолжали добавлять все больше и больше функций OLAP. Конечно, функциональность приложения выросла, но это было мало, бизнес не изменился. Они попросили бы больше 6NF, и это было легко обеспечить (5NF к 6NF - маленький шаг; 0NF к чему-либо, не говоря уже о 5NF, - большой шаг; организованную архитектуру легко расширить).
Одним из основных отличий между OLTP и OLAP, основным обоснованием отдельного программного обеспечения для платформы OLAP, является то, что OLTP ориентирован на строки, ему нужны транзакционно-защищенные строки и скорость; и OLAP не заботится о транзакционных проблемах, ему нужны столбцы и быстро. По этой причине все высокопроизводительные платформы BI или OLAP ориентированы на столбцы, и поэтому модели OLAP (схема звездообразного типа, факт-размер) ориентированы на столбцы.
Но с таблицами 6NF:
нет строк, только столбцы; мы обслуживаем строки и столбцы с одинаковой скоростью ослепления
таблицы (т. Е. Представление 5NF структур 6NF) уже организованы в Факты измерений. Фактически они организованы в большее количество измерений, чем когда-либо идентифицировала бы любая модель OLAP, потому что они все измерения.
Поворот целых таблиц с агрегацией на лету (в отличие от PIVOT небольшого числа производных столбцов) - это (а) простой код и (б) очень быстрый
По определению мы поставляем в течение многих лет реляционные базы данных с минимальной 5NF для использования OLTP и 6NF для требований OLAP.
Обратите внимание, что это та же самая наука, которую мы использовали с самого начала; перейти от Типичные ненормализованные «базы данных» к 5NF Корпоративная база данных . Мы просто применяем больше проверенной науки и получаем более высокие порядки функциональности и производительности.
Обратите внимание на сходство между 5NF Корпоративная база данных и 6NF Корпоративная база данных
Вся стоимость отдельного аппаратного обеспечения OLAP, программного обеспечения платформы, ETL, администрирования, обслуживания исключена.
Существует только одна версия данных, без аномалий обновления или их обслуживания; одни и те же данные обслуживаются для OLTP в виде строк и для OLAP в виде столбцов
Единственное, что мы не сделали, - это начали новый проект и объявили чистый 6NF с самого начала. Это то, что я выстроил рядом.
Что такое шестая нормальная форма?
Предполагая, что у вас есть дескриптор по нормализации (я не буду здесь его определять), неакадемические определения, относящиеся к этой теме, следующие. Обратите внимание, что он применяется на уровне таблиц, поэтому в одной базе данных может быть сочетание таблиц 5NF и 6NF:
- Пятая нормальная форма : все функциональные зависимости разрешены в базе данных
- в дополнение к 4NF / BCNF
- каждый столбец без PK равен 1 :: 1 со своим PK
- и никакому другому ПК
- Нет обновлений Аномалии
,
- Шестая нормальная форма : это неприводимая NF, точка, в которой данные не могут быть дополнительно уменьшены или нормализованы (не будет 7NF)
- в дополнение к 5NF
- строка состоит из первичного ключа и не более одного неключевого столбца
- устраняет нулевую проблему
Как выглядит 6NF?
Модели данных принадлежат клиентам, и наша интеллектуальная собственность не доступна для бесплатной публикации.Но я посещаю этот сайт и даю конкретные ответы на вопросы.Вам нужен пример из реальной жизни, поэтому я опубликую модель данных для одной из наших внутренних утилит.
Он предназначен для сбора данных мониторинга сервера (сервер базы данных корпоративного класса и ОС) для любого из клиентов за любой период.Мы используем это для удаленного анализа проблем с производительностью и проверки любых настроек производительности, которые мы делаем.Структура не изменилась за более чем десять лет (добавлено, без изменений к существующим структурам), это типично для специализированного 5NF, который много лет спустя был идентифицирован как 6NF.Позволяет полный поворот;любой график или график, который будет нарисован в любом измерении (предусмотрено 22 опорных точки, но это не предел);ломтик и кости;смешивать и сочетать.Обратите внимание, что они все Размеры.
Данные мониторинга или метрики или векторы могут изменяться (изменяется версия сервера; мы хотим получить что-то большее), не влияя на модель (вы можете вспомнить в другом посте, который я заявил, что EAV - ублюдок 6NF;это полный 6NF, неразлучный отец, и, следовательно, обеспечивает все функции EAV, не жертвуя какими-либо стандартами, целостностью или относительной силой);Вы просто добавляете строки.
▶ Модель статистических данных монитора ◀ .(слишком большой для встроенного; некоторые браузеры не могут загружать встроенный; нажмите на ссылку)
Это позволяет мне создавать эти ▶ диаграммы, подобные этим ◀ , шесть нажатий клавиш после получениянеобработанный файл статистики мониторинга от клиента.Обратите внимание на сочетание и совпадение;ОС и сервер на одном графике;множество пивотов.(Используется с разрешения.)
Читатели, незнакомые со Стандартом моделирования реляционных баз данных, могут найти ▶ IDEF1X нотации ◀ полезными.
6NF Хранилище данных
Это было недавно подтверждено Anchor Modeling , так как теперь они представляют 6NF в качестве модели OLAP «следующего поколения» для хранилищ данных.(Они не предоставляют OLTP и OLAP из единой версии данных, то есть только для нас).
Хранилище данных (только) Опыт
Мой опыт работы сТолько хранилища данных (не упомянутые выше базы данных 6NF OLTP-OLAP) - это несколько важных заданий, в отличие от проектов полной реализации.Результаты не были удивительными:
в соответствии с наукой, нормализованные структуры работают намного быстрее;легче поддерживать;и требуют меньше синхронизации данных.Инмон, а не Кимбалл.
в соответствии с магией, после того как я нормализую группу столов и обеспечу существенно улучшенную производительность благодаря применению законов физики, единственные люди удивлены магамис их мантрами.
Научно мыслящие люди не делают этого;они не верят и не полагаются на серебряные пули и магию;они используют науку и усердно трудятся для решения своих проблем.
Обоснованное обоснование хранилища данных
Именно поэтому я указал в других постах единственное действительное обоснование для отдельной платформы хранилища данных, аппаратного обеспечения, ETL, обслуживания и т. Д., Когда существует множество баз данных или «баз данных», все из которых объединяются в центральное хранилище для отчетов и OLAP.
Кимбалл
Необходимо немного рассказать о Кимбалле, поскольку он является основным сторонником "ненормализованной производительности" в хранилищах данных.Согласно моим определениям выше, он один из тех людей, у которых очевидно никогда не нормализовалось в их жизни;его отправная точка была ненормализована (закамуфлирована как «ненормализованная»), и он просто реализовал это в модели измерения факта.
Конечно, чтобы получить какую-либо производительность, ему пришлось еще больше «нормализовать», создать дополнительные дубликаты и все это оправдать.
Таким образом, с шизофренической точки зрения верно то, что «ненормализованные» ненормализованные структуры путем создания более специализированных копий «улучшают производительность чтения». Это не правда, когда целое принимает во внимание; это верно только внутри этого маленького убежища, а не снаружи.
Точно так же сумасшедшим образом верно то, что, где все "столы" являются монстрами, эти "соединения дорогие" и чего-то, чего следует избегать. У них никогда не было опыта объединения меньших таблиц и наборов, поэтому они не могут поверить научному факту, что большие меньшие таблицы быстрее.
у них есть опыт, что создание дубликатов "таблиц" происходит быстрее, поэтому они не могут поверить, что удаление дубликатов происходит даже быстрее, чем
его Размеры добавлены к ненормализованным данным. Ну, данные не нормализованы, поэтому никакие размеры не выставляются. Принимая во внимание, что в нормализованной модели измерения уже представлены, как неотъемлемая часть данных, добавление не требуется.
этот хорошо проложенный путь Кимбалла ведет к утесу, где больше леммингов падает быстрее. Лемминги являются стадными животными, пока они идут по пути вместе и умирают вместе, они умирают счастливыми. Лемминги не ищут других путей.
Все просто истории, части одной мифологии, которые тусуются вместе и поддерживают друг друга.
Ваша миссия
Если вы решите принять это. Я прошу вас думать самим и перестать развлекать любые мысли, которые противоречат науке и законам физики. Неважно, насколько они распространены, мистические или мифологические. Ищите доказательства чего-либо, прежде чем доверять этому. Будьте научны, проверяйте новые убеждения для себя. Повторение мантры «Денормализовано для производительности» не сделает вашу базу данных быстрее, это только заставит вас чувствовать себя лучше. Как толстый ребенок, сидящий в стороне, говорящий себе, что он может бежать быстрее, чем все дети в гонке.
* * 1397
на этом основании, даже концепция "нормализовать для OLTP", но сделать наоборот, "нормализовать для OLAP" является противоречием. Как могут законы физики работать так, как указано на одном компьютере, а на другом - наоборот? Разум поражает. Это просто невозможно, работать одинаково на каждом компьютере.
Вопросы?