Проверка нормализации схемы базы данных?
Мне интересно узнать об инструментах, которые работают так:
Учитывая схему базы данных и некоторые данные, предположите, структурирована ли схема в какой-либо конкретной нормальной форме, а затем расскажите, как схема может быть учтена для дальнейшей нормализации.
По сути, инструмент статического анализа для проектирования схемы базы данных.
Как и другие инструменты статического анализа, такой инструмент базы данных не должен генерировать идеальные результаты (я сомневаюсь, что такой "идеальный" инструмент выполним в вычислительном отношении), или применим ко всем системам баз данных, или к бесплатному / открытому исходному коду, или к чему-либо еще. Инструмент не должен быть автономным; это может быть связано как некоторая сложная особенность IDE. Мне просто интересно, что там.
6 ответов
Это можно сделать, и есть по крайней мере 2 коммерчески доступных инструмента, которые могут сделать нормализацию для вас: GeneXus и DeKlarit. Они используют процесс с именем http://c2.com/cgi/wiki?NormalizationBySynthesis
Такой инструмент, как вы описываете, который пытался проанализировать ваши данные и метаданные и сообщить вам о возможной ненормализованной структуре, так часто давал бы неверные предложения, что это делало бы Clippy, помощника Microsoft, незаменимым помощником писателя.
Процесс нормализации включает отображение требований к программному обеспечению в логическую модель данных. Инструмент анализа не может знать ваши требования к данным лучше, чем вы. Таким образом, из неправильного дизайна базы данных невозможно определить, какие его части неправильны.
Я понимаю, что вы уточнили вопрос, и у вас ограниченные ожидания в отношении возможностей инструмента. Но вы бы хотели, чтобы это было полезно для обычных повседневных задач - но оно не будет надежным даже для самых простых случаев.
Сравните с инструментами статического анализа кода. Предположим, вы пишете приложение и доставляете его своему клиенту, а клиент говорит: "Почему я не могу отправить электронное письмо из этого приложения?" Как инструмент статического анализа кода скажет вам, что вы пропустили желаемую функцию? Он не может знать эти требования.
Аналогично, как инструмент анализа нормализации базы данных узнает, подходит ли он для UserAccount
стол, чтобы иметь один MobilePhoneNumber
атрибут, или если было бы более целесообразно разделить телефонные номера в другую таблицу, чтобы у одного пользователя могло быть несколько телефонов в списке?
Я тоже думал об этой проблеме. Это теоретически возможно, и есть несколько исследовательских работ на эту тему. Раньше на сайте www.dbtools.cs.cornell.edu был довольно крутой инструмент. Это было разработано известным автором Raghu Ramakrishnan. В настоящее время он работает в Yahoo Research. Вы можете обратиться к следующим документам для получения дополнительной информации
- Дидерий, Т. и Miton,J.,(1988),"Новые методы и быстрые алгоритмы для нормализации базы данных", Транзакции ACM в системах баз данных, 13(3),339-365.
- Бернштейн, Пенсильвания (1986),"Синтез отношений третьей нормальной формы из функциональных зависимостей", Транзакции ACM в системах баз данных, том 1. № 4, с. 277-298.
- JMathNorm: инструмент нормализации базы данных с использованием Mathematica, лекционные заметки в области компьютерных наук; Том 4488, Труды 7-й международной конференции по вычислительной науке, часть II, Али Язычи, Зия Каракая
Третья ссылка очень интересная. Вот реферат статьи:
Эта статья посвящена разработке полного интерактивного инструмента под названием JMathNorm для нормализации реляционных баз данных (RDB) с использованием Mathematica. Это расширение прототипа, разработанного теми же авторами [1] с включением второй нормальной формы (2NF) и нормальной формы Бойса-Кодда (BCNF) в дополнение к существующему модулю третьей нормальной формы (3NF). Инструмент, разработанный в этом исследовании, является полным и может использоваться для проектирования баз данных в реальном времени, а также для помощи в обучении фундаментальным концепциям нормализации БД для студентов с ограниченным математическим образованием. JMathNorm также поддерживает интерактивное использование модулей для эксперимента с основными операциями над наборами, такими как замыкание и полное закрытие, вместе с модулями, чтобы получить минимальное покрытие функционального набора зависимостей и проверить атрибут для ключа-кандидата. Графический интерфейс JMathNorm написан на Java и использует возможности Mathematica JLink для управления ядром Mathematica.
Я также очень заинтересован в ответе на этот вопрос. Если кто-нибудь сталкивался с инструментом, пожалуйста, сообщите нам об этом!
Инструмент с открытым исходным кодом SchemaSpy обнаруживает некоторые "аномалии", такие как "Таблицы без индексов" или "Столбцы, которые помечены как" обнуляемые "и" должны быть уникальными "". Одной из таких аномалий является "Таблицы с увеличивающимися именами столбцов, потенциально указывающими на денормализацию"
Я думаю, что это трудно реализовать.
Мол, стол
Id | Name | Surname | SSN
находится в 1NF, и
Id | Name | Surname | Mobile
нет, но вы можете сказать это ни по дизайну, ни по данным, только по названию поля.
Я однажды видел базу данных для УЗИ, которая на самом деле имела GENDER
а также LMP
(последний менструальный период) в одной таблице.
Это не может быть сделано.
Нормализация определяется в терминах функциональных зависимостей, которые
- Не может быть выражено в SQL
- Не может быть выведено из данных
Вы можете посмотреть на таблицу, такую как
A | B
--+--
1 | 1
1 | 2
и сделать вывод, что B не зависит от A (поскольку у него есть два разных значения для одного значения A), но вы никогда не сможете сделать вывод, что зависимость существует, например, A может зависеть или не зависеть от B.