Есть логические тесты для "нормализации". Тем не менее, они не тривиальные упражнения в программировании; это отношения в метаданных, которые налагаются на данные. Они требуют «мышления».
1NF - без повторяющихся групп. Как определить «повторяющуюся группу»? Это будет структура массива, наложенная на столбцы таблицы. Как это сделать? SQL не предоставляет механизма, поэтому вам придется посмотреть на имена столбцов, чтобы проверить «шаблон». COL_1, COL_2, COL_3, например.
1NF - согласованное расположение строк. Duh. SQL навязывает это по самой природе определения таблицы.
2NF - данные в строке зависят от ключа. Вы должны сделать процедуру примерно так.
For each non-key column:
Query distinct pairs (Key and the non-key column)
Do all non-key values depend in a consistent way on a key value?
Can you build a simple dict mapping non-key to key?
Полный алгоритм здесь: http://en.wikipedia.org/wiki/Relational_model#Set-theoretic_formulation
3NF - данные в строке зависят ТОЛЬКО от ключа. Это хуже, потому что вы должны сравнить все комбинации неключевых столбцов со всеми комбинациями неключевых столбцов, чтобы убедиться, что между значениями нет неключевых зависимостей.
4NF и 5NF смущают меня, поэтому я остановлюсь здесь.
Я хочу сказать, что теоретически вы можете это сделать. На практике существует множество сложных перестановок данных, чтобы утверждать, что нормальные отношения форм действительно выполняются.
Гораздо, намного проще иметь гипотезу о конкретном нарушении и исследовать только эту проблему с некоторыми запросами SQL и некоторым мышлением.
Формальная математика здесь:
http://en.wikipedia.org/wiki/Relational_model