Проверка нормализации схемы базы данных? - PullRequest
9 голосов
/ 12 февраля 2009

Мне интересно узнать об инструментах, которые работают следующим образом:

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

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

Как и другие инструменты статического анализа, такой инструмент базы данных не должен генерировать идеальные результаты (я сомневаюсь, что такой «идеальный» инструмент выполним в вычислительном отношении), или применим ко всем системам баз данных, или к бесплатному / открытому исходному коду, или чему-либо еще. Инструмент не должен быть автономным; это может быть связано как некоторая сложная особенность IDE. Мне просто интересно, что там.

Ответы [ 6 ]

6 голосов
/ 25 февраля 2010

Это можно сделать, и есть как минимум 2 коммерчески доступных инструмента, которые могут сделать нормализацию для вас: GeneXus и DeKlarit. Они используют процесс с именем NormalizationBySynthesis

6 голосов
/ 12 февраля 2009

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

enter image description here

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

Я понимаю, что вы уточнили вопрос, и у вас ограниченные ожидания в отношении возможностей инструмента. Но вы бы хотели, чтобы он был полезен для обычных повседневных задач, но он не будет надежным даже для самых простых случаев.

Сравнение с инструментами статического анализа кода. Предположим, вы пишете приложение и доставляете его своему клиенту, а клиент говорит: «Почему я не могу отправить электронное письмо из этого приложения?» Как инструмент статического анализа кода скажет вам, что вы пропустили желаемую функцию? Он не может знать эти требования.

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

3 голосов
/ 28 августа 2009

Я тоже думал об этой проблеме. Это теоретически возможно, и есть несколько исследовательских работ на эту тему. Раньше на сайте www.dbtools.cs.cornell.edu был довольно крутой инструмент. Это было разработано известным автором Raghu Ramakrishnan. В настоящее время он работает в Yahoo Research. Вы можете обратиться к следующим документам для получения дополнительной информации

  1. Дидерий, Т. и Miton, J., (1988), "Новые методы и быстрые алгоритмы для нормализации базы данных", Транзакции ACM в системах баз данных, 13 (3), 339-365.
  2. Бернштейн, П. А. (1986), "Синтез отношений третьей нормальной формы из функциональных зависимостей", Транзакции ACM в системах баз данных, том 1. № 4, с. 277-298.
  3. JMathNorm: инструмент нормализации базы данных с использованием Mathematica, лекционные заметки в области компьютерных наук; Том 4488, Труды 7-й международной конференции по вычислительной науке, часть II, Али Язычи, Зия Каракая

Третья ссылка очень интересная. Вот реферат статьи:

Эта статья о разработке полный интерактивный инструмент, названный JMathNorm, для реляционной базы данных (RDB) нормализация с использованием Mathematica. Это расширение прототипа разработано теми же авторами [1] с включение второй нормальной формы (2NF) и нормальная форма Бойса-Кодда (BCNF) в дополнение к существующим Модуль третьей нормальной формы (3NF). Инструмент, разработанный в этом исследовании полный и может быть использован в режиме реального времени дизайн базы данных, а также помощь в обучение основам БД нормализация для студентов с ограниченными математическое образование JMathNorm также поддерживает интерактивное использование модули для экспериментов фундаментальные операции над множествами, такие как закрытие и полное закрытие вместе с модулями для получения минимального покрытие набора функциональных зависимостей и тестирование атрибута для ключ-кандидат. GUI JMathNorm интерфейс написан на Java и использует возможности Mathematica JLink управлять ядром Mathematica.

Мне также очень интересен ответ на этот вопрос. Если кто-нибудь сталкивался с инструментом, пожалуйста, сообщите нам!

2 голосов
/ 08 июня 2012

Инструмент с открытым исходным кодом SchemaSpy обнаруживает некоторые «аномалии», такие как «Таблицы без индексов» или «Столбцы, помеченные как« обнуляемые »и« должны быть уникальными »». Одной из этих аномалий является "Таблицы с инкрементными именами столбцов, потенциально указывающими на денормализацию"

http://schemaspy.sourceforge.net/

0 голосов
/ 12 февраля 2009

Я думаю, что это трудно реализовать.

лайк, стол

Id | Name | Surname | SSN 

в 1NF и

Id | Name | Surname | Mobile

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

Я однажды видел базу данных для УЗИ, в которой на самом деле были GENDER и LMP (последний менструальный период) в одной таблице.

0 голосов
/ 12 февраля 2009

Это невозможно сделать.

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

  1. Не может быть выражено в SQL
  2. Не может быть выведено из данных

Вы можете посмотреть на таблицу, такую ​​как

A | B
--+--
1 | 1
1 | 2

и сделать вывод, что B не зависит от A (поскольку у него есть два различных значения для одного значения A), но вы никогда не сможете сделать вывод, что зависимость существует например А может зависеть или не зависеть от B.

...