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

20

Недавно я узнал о нормализации и понял, насколько это важно при реализации новой схемы.

Как я могу проверить, соответствует ли моя база данных 2NF или 3NF?

Ручной просмотр - верный вариант, но я ищу здесь автоматический инструмент.

Я не ищу инструмент «укажи и щелкни», а скорее что-то, что выделит возможные оптимизации, чтобы сделать таблицу 3NF-совместимой. Я предполагаю, что он может использовать статистику, основанную на хороших выборочных данных и / или семантическом анализе имен столбцов.

ack__
источник
1
Я надеюсь, что такого инструмента не существует. 2NF / 3NF не нужно применять. При разработке схемы / модели часто необходимо учитывать практические аспекты и соображения производительности, которые обычно выбрасывают xNF в окно
Philᵀᴹ
2
Означает ли это, что нормализация не используется в действительности? Я планировал использовать его в качестве отправной точки и рассмотрю вопрос о денормализации, когда это замедляет производительность.
2012 г.
3
Дизайн схемы - это больше искусство, чем наука. Конечно, есть основные правила, которым нужно следовать, но как только вы сделаете это достаточно, вы начнете понимать, что работает, а что нет. Мастерства.
датагод
Я не согласен с Филом. Нормализация иногда путь. В других случаях схема звезды лучше. Это зависит от того, что вы делаете. Вам понадобится очень много таблиц, прежде чем автоматизация будет оправдана.
Уолтер Митти,

Ответы:

24

Нормализация абсолютно используется в реальном мире ... и, надеюсь, вы знаете, что 3NF - это только третье из ... чего сейчас, 8? Но 3NF должна быть легкой целью.

Однако ... Рискну сказать, что такого инструмента не может быть.

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

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

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

Таким образом, требуется понимание фактических фактов ... что выходит за рамки автоматизированных инструментов.

Q: Is a table with { student, subject, instructor } in 3NF?
A: What are students, subjects and instructors?

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

Чтобы понять, чего нет в 3NF, необходимо понять природу фактов, которые он представляет. В нашей реальности эта таблица не будет 3NF, так как (среди прочих причин) предмет и преподаватель связаны друг с другом способами, которые не имеют никакого отношения к ученику. Если у нас есть курсы, где преподаватели преподают предметы, хранящиеся в других местах нашей базы данных, почему бы нам скопировать здесь оба значения вместо внешнего ключа из другой таблицы, указывающего, что студент записан на курс? Если инструктора заменяют, мы должны изменить несколько записей в нескольких местах.

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

Несмотря на то, что я не вижу с глазу на глаз все, что он пишет, я бы порекомендовал книгу Криса Дейта « Проектирование баз данных и теория отношений: нормальные формы и все такое джаз», в которой подробно описывается основная теория реляционной модели.

Майкл - sqlbot
источник
2
Спасибо за этот подробный ответ. Однако, следуя вашему примеру, инструмент, который анализирует данные выборки, должен иметь возможность обнаруживать, что значения «инструктора» многократно повторяются, а также появляется в другой таблице, что предполагает, что он может быть кандидатом на внешний ключ или любое другое изменение, которое сделает эту таблицу совместимой с 3nf, или я что-то упустил?
ack__
2
Правда, но ключевое слово по-прежнему «предлагать». Инструмент мог бы предложить структурные изменения, ища явную избыточность, но я все же утверждал бы, что подлинная избыточность и случайное появление корреляции было бы трудно для такого инструмента различить. Знание реальной природы данных не требуется.
Майкл - sqlbot
@ack__: быть в 3-й нормальной форме или нет - это свойство отношения, а не пары или набора отношений. Поэтому я не вижу, чтобы установление отношения с внешним ключом имело какое-либо отношение к 3-й нормальной форме.
чудо173
Я думаю, что большая проблема заключается в том, что определение функциональных зависимостей из нескольких столбцов является проблематичным. если значения могут быть одинаковыми и, тем не менее, представлять разные объекты (т. е. где используются составные ключи). Рассмотрим таблицу: (address_text, city, state_province, mail_code, country). Теперь это не нормализовано. (город, штат_провинция) -> (страна). Таким образом, чтобы полностью нормализовать, мы должны разбить это по крайней мере на три таблицы, может быть, четыре (обработка mail_code!), Но составные ключи делают это проблематичным для обнаружения на лету. Также комп. ключи являются ключом к идее нф, так что не игнорируйте их!
Крис Треверс
Может ли кто-то объяснить, почему «В мире, где студент может пройти курс только по одному предмету, а все преподаватели преподают все предметы, можно сказать, что эта таблица действительно находится в 3NF». Кажется, это доказывает, что студенты -> предмет и ничего более. Чувствую, что ключ к этой таблице будет (студенты, преподаватели), не сломает ли это 3NF? В чем нам помогает каждый учитель, преподающий каждый предмет?
Дрю Верли
5

Частью использования формальных методов при разработке теории отношений была разработка процедур, которые можно было бы автоматизировать. Я почти уверен, что CJ Date выходит прямо и говорит об этом в своей книге «Введение в системы баз данных» .

Некоторые инструменты CASE, выпущенные в конце 1980-х или начале 1990-х годов, могли получить любую возможную схему 5NF либо путем анализа диаграмм ER, либо путем статистического анализа данных выборки.

Visio Enterprise Architect (я думаю) является относительно новым инструментом в этом направлении.

Майк Шеррилл 'Cat Recall'
источник
Ницца. Я действительно искал оба способа анализа схемы (диаграмма ER и анализ данных образца). Знаете ли вы о каком-либо другом недавнем программном обеспечении, кроме Visio? У меня нет (пока) лицензии на это.
ack__
1
Но ваши ER-диаграммы по сути являются диаграммами объектной модели. Это не совсем то же самое, что взять существующую базу данных и определить, нормализована ли она из нее.
Крис Треверс
2
Анализ таблиц с образцами данных и предложениями по нормализации был функцией Access, и в ранних версиях, если я хорошо помню.
ypercubeᵀᴹ
@Chris: да, я имел в виду диаграммы ER только для семантического анализа.
ack__
@ypercube: Спасибо за совет, я посмотрю на Access.
ack__
2

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

Крис Траверс
источник
В самом деле, будет некоторая ручная проверка, я не ожидаю, что инструмент сделает это полностью автоматически. Но я почти уверен, что большую часть работы можно автоматизировать, анализируя существующие данные в БД (по крайней мере, их образцы) и / или имена / типы полей.
ack__
1
Как? Нормализация определяется на зависимостях соединения и функциональных зависимостях. Функциональная зависимость в основном легко определяется как: для каждого возможного значения суперключа в функциональной зависимости есть ровно одно значение. Вы не можете достичь этого, автоматизировав проверку данных, потому что наличие текущего набора, представляющегося функциональной зависимостью, не означает, что новый ключ будет соответствовать. Это очень похоже на старую корреляцию против причинного разделения. Вы не можете вызвать функциональную зависимость, наблюдая за тем, что в данный момент находится в базе данных.
Крис Треверс
2
по крайней мере, инструмент может предположить, что связь может существовать. если качество и размер выборки данных достаточно велики, точность такого предположения будет достаточно высокой для практических целей.
чудо173
Может быть. Но давайте возьмем реальный пример, который является довольно адским в отношении реляционного дизайна: адреса. Как должны быть нормализованы почтовые адреса? Сколько таблиц следует предложить? В моем понимании 3NF вам нужны таблицы для стран, штатов / провинций и городов. Я не знаю, имеет ли смысл почтовый индекс / разбивка по городам, но они, вероятно, делают. Но как вы анализируете существующие данные и определяете, что (город, штат) -> страна? Как вы определяете, если / если не почтовые индексы глобально относятся к этим конструкциям?
Крис Треверс