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

20

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 un outil automatisé ici.

Je ne recherche pas un outil pointer-cliquer, mais 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.

ack__
la source
1
J'espère qu'un tel outil n'existe pas. 2NF / 3NF n'a pas besoin d'être appliqué. La conception d'un schéma / modèle doit souvent prendre en compte les aspects pratiques et les performances, ce qui jette généralement xNF par la fenêtre
Philᵀᴹ
2
Cela signifie-t-il que la normalisation n'est pas utilisée en réalité? J'ai prévu de l'utiliser comme point de départ et envisagerai de dénormaliser lorsqu'il ralentit les performances.
ack__
3
La conception de schémas est plus un art qu'une science. Bien sûr, il y a des règles de base à suivre, mais une fois que vous en faites suffisamment, vous commencez à avoir une bonne idée de ce qui fonctionne et de ce qui ne fonctionne pas. Artisanat.
datagod
Je ne suis pas d'accord avec Phil. La normalisation est parfois la voie à suivre. D'autres fois, le schéma en étoile est meilleur. Cela dépend de ce que vous faites. Vous auriez besoin de beaucoup de tables avant que l'automatisation en vaille la peine.
Walter Mitty

Réponses:

24

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 trait à la précision et à l'efficacité de la représentation des faits dans les tableaux ainsi qu'à la capacité de la conception des tableaux à éviter les 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 tout ce qu'il écrit, je recommanderais le livre de Chris Date, Database Design and Relational Theory: Normal Forms and All That Jazz, qui donne des détails atroces sur la théorie sous-jacente du modèle relationnel.

Michael - sqlbot
la source
2
Merci pour cette réponse détaillée. Cependant, suivant votre exemple, il devrait être possible pour un outil qui analyse des données d'échantillon de détecter que les valeurs "d'instructeur" se répètent beaucoup, et apparaît également dans un autre tableau, suggérant ainsi qu'il pourrait être candidat pour une clé étrangère ou tout autre changement qui rendrait ce tableau 3nf conforme, ou est-ce que je manque quelque chose?
ack__
2
C'est vrai, mais le mot clé est toujours «suggérer». Un outil pourrait suggérer des changements structurels en recherchant une redondance apparente, mais je maintiendrais toujours qu'une redondance réelle et une apparition coïncidente de corrélation seraient difficiles à différencier entre un tel outil. La connaissance de la nature réelle des données est requise.
Michael - sqlbot
@ack__: être en 3ème forme normale ou non est une propriété d'une relation non d'une paire ou d'un ensemble de relations. Donc, je ne vois pas que l'établissement d'une relation de clé étrangère n'a rien à voir avec la 3e forme normale.
miracle173
Je pense que le plus gros problème est que la détermination des dépendances fonctionnelles multi-colonnes est particulièrement problématique. si les valeurs peuvent être identiques et représenter des entités différentes (c'est-à-dire lorsque des clés composites sont impliquées). Prenons un tableau: (adresse_texte, ville, province_état, code_message, pays). Maintenant, ce n'est pas normalisé. (ville, état_province) -> (pays). Donc, pour normaliser complètement, nous devons diviser cela en au moins trois tables, peut-être quatre (gestion du mail_code!) Mais les clés composites rendent cette détection problématique à la volée. Aussi comp. les clés sont la clé de l'idée des nf, donc ne les ignorez pas!
Chris Travers
Quelqu'un pourrait-il expliquer pourquoi "Dans un monde où un étudiant ne pourrait suivre qu'un cours dans une matière et où tous les instructeurs enseignaient toutes les matières, ce tableau pourrait en effet être dit en 3NF" Cela semble établir que les étudiants -> matière et rien de plus. La clé de ce tableau serait alors (étudiants, instructeur) cela ne briserait-il pas 3NF? En quoi chaque enseignant enseignant chaque matière nous aide-t-il?
Drew Verlee
5

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 presque sûr que CJ Date sort tout de suite et le dit dans son introduction aux systèmes de bases de données .

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 ou en analysant statistiquement les données de l'échantillon.

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

Mike Sherrill 'Cat Recall'
la source
Agréable. Je cherchais en effet les deux façons d'analyser un schéma (diagramme ER et analyse d'échantillons de données). Connaissez-vous un autre logiciel récent que Visio? Je n'ai pas (encore) de licence pour ça.
ack__
1
Mais vos diagrammes ER sont essentiellement des diagrammes de modèle objet. Ce n'est pas tout à fait la même chose que de prendre une base de données existante et de déterminer si elle est normalisée à partir d'elle.
Chris Travers
2
L'analyse des tableaux avec des exemples de données et des suggestions de normalisation était une caractéristique d'Access, et dans les premières versions, si je me souviens bien.
ypercubeᵀᴹ
@Chris: oui, je faisais référence aux diagrammes ER uniquement pour l'analyse sémantique.
ack__
@ypercube: Merci pour l'astuce, je vais jeter un œil à Access.
ack__
2

Je pense que si vous pouviez écrire un outil pour le faire, il faudrait toujours un examen manuel pour que cela fonctionne. 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.

Chris Travers
la source
En effet, il y aura un examen manuel à faire, je ne m'attends pas à ce qu'un outil le fasse de manière entièrement automatique. Mais je suis à peu près sûr que la plupart du travail peut être automatisé en analysant les données existantes dans la base de données (au moins, des échantillons de celle-ci), et / ou le nom / type des champs.
ack__
1
Comment? La normalisation est définie sur les dépendances de jointure et les dépendances fonctionnelles. Une dépendance fonctionnelle est fondamentalement facilement définie comme: pour chaque valeur possible d'une super-clé, il y a exactement une valeur dans la dépendance fonctionnelle. Vous ne pouvez pas y arriver en automatisant l'examen des données, car ce n'est pas parce que vous avez, pour votre ensemble actuel, ce qui semble être une dépendance fonctionnelle, cela ne signifie pas qu'une nouvelle clé sera conforme. Cela ressemble beaucoup à l'ancienne division corrélation vs causalité. Vous ne pouvez pas induire une dépendance fonctionnelle en observant ce qui se trouve actuellement dans la base de données.
Chris Travers
2
au moins un outil peut suggérer qu'une relation existe peut-être. si la qualité et la taille de l'échantillon de données sont suffisamment grandes, la précision d'une telle estimation sera suffisamment élevée pour des raisons pratiques.
miracle173
Peut être. Mais prenons un exemple réel qui est assez infernal en termes de conception relationnelle: les adresses. Comment normaliser les adresses postales? Combien de tableaux faut-il proposer? D'après ma compréhension de 3NF, vous avez besoin de tableaux pour les pays, les états / provinces et les villes. Je ne sais pas si les ventilations par code postal / ville ont un sens, mais c'est probablement le cas. Mais comment analysez-vous les données existantes et déterminez-vous (ville, état) -> pays? Comment déterminez-vous si / sinon les codes postaux sont globalement liés à ces constructions?
Chris Travers