Développement d'applications

avec une base de données

Les relations

Module précédent

Problèmes des tables

2 problèmes surviennent lorsqu'on définit une seule table pour enregistrer nos données.

  1. Certaines données se répètent sur plusieurs lignes.
  2. Il est parfois difficile de déterminer le nombre de champs nécessaires pour donner des détails concernant un enregistrement. Exemple:

Exemple

Une garderie veut faire une base de données pour enregistrer les enfants dont elle a la charge, ainsi que leur mère.

Première erreur : répéter les données.

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.

Deuxième erreur : ne pas savoir combien de champs sont nécessaires.

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 ?

Solution correcte : faire deux tableaux.

Identificateur unique Nom mère Prénom mère Téléphone
1
Brady Rose 444-555-6666
2
Simon Luce 819-777-3452

Prénom enfant Date naissance Identificateur mère
Max 2014-02-04
1
Bob 2016-07-01
2
Théo 2015-02-04
1
Jim 2016-04-04
1

Solution

La solution généralement utilisée consiste à utiliser une logique qui se base sur certains outils et de les joindre entre eux.

Clé Primaire

Une clé primaire est un champ (ou parfois un groupe de champs) qui possède les caractéristiques suivantes:

  1. Il ne peut pas se répéter dans une même table. (Il peut cependant se répéter dans une autre table)
  2. Il ne peut pas être NULL.
  3. Il sert à identifier de façon unique un enregistrement.

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.

Clé étrangère ou clé externe

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.

Relation

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".

Méthodologie pour Access.

Clé primaire

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.

Clé étrangère

Pour créer une clé étrangère:

  1. Définir un champ.
  2. Le type de ce champ doit absolument correspondre au type de la clé primaire. C'est pourquoi on laisse habituellement Access gérer la clé primaire sous forme de NuméroAuto pour qu'il génère des nombre entiers, et on définit la clé étrangère comme "Numérique/entier long".
  3. Donner un nom représentatif pour se rappeler qu'il s'agit d'une référence à une autre table. Exemple: pour un enfant, la clé étrangère qui le relie à sa mère pourrait s'appeler "mereId" ou "cleMere".

Faire la relation:

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.

Logique

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.

Les types de relations

La relation un-à-plusieurs

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:

La relation plusieurs-à-plusieurs

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

Fonctions avancées de l'intégrité référentielle

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.

Que se passe-t-il lors de suppressions?

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:

  1. On peut supprimer tous les enfants de cette mère. C'est ce qui se produit si on coche la case "Effacer en cascade les enregistrements correspondants". Cette méthode est très rapide pour faire des effacements, mais très risquée pour effacer des enregistrements par erreur. Access supprime sans poser de questions.
  2. Access nous demande, par un message d'erreur, de supprimer manuellement tous les enfants avant de supprimer la mère. Cette technique est plus sécuritaire, mais très contraignante lorsque des utilisateurs non-programmeurs utilisent notre logiciel.

Module suivant