Recherche
Les mémos
-
Tables
- · Annuler la suppression
- · Attacher feuilles Excel
- · Cacher une table
- · Concaténer une colonne
- · Créer une table
- · Dernière modification
- · Index composé
- · Limiter les enregistrements
- · Liste des champs
- · Modifier valeur de champ
- · Où est la table
- · Peupler une table de Logs
- · Renuméroter un champ
- · Réattacher les liens
- · Réattacher les liens locaux
- · Scinder un champ
- · Supprimer les tables liées
- · Trouver la différence
-
Formulaires
- · Afficher les derniers
- · Ajout à liste modifiable
- · Ajouter enregistrement
- · Barre de progression
- · Click ou double-click
- · Confirmer l'enregistrement
- · Copier - Coller
- · Défilement de la roulette
- · Exporter un graphique
- · Filtres personnalisés
- · Identifiants d'un Form continu
- · Importer les formulaires
- · Langue utilisateur
- · Limiter la saisie
- · Mémoriser une valeur
- · No enregistrement
- · Ouvert en normal
- · Position des formulaires
- · Recopier dernière valeur
- · Scroll automatique
- · Switch Modal
- · Tri manuel dans form
- · Tri personnalisé
- · Verrouillage de formulaire
- · Vérifier les saisies
-
Automation
-
Administration
- · Chemin de la base
- · Déconnecter utilisateur
- · Désactiver le Shift
- · Désactiver le Shift(2)
- · Liste des références
- · Liste des utilisateurs
- · Lister les applications
- · Mode exclusif
- · Nom d'utilisateur
- · Nom de l'ordinateur
- · Paramètres régionaux
- · Propriétés de la base
- · Sauvegarde journalière
- · Sauvegarde mensuelle
- · Shell and Wait
- · Version de Windows
-
Envoyer un mail
-
Outlook
- · Ajouter des contacts
- · Déplacer les messages
- · Enregistrer pièces jointes
- · Est ouvert ?
- · Exporter les contacts
- · Exporter les rendez-vous
- · Importer les messages
- · Integrer un état
- · Lire les contacts
- · Lire les rendez-vous
- · Lister les dossiers
- · Lister les tâches
- · SendMail (MAPI)
- · SendMail Automation
-
Dates - Heures
-
Fichiers
- · Compter les dossiers
- · Créer un dossier
- · Générer fichier TXT
- · Importer fichier TXT
- · Le dossier existe ?
- · Le fichier existe ?
- · Lister les fichiers
- · Lister les fichiers (2007)
- · Lister les sous-dossiers
- · Rechercher un répertoire
- · Répertoire dans table
- · Supprimer ReadOnly
- · Sélection de dossier
- · Sélection de dossier (API)
- · Sélection de fichiers
- · Sélection fichier (MOL)
-
Références
Je débute...
-
La normalisation
-
VBA
Visites
1263820 visiteurs
2 visiteurs en ligne
Nous contacter
Contact
La normalisation
La normalisation
Dans la pratique, il n'est malheureusement pas suffisant de répartir les données dans quelques tables. Il faut d'abord savoir quelles sont les données qui vont dans tel ou tel table... et ceci répond à des règles de jeux précises.
Il existe 5 - 6 règles appellées "formes de normalisation". Dans les bases de données ont utilise les 3 principales qui sont généralement suffisantes. Ces règles sont formulées dans un langage assez obscur pour le commun des mortels, de sorte que nous allons exprimer cela de façon plus simplifiée (éventuellement même approximative). Inutile d'augmenter la difficulté.
Avertissement:
Tout ne sera peut-être pas compris à la première lecture, ceci n'étant pas dû à un manque d'intelligence... mais plutôt au coté abstrait du sujet!
Le fait de se sentir sensibilisé au problème en se disant "Sapristi, je peux faire beaucoup d'erreurs si je ne tiens pas compte de la modélisation et la normalisation" est déjà un premier pas important.
La mise en oeuvre de ces règles est alors une toute autre histoire et qui demande beaucoup de temps. Et ce temps, il faut absolument le prendre et ne jamais se mettre (ou se laisser mettre) la pression.
Place au plus difficile...
Première forme normale (1FN)
On dit qu'une relation est en 1FN si tous les attributs qui la compose sont atomique.
En langage courant: Tous les champs d'une table doivent être tel pour qu'ils ne soient plus décomposables
Exemple 1 :
Il existe un champ "Adresse" dans une table. Il ne serait pas correct, car "Adresse" peut encore être scindée (par exemple en nom, prénom, rue, code postal, ville...)
Exemple 2 :
De mauvaises saisies peuvent-être réalisées dans des tables dont les champs semblent correctement nommés.
Admettons une entreprise qui possède sa cantine et dont les tables sont numérotées (table 1, table 2, etc.)
- A chaque table sont assis des employés qui possèdent leur numéro personnel, NumPerso (monsieur Durant à le numéro 12, madame Dupont le 56, Leroy le 36 et madame Lafille le 73)
- Chaque personne choisit son menu
- La table possède les champs "NoTable", "NumPerso", "Menu"
NoTable |
NumPerso |
Menu |
1 |
12, 56 |
Viande, Viande |
2 |
36, 73 |
Viande, Poisson |
Table |
NumPerso |
Menu |
1 |
12 |
Viande |
1 |
56 |
Viande |
2 |
36 |
Viande |
2 |
73 |
Poisson |
Deuxième forme normale (2FN)
On dit qu'une relation est en 2FN si elle est en 1FN et si toutes les dépendances fonctionnelles entre la clé et les autres attributs sont élémentaires.
En langage courant : Restons dans notre précédent exemple 2 et supposons qu'en plus du numéro de table il existe une autre appellation pour qu'un nouveau serveur puisse s'y retrouver plus simplement.
Dans ce cas, la table suivante ne serait pas correcte :
NoTable |
Endroit |
NumPerso |
Menu |
1 |
A l'entrée |
12 |
Viande |
1 |
A l'entrée |
56 |
Viande |
2 |
Fenêtre |
36 |
Viande |
2 |
Fenêtre |
73 |
Poisson |
Réflexions suivantes :
-
Aucun des champs de cette table n'est un candidat pour être clé primaire, car nous constatons facilement que les trois autres n'en ont pas une totalement dépendance fonctionnelle.
-
Le menu a toutefois une totale dépendance fonctionnelle d'une combinaison des champs NoTable et NumPerso. Car, malgré trois commandes du menu viande, dont 2 fois à la même table, cette combinaison du NoTable et du NumPerso conduit à une unicité (1/12, 1/56, 1/36).
Cette combinaison est donc candidat à être clé primaire !!!
En partant du principe que nous créons une table qui n'est destiné qu'à un seul repas, nous pouvons constater qu'aucune combinaison de Table et NumPerso ne peut créer de doublon. Lors du repas du soir ou du lendemain, les mêmes personnes pourraient s'assoir à la même table, nous devrions alors ajouter un champ date et/ou heures et - pour retrouver l'unicité - les ajouter à cette combinaison de Table et NumPerso. Mais ne compliquons pas de trop... -
Qu'en est-il de ce champ "Endroit" ?
Ce champ Endroit n'est en relation qu'avec la table et donc son numéro, mais non avec la personne et son NumPerso. Ainsi, le champ Endroit n'est pas en relation avec la clé combinée (NoTable + NumPerso) mais uniquement avec une partie de celle-ci (le numéro de table).
Donc, Endroit n'est en aucun cas candidat à être clé primaire, n'ayant même pas de totale dépendance fonctionnelle du candidat déjà cité (NoTable + NumPerso). -
De ce fait, cette table ne répond pas à la seconde forme normale et doit être modifiée en la scindant (les deux tables seront remises en forme par relation via le champ NoTable).
NumPerso |
Menu |
NoTable |
NoTable |
Endroit |
|
12 |
Viande |
1 |
1 |
A l'entrée |
|
56 |
Viande |
1 |
2 |
Fenêtre |
|
36 |
Viande |
2 |
|||
73 |
Poisson |
2 |
-
Par la même occasion, nous nous créons un nouvel avantage : nous empêchons la redondance (la saisie multiple et inutile de certaines données), car la dénomination "A l'entrée" et "Fenêtre" n'existe plus qu'une seule fois dans une table séparée et ne sont plus représenté que par leur numéro de table.
Troisième forme normale (3FN)
On dit qu'une relation est en 3FN si elle est en 2FN et si toutes les dépendances fonctionnelles entre la clé et les autres attributs sont élémentaires et directes.
En langage courant : Il ne peut y avoir de dépendance fonctionnelle entre les champs non-clé primaire. Ils ne peuvent être dépendant que de la clé primaire. C'est le cas dans l'exemple ci-dessus. Il est inutile de les modier.
Ajoutons un champ supplémentaire, le prix :
NoTable |
NumPerso |
Menu |
Prix |
1 |
12 |
Viande |
10 euros |
1 |
56 |
Viande |
10 euros |
2 |
36 |
Viande |
10euros |
2 |
73 |
Poisson |
15 euros |
Nous obtenons maintenant une situation similaire au cas "Endroit" :
-
Le Prix est dépendant du Menu, alors que Menu n'est pas clé primaire. Il apparaît à nouveau de la redondance, car le Prix du Menu est saisi trois fois (et devrait également être modifié trois fois s'il se produit une augmentation ou une baisse).
-
Menu est encore dépendant de la clé primaire (NoTable + NumPerso), alors que Prix n'est qu'indirectement lié à cette clé primaire.
Cela ne peut être et demande une nouvelle scission de la table :
NumPerso |
NoTable |
Menu |
Menu |
Prix |
|
12 |
1 |
Viande |
Viande |
10 euros |
|
56 |
1 |
Viande |
Poisson |
15 euros |
|
36 |
2 |
Viande |
|||
73 |
2 |
Poisson |
Page lue 9735 fois