OpenOffice Base : LES RELATIONS (a)
Avant de commencer
Ce cours inclut des exercices pour expérimenter les relations entre les tables. Il utilise le fichier commerce3.odb.
Introduction
On relie des tables entre elles par des champs en commun pour éviter la redondance. Il est inutile de réécrire plusieurs fois les mêmes informations.
Ex : inutile de réécrire une information sur un client à chaque facture.
La force des tables reliées est de donner accès à de l'information d'une autre table à laquelle vous n'auriez pas eu accès sans une relation entre les tables.
Les types de relations ou la cardinalité
Il existe trois types de relations: un à un, un à plusieurs et plusieurs à plusieurs.
Ce n'est pas toujours évident de déterminer quel genre de relation, appelé également cardinalité, existe entre deux tables.
Il faut se poser deux questions :
- Pour un enregistrement de la première table, combien peut-il en avoir dans la seconde table ?
- Pour un enregistrement de la seconde table, combien peut-il en avoir dans la première table ?
Les deux questions commencent toujours par : « Pour un enregistrement de ceci, combien de cela ? »
Les deux seules réponses acceptables sont soit un ou plusieurs. Une fois que vous avez les réponses, placez-les dans le petit tableau qui suit. Il faut inverser la question numéro deux pour la rentrer dans le tableau.
- Remplacez les "?" par les résultats (un ou plusieurs).
Table 1 | Table 2 | ||
---|---|---|---|
Q1: | 1 | → | ? |
Q2: | ? | ← | 1 |
Max: |
- Ensuite, écrivez dans la dernière ligne le résultat le plus élevé des deux colonnes. Vous connaîtrez ainsi le type des relations.
Le prochain exercice consiste à expérimenter ce petit truc.
Vous allez essayer de déterminer quel type de relation existe entre les tables Facture et Client. Vous devez cous poser les questions :
- Q1: Pour une facture, combien avons-nous de clients ? La réponse est un. Une facture, un client.
- Q2: Pour un client, combien pouvons-nous avoir de facture ? La réponse est plusieurs. Du moins, nous l'espérons.
- Remplissez ensuite le tableau ci-dessous.
Facture | Clients | ||
---|---|---|---|
Q1: | 1 | → | 1 |
Q2: | Plusieurs | ← | 1 |
Max: | Plusieurs | 1 |
Effectivement, il s'agit bien d'une relation d'un à plusieurs de Client vers Facture. Vous pouvez maintenant essayer avec d'autres tables ou d'autres situations.
Ceci veut aussi dire que vous pouvez trouver seulement une fois l'information en commun dans l'une des tables et plusieurs fois dans l'autre.
Pour cet exemple, chaque valeur du champ ID_Client de la table Client est unique. Il n'y a pas deux enregistrements (ou clients) avec le même numéro de client.
Cependant, dans la table Factures, vous pouvez retrouver le même numéro de client pour plusieurs enregistrements différents. C'est pour cette raison que la relation est appelée de 1 à plusieurs.
L'information en commun se retrouve seulement une fois dans la première table (Client) et potentiellement plusieurs fois dans la seconde (Factures).
Relation un à un
Ex : Un homme est marié à une seule femme. Une femme est mariée à un seul homme.
Relation un à plusieurs
Ex.: Une personne peut posséder plusieurs voitures. Une voiture ne peut être possédée que par une seule personne. (On oublie les cas de copropriété).
Relation plusieurs à plusieurs
Ex : Un étudiant suit plusieurs cours. Un cours est suivi par plusieurs étudiants
Il faut faire attention lors de la conception d'une base de données avec des relations de type "plusieurs à plusieurs". Il y a plus de détails plus loin sur cette page Web sur ce cas spécial.
Ce qui est nécessaire pour faire une relation
Pour mettre en place une relation, il faut au minimum :
- Deux tables (ou requêtes ou une combinaison des deux).
- Un champ en commun dans chacune des tables.
- Le même type de champ (Texte avec texte, numérique avec numérique ...).
- La même longueur (impossible de relier un champ de 15 caractères avec un autre de 50 caractères !).
- Le même genre d'information (Ex.: Code d'inventaire avec des codes d'inventaires, ...).
De ce fait, vous ne pourrez pas, par exemple, créer une relation entre les champs date et numéro de téléphone. Les champs ne sont pas des mêmes types (Date/Heure, Texte).
De même, vous ne pourrez pas créer de relation entre les champs emp_nom et emp_prenom. Bien que les deux champs soient du type Texte, ils n'ont pas le même longueur.
Il y a cependant une exception qui confirme la règle. Il est possible de faire une relation entre un champ de type AutoValeur et un champ de type Numéric dont la taille du champ est Integer.
Autre exception de taille : il est impossible de créer une relation de type un à plusieurs si les champs en commun sont de type AutoValeur. Par définition, ce type de champ ne peut pas avoir deux fois la même information !
Cette exception est cependant très avantageuse.
Ex : l'utilisateur n'a pas besoin de s'inquiéter de donner un numéro d'identification à un nouveau client. OpenOffice Base s'en charge automatiquement.
Création d'une relation dans une requête
Il est très avantageux par moment d'être capable d'afficher les informations contenues de plusieurs tables en même temps. Il faut cependant avoir une relation entre les tables pour avoir un résultat intéressant. Le prochain exercice consiste à créer une relation entre deux tables dans une requête.
- À partir du menu principal, appuyez sur l'onglet des requêtes .
- Cliquez sur le bouton Créer une requête en mode ébauche....
- À partir du Mode ébauche, dans la liste des tables disponibles, double-cliquez sur les tables Client et Factures.
- Double-cliquez sur les champs suivants de la table Factures : Id_Facture et ID_Client.
- Double-cliquez sur les champs suivants de la table Client : emp_nom et Adresse.
- Exécuter la requête en cliquant sur le bouton .
Ce que vous voyez est le résultat de toutes les combinaisons possibles entre les deux tables.
Remarquez que pour chaque numéro de facture il y a 5 clients ! En fait, il y a 14 enregistrements dans la table Facture et 5 enregistrements dans la table Client. Donc, il y a 14 * 5 (70) enregistrements d'activés. Ceci est en réalité impossible. La raison est qu'il n'y a pas de relation entre ces deux tables en ce moment. Si vous ne faites pas de relations entre les tables d'une requête, OpenOffice Base va afficher toutes les combinaisons d'enregistrements possibles entre les deux tables. Il faut créer une relation entre deux tables pour éviter ce genre de situation.
Dans notre exemple, les champs ID_client et ID_Client sont communs aux deux tables. Bien qu'ils n'aient pas le même nom, ils sont de même type. Ils ont aussi le même format ou la même longueur et contiennent le même type d'information.
- Placez le pointeur sur l'un des champs en commun.
- Cliquez et tout en restant appuyé sur le bouton gauche de la souris, déplacez le pointeur sur l'autre champ en commun.
Une ligne mince devrait apparaître entre les deux champs.
Les deux tables sont maintenant reliées. Sinon, réessayez.
Il se peut que, par accident, vous ayez relié des champs qui n'ont pas le même genre d'information. Il faut alors retirer la mauvaise relation avant de pouvoir réessayer.
- Cliquez avec le bouton droit de la souris sur la ligne qui relie les deux tables.
- Sélectionnez la commande Supprimer.
- Appuyez sur la touche du clavier.
Maintenant que les tables sont correctement reliées, nous pouvons afficher le résultat.
- Exécutez encore une fois la requête en appuyant sur le bouton .
Le nombre d'enregistrements devrait avoir réduit à 14 factures.
Vous remarquerez que vous voyez les informations de deux tables en même temps ! C'est là l'un des grands avantages des bases de données relationnelles; être capable d'accéder à des informations qu'aucune table, prise seule, n'est capable de fournir. C'est seulement une fois que ces tables sont reliées qu'elles sont vraiment efficaces.
Le mécanisme d'une relation
À partir d'une requête, il est possible de modifier ou d'ajouter des enregistrements. Lorsque vous saisissez une valeur dans l'un des champs en commun, OpenOffice Base va essayer de trouver si cette valeur existe dans l'un des enregistrements de l'autre table reliée. S'il trouve, vous aurez accès au contenu de tous les champs de l'enregistrement.
Prenons l'exemple des tables Client et Factures qui sont reliées sur les champs en commun ID_client et ID_Client dans une requête.
Pour une valeur de ID_Client dans la table Factures comprise entre 1 et 5, OpenOffice Base pourra trouver un enregistrement correspondant dans la table Client et vous afficher toutes les informations annexes de cet enregistrement si vous le voulez.
Il est possible d'entrer ou de modifier une information à partir d'une requête qui contient plusieurs tables.
Il suffit de vous assurer qu'il existe un champ en commun entre les tables reliées et qu'il soit utilisé dans la requête. Sinon, OpenOffice Base vous avertira qu'il ne peut pas réaliser la requête.
Le champ en commun est celui pour lequel vous pouvez avoir plusieurs fois la même donnée.
Ex : si vous avez une relation entre les tables Client et Factures sur le champ en commun ID_client, vous utiliserez le champ ID_Client de la table Factures puisque vous pouvez avoir plusieurs fois le même numéro de client dans les factures.
Création de relations permanentes entre les tables
Il est avantageux de relier des tables dans la requête pour accéder à une information qu'aucune des tables prises seules ne possède. Le problème avec cette technique est qu'il faut refaire les relations à chaque fois que vous faites une nouvelle requête. OpenOffice Base vous offre la possibilité de créer des relations « permanentes » entre les tables de votre base de données. Elle a aussi l'avantage de vérifier « l'intégrité » des relations entre les tables.
À partir du menu principal, il est possible d'accéder à la partie des relations.
- Du menu Outils, sélectionnez la commande Relations....
C'est dans cette fenêtre que vous allez créer les relations entre les tables. Lorsque vous ouvrez cette section pour la première fois, il n'y a pas de tables; seulement un grand espace vide. Il faut premièrement ajouter les tables ou les requêtes que vous voulez relier.
Dans cet exercice, le fichier contient déjà toutes les tables qui seront nécessaires pour créer les relations sauf la table Client.
Ajouter une table
Lorsque vous allez ouvrir la zone des relations pour la première fois, elle devrait être vide et une fenêtre contenant toutes les tables de votre base de données s'affichera. Il faudra y ajouter les tables ou les requêtes que vous voulez relier avant d'établir les relations.
OU
Du menu Insertion, sélectionnez la commande Ajouter des tables.
La fenêtre suivante va apparaître :
Avec OpenOffice Base, il est possible de relier des tables ou des requêtes si elles ont un champ en commun.
- Ajoutez les tables Client, Factures, Transition_Fact-Stock, Stock et Emplyés.
Établir les relations entre les tables
- Sélectionnez le champ ID_client de la table Client avec la souris.
- En restant appuyé sur le bouton gauche de la souris, déplacez le pointeur sur le champ ID_Client de la table Factures.
Une fois que vous aurez fait la relation, l'écran suivant va apparaître.
Vous pourrez alors éditer la relation pour la modifier.
- Cliquez avec le bouton droit de la souris sur le lien entre les tables.
- Sélectionnez la commande Éditer.
Ou
- Cliquez sur le bouton Nouvelle relation .
Puis
- Sélectionnez le bouton radio Mise à jour en cascade.
L'intégrité référentielle
La notion d'intégrité référentielle permet d'établir une relation entre deux tables en s'assurant de l'existence d'une valeur dans la table reliée.
Si tel n'était pas le cas, OpenOffice Base afficherait une erreur et aucune relation ne pourrait être établie entre les tables.
Dans cet exemple, nous avons voulu faire correspondre un client numéro 6 de la table Factures avec un client numéro 6 de la table Client qui visiblement n'existe pas !
L'option Mise à jour en cascade
Cette option met à jour les enregistrements dans la ou les autres tables reliées.
Si vous changez le numéro de client, tous les enregistrements des autres tables reliées dont le code client est identique vont aussi être modifiés.
Ex : Si vous changez la valeur du champ ID_client de la table Client, OpenOffice Base va la changer pour tous les champs en commun des tables reliées. Dans notre cas, ce serait seulement le champ ID_Client de la table Factures.
L'option Supprimer la cascade
Cette option efface les enregistrements de l'autre table qui ont le même champ en commun que l'enregistrement supprimé.
Quand doit-on activer cette option ? Cela dépend du contenu des tables.
Ex : pour des raisons fiscales, si un client part, il serait préférable de conserver ses données. Mais pour une autre base de données, pour des réservations par exemple, il serait préférable d'enlever les options en même temps qu'une réservation.
Voici une représentation des tables et de leurs relations. Vous devrez créer toutes les relations entre ces tables plus tard. Pour le moment, lisez les autres options concernant les relations.