2009-02-12 2 views
9

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

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

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

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

ответ

6

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

0

Это невозможно.

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

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

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

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

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

+0

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

+1

Но если у вас есть таблица с 1 миллионом строк, где B равно 2, когда A равно 1 для 99,9999% строк (возможно, там есть ошибка, и все значения B должны быть 2), а B никогда не является 2 для каких-либо других значение A, вам может понравиться инструмент, который указывает на это, чтобы вы могли его рассмотреть. –

0

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

Как, таблица

Id | Name | Surname | SSN 

в 1NF и

Id | Name | Surname | Mobile 

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

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

+1

Оба примера приведены в 1NF. Вы имеете в виду 2NF? – finnw

+0

Это не просто сложно, это, вероятно, невозможно вычислить. Но вы можете отобразить сканирование, которое определяет, что любая запись, отличная от NULL LMP, скорее всего, будет связана с записью «Female» GENDER (некоторая ошибка ввода данных могла случайно проверить флажок «Мужской»). Подумайте, эвристика здесь ... –

+0

@finnw: можно иметь более одного мобильного номера. Это классический пример из Википедии :) – Quassnoi

6

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

enter image description here

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

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

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

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

+1

. Я нашел эту ссылку на статью: http://www.actapress.com/PaperInfo.aspx ? PaperID = 28880 & reason = 500 Это говорит о том, что, по крайней мере, кто-то еще думает, что в этом пространстве можно создать что-то полезное :) Это исследовательская работа, поэтому не знаю, насколько практично это решение. –

+0

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

+0

Любые такие инструменты или методы будут иметь высокий уровень «ложных срабатываний». Было бы более точным, надежным и экономически эффективным, чтобы человек выполнял проектные работы. –

3

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

  1. Diederich, T. и Miton, J., (1988), «Новые методы и быстрые алгоритмы для нормализации базы данных», ACM Transactions on Database Systems, 13 (3), 339-365.
  2. Bernstein, P. A. (1986), «Синтезирующие третьи отношения нормальной формы от функциональных зависимостей», ACM Transactions on Database Systems, Vol.1. № 4, стр. 277-298.
  3. JMathNorm: инструмент нормализации базы данных с использованием математики, лекции в области компьютерных наук; Том 4488, Труды 7-й международной конференции по вычислительной науке, часть II, Али Язичи, Зия Каракая

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

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

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

+0

Отличная информация - Спасибо! –

+2

Около 20 лет назад я реализовал процесс, описанный в статье Бернштейна как проект бакалавриата. Ввод в программу - это набор функциональных зависимостей (FD) для вашей базы данных. Выходной сигнал был нормированной схемой. Проблема с этим подходом заключается в том, что те люди, которые понимают FD, не имеют проблем с разработкой нормализованной схемы, а те, которые не понимают FD, не могут собрать входы для программы в любом случае! К сожалению, единственная копия, которую я оставил, находится на диске с 5,25-дюймовыми гибкими дисками - и нет возможности прочитать ее. – NealB

+0

@NealB вы попробовали eBay? – Mawg

2

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

http://schemaspy.sourceforge.net/

+0

+1 @balazscs - это очень полезно – Mawg

Смежные вопросы