web-dev-qa-db-fra.com

Existe-t-il un outil pour vérifier si ma base de données est normalisée au troisième formulaire normal?

J'ai récemment appris la normalisation et je sais à quel point elle est importante lors de l'implémentation d'un nouveau schéma.

Comment puis-je vérifier si ma base de données est compatible 2NF ou 3NF?

La révision manuelle est une option sûre, mais je cherche ici un outil automatisé.

Je ne cherche pas un outil pointer-cliquer, plus quelque chose qui mettrait en évidence les optimisations possibles pour rendre une table 3NF conforme. Je suppose qu'il pourrait utiliser des statistiques basées sur de bons exemples de données et/ou une analyse sémantique des noms de colonnes.

20
ack__

La normalisation est absolument utilisée dans le monde réel ... et j'espère que vous savez que 3NF n'est que le troisième de ... qu'est-ce qui est maintenant, 8? Mais 3NF devrait être une cible facile.

Cependant ... j'oserais dire qu'il ne pourrait pas y avoir un tel outil.

La normalisation, techniquement, est un attribut de chaque table. Dans une base de données donnée, différentes tables peuvent avoir différents niveaux de normalisation.

Chaque tableau représente des faits ... des faits sur les instances d'un certain type de chose (personne, compte, commande, expédition, article, emplacement), y compris, parfois, des clés étrangères qui vous mènent à d'autres types de faits sur cette chose.

La normalisation a à voir avec la précision et l'efficacité avec lesquelles les faits sont représentés dans les tableaux ainsi qu'avec la capacité de la conception des tableaux à empêcher des modèles de données ambigus et redondants.

Ainsi, une compréhension des faits réels est nécessaire ... ce qui est hors de la portée des outils automatisés.

Q: Is a table with { student, subject, instructor } in 3NF?
A: What are students, subjects and instructors?

Dans un monde où tous les instructeurs enseignaient toutes les matières et chaque étudiant pouvait suivre n'importe quelle combinaison mais pas plus d'un cours sur chaque matière de chaque instructeur, ce tableau pourrait en effet être considéré comme étant en 3NF. Dans le monde réel, réclamer 3NF pour ce tableau est absurde.

Pour comprendre que ce n'est pas dans 3NF, il faut comprendre la nature des faits qu'il représente. Dans notre réalité, ce tableau ne va pas être 3NF car (entre autres raisons) le sujet et l'instructeur sont associés ensemble d'une manière qui n'a rien à voir avec l'élève. Si nous avons des cours où les instructeurs enseignent des sujets stockés ailleurs dans notre base de données, pourquoi devrions-nous copier les deux valeurs ici au lieu d'une clé étrangère de l'autre table indiquant que l'étudiant était inscrit au cours? Si l'instructeur est remplacé, nous devons modifier plusieurs enregistrements à plusieurs endroits.

Plus une base de données est normalisée, plus elle est intrinsèquement cohérente avec le monde réel et avec elle-même, et plus il est difficile pour les faits de la base de données d'être faux par inadvertance. La conception de bases de données est un art, mais c'est certainement aussi une science.

Même si je ne vois pas en face de tout ce qu'il écrit, je recommanderais le livre de Chris Date, Conception de base de données et théorie relationnelle: formes normales et tout ce jazz qui entre dans les détails atroces de la théorie sous-jacente du modèle relationnel.

24
Michael - sqlbot

Une partie de l'intérêt d'utiliser des méthodes formelles pour développer la théorie relationnelle était de développer des procédures qui pourraient être automatisées. Je suis sûr que C.J. Date sort tout de suite et dit que dans son Introduction to Database Systems.

Plusieurs outils CASE publiés à la fin des années 1980 ou au début des années 1990 pourraient dériver tous les schémas 5NF possibles, soit en analysant les diagrammes ER, soit par l'analyse statistique des données de l'échantillon.

Visio Enterprise Architect (je pense) est un outil relativement récent dans ce sens.

Je doute fort que vous ayez encore besoin d'une réponse, mais au cas où vous ou quelqu'un d'autre pourrait en bénéficier, vous pouvez essayer cet outil: http://uisacad5.uis.edu/cgi- bin/mcrem2/database_design_tool.cgi

3

Je pense que si vous pouviez écrire un outil pour le faire, il faudrait quand même un examen manuel pour que ça marche. les formes normales sont définies sur la base de dépendances fonctionnelles et celles-ci ne peuvent pas être déterminées à partir d'une simple inspection des données. En d'autres termes, il s'agit d'une logique inductive plutôt que déductive afin de déterminer s'il existe une dépendance fonctionnelle.

2
Chris Travers