2 problèmes surviennent lorsqu'on définit une seule table pour enregistrer nos données.
Une garderie veut faire une base de données pour enregistrer les enfants dont elle a la charge, ainsi que leur mère.
Nom mère | Prénom mère | Téléphone | Prénom enfant | Date naissance |
---|---|---|---|---|
Brady | Rose | 111-222-3333 | Max | 2014-02-04 |
Simon | Luce | 819-777-3452 | Bob | 2016-07-01 |
Brady | Rose | 111-222-3333 | Théo | 2015-02-04 |
Brady | Rose | 444-555-6666 | Jim | 2016-04-04 |
On se rend compte que Luce Brady est répétée à trois reprises. De plus, elle a changé de numéro de téléphone depuis le deuxième enfant, mais seulement le dernier enregistrement est à jour.
Nom mère | Prénom mère | Téléphone | Prénom enfant 1 | Date naissance 1 | Prénom enfant 2 | Date naissance 2 | Prénom enfant 3 | Date naissance 3 |
---|---|---|---|---|---|---|---|---|
Brady | Rose | 444-555-6666 | Max | 2014-02-04 | Théo | 2015-02-04 | Jim | 2016-04-04 |
Simon | Luce | 819-777-3452 | Bob | 2016-07-01 |
On se rend compte que le nombre d’enfants est indéfini : on ne sait donc pas combien de champs il faut prévoir. Même si on admet que le nombre d’enfants pourrait difficilement dépasser 20, il faut se rappeler qu’il s’agit ici d’un exemple : combien de factures fait-on à un client durant plusieurs années ? Combien de dépôt bancaire fait-on pour un compte de banque durant plusieurs années ?
Identificateur unique | Nom mère | Prénom mère | Téléphone |
---|---|---|---|
Brady | Rose | 444-555-6666 | |
Simon | Luce | 819-777-3452 |
Prénom enfant | Date naissance | Identificateur mère |
---|---|---|
Max | 2014-02-04 | |
Bob | 2016-07-01 | |
Théo | 2015-02-04 | |
Jim | 2016-04-04 |
La solution généralement utilisée consiste à utiliser une logique qui se base sur certains outils et de les joindre entre eux.
Une clé primaire est un champ (ou parfois un groupe de champs) qui possède les caractéristiques suivantes:
L'idée est de garder à l'esprit ce qu'est une clé: c'est un outil qui ouvre une porte pour accéder au contenu derrière cette porte.
C'est une copie d'une clé primaire. Donc elle permet d'ouvrir la même porte que la clé originale, mais on la conserve ailleurs.
Dans les BD, c'est un champ d'une table qui réfère à une clé primaire d'une autre table. Elle permet donc à un enregistrement d'une table d'aller chercher des informations dans une autre table.
Il est important de se rappeler qu'on peut faire autant de copies qu'on veut d'une clé. Donc la clé étrangère peut se répéter dans la table, contrairement à la clé primaire.
C'est le fait d'indiquer formellement à un SGBD qu'une clé étrangère est dépendante d'une clé primaire. Le SGBD va tenter de s'assurer que l'originale existe toujours si une copie est "créée".
Access nous offre presque toujours de créer un champ No et de le désigner comme clé primaire. On peut changer son nom pour "Id" ou "pKey". Pour indiquer qu'un champ est (ou n'est pas) une clé primaire, cliquez sur clé primaire.
Habituellement, on désigne ce type de champ au format "NuméroAuto" et on laisse Access gérer la numérotation pour qu'elle soit unique.
Pour créer une clé étrangère:
Cliquez sur Relations pour faire apparaître la liste des tables disponibles.
Cliquez (bouton gauche) sur la clé primaire et draguez-la jusqu'à la clé étrangère. Dans la fenêtre qui apparaît, cochez "Appliquez l'intégrité référentielle". Nous verrons plus tard l'utilité des autres fonctions.
Pour savoir quand faire une relation, il faut garder à l'esprit les problèmes des tables uniques.
Voir les FAQ concernant les relations
Faire l'exercice 550.
Logique: C'est une relation qui signifie qu'un enregistrement d'une table peut correspondre à plusieurs enregistrements d'une seconde table, mais pas l'inverse. C'est la même logique que la relation entre une mère biologique et ses enfants: chaque mère peut avoir plusieurs enfants, mais un enfant ne possède qu'une seule mère.
Méthodologie:
Logique: C'est une relation qui signifie qu'un enregistrement d'une table peut correspondre à plusieurs enregistrements d'une seconde table, et vice versa. Cette relation correspond à 2 relations un-à-plusieurs.
Méthodologie: Il est impossible de créer directement les relations entre chaque table
L'intégrité référentielle sert à avertir Access que la relation définie doit toujours exister dans les enregistrements. Lorsqu'on crée un enfant, Access s'assure que le parent existe. Autrement dit, en entrant un nombre dans le champ de relation de la table enfant, Access ira vérifier si une clé primaire portant cette valeur existe dans la table mère. Sinon, il refuse l'enregistrement de l'enfant.
Si la mère existe lors de l'enregistrement de l'enfant, Access accepte cet enfant, Que se passe-t-il lorsqu'on tente par la suite de supprimer l'enregistrement-mère? 2 choix s'offrent: