Проверка нормализации схемы базы данных?
Мне интересно узнать об инструментах, которые работают следующим образом:
учитывая схему базы данных и некоторые данные, предложите, вероятно ли, что схема структурирована в какой-либо конкретной нормальной форме, а затем расскажите, как схема может быть учтена для дальнейшей нормализации.
в основном, инструмент статического анализа для проектирования схемы базы данных.
Как и другие инструменты статического анализа, такой инструмент базы данных не должен генерировать идеальные результаты (я сомневаюсь в таком "идеальный" инструмент вычислительно осуществим), или применим ко всем системам баз данных, или свободный / открытый исходный код, или что-нибудь еще. Инструмент не должен быть автономным; он может быть в комплекте как некоторая сложная функция IDE. Мне просто интересно, что там.
6 ответов
Это можно сделать, и есть по крайней мере 2 commecially доступных инструмента, которые могут сделать нормализацию для вас: GeneXus и DeKlarit. Они используют процесс с именем NormalizationBySynthesis
инструмент, как вы описываете, который пытался проанализировать ваши данные и метаданные и посоветовать вам возможно ненормализованная структура, даст неправильные предложения так часто, что это заставило бы Клиппи, помощник Microsoft, казаться незаменимым помощником писателя.
процесс нормализации включает в себя сопоставление программных требований к логической модели данных. Инструмент анализа не может знать ваши требования к данным лучше, чем ты. Поэтому он не может вывести из неправильного дизайна базы данных, какие части его неправильны.
Я понимаю, что вы квалифицировали вопрос, и у вас есть ограниченные ожидания для возможностей инструмента. Но вы хотели бы, чтобы он был полезен для обычных, повседневных задач-но он не был бы надежным даже для самых простых случаев.
сравнить со статическими инструментами анализа кода. Предположим, вы пишете заявление и доставляете его клиенту, а клиент говорит: "почему я не могу отправить письмо из этого приложения?"Как статический инструмент анализа кода скажет вам, что вы опустили желаемую функцию? Он не может знать этих требований.
аналогично, как бы инструмент анализа нормализации базы данных знал, подходит ли он для UserAccount
таблица, чтобы иметь один MobilePhoneNumber
атрибут, или если было бы более уместно разделить номера телефонов в другую таблицу, чтобы один пользователь мог иметь несколько телефонов в списке?
Я тоже думал об этой проблеме. Теоретически это возможно, и на эту тему есть несколько научных работ. раньше был довольно классный инструмент www.dbtools.cs.cornell.edu - ... Это было разработано известным автором Рагху Рамакришнаном. В настоящее время он работает в Yahoo Research. Вы можете обратиться к следующим документам для получения дополнительной информации
- Diederich, T. и Miton, J., (1988), "новые методы и быстрые алгоритмы нормализации базы данных", ACM-транзакции на Database Systems, 13 (3),339-365.
- Bernstein, P. A. (1986),"синтез отношений третьей нормальной формы из функциональных зависимостей", ACM Transactions on Database Systems, Vol.1. Г. № 4, стр. 277-298.
- JMathNorm: Инструмент Нормализации Базы Данных С Использованием Mathematica, Lecture Notes In Computer Science; Vol. 4488, труды 7-й Международной конференции по вычислительной науке, Часть II, Али Язычи, Зия Каракая
третья ссылка очень интересный. Вот резюме статьи:
эта статья посвящена разработке полный интерактивный инструмент, названный JMathNorm, для реляционной базы данных (RDB) нормализация с использованием Mathematica. Это расширение прототипа разработанная теми же авторами [1] с включение второй нормальной формы (2NF), и Boyce-Codd нормальная форма (BCNF) в дополнение к существующим Третий нормальный модуль формы (3NF). Этот инструмент, разработанный в этом исследовании полный и может использоваться в режиме реального времени проектирования баз данных, а также помощь в обучение фундаментальным понятиям БД нормализация для студентов с ограниченными возможностями математический фон. JMathNorm также поддерживает интерактивное использование модули для экспериментирования основные операции набора, такие как закрытие и полное закрытие вместе с модулями для того чтобы получить минимальное покрытие набора функциональных зависимостей и тестирование атрибут для потенциальный ключ. Графический интерфейс JMathNorm интерфейс написан на Java и использует средство jlink Mathematica чтобы управлять ядром Mathematica.
меня тоже очень интересует ответ на этот вопрос. Если кто-то наткнулся на инструмент, пожалуйста, сообщите нам об этом!
инструмент с открытым исходным кодом SchemaSpy обнаруживает некоторые "аномалии", такие как" таблицы без индексов "или"столбцы, помеченные как "nullable" и "must be unique"". Одной из таких аномалий является "таблицы с увеличивающимися именами столбцов, потенциально указывающие на денормализацию"
Я думаю, что это трудно реализовать.
например, стол
Id | Name | Surname | SSN
находится в 1NF, и
Id | Name | Surname | Mobile
нет, но вы можете сказать это ни из дизайна, ни из данных, только из имени Поля.
Я видел однажды базу данных для ультрасонографии, которая на самом деле имела оба GENDER
и LMP
(последний менструальный период) в одной таблице.
это невозможно сделать.
нормализация определяется в терминах функциональных зависимостей, который
- не может быть выражено в SQL
- невозможно вывести из данных
вы можете посмотреть таблицу, такую как
A | B
--+--
1 | 1
1 | 2
и вывести, что B не зависит от A (потому что он имеет два разных значения для одного значения A), но вы никогда не можете вывести, что зависимость тут существуют, например, A может зависеть или не зависеть от B.