OpenOffice Base : LES RELATIONS (a)

1-Avant de commencer

Ce cours inclut des exercices pour expérimenter les relations entre les tables. Il utilise le fichier commerce3.odb.

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

 

Prenons l'exemple des tables Facture et Client. La table Facture contient le champ ID_Client et aucune autre information sur le client. Mais ce champ est la clé pour relier les deux tables. Il est possible de le relier au champ ID_Client de la table Client. Une fois relié, il est ensuite possible d'avoir les autres informations sur le client tel que le nom de la compagnie, son adresse, etc.
Relation Clients-Factures

3-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 :

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.

  1. Remplacez les "?" par les résultats (un ou plusieurs).
Détermination le type de relation
  Table 1   Table 2
Q1: 1 ?
Q2: ? 1
Max:      
  1. 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 :

  1. Remplissez ensuite le tableau ci-dessous.
Résultat du type de relation
  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).

3.1-Relation un à un

Ex : Un homme est marié à une seule femme. Une femme est mariée à un seul homme.

3.2-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é).

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

3.4-Ce qui est nécessaire pour faire une relation

Pour mettre en place une relation, il faut au minimum :

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.

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

  1. À partir du menu principal, appuyez sur l'onglet des requêtes bouton requêtes.
  2. Cliquez sur le bouton Créer une requête en mode ébauche...bouton nouvelle requête en mode ébauche.
fenêtre ajouter table ou requête
  1. À partir du Mode ébauche, dans la liste des tables disponibles, double-cliquez sur les tables Client et Factures.
fenêtre requête1
  1. Double-cliquez sur les champs suivants de la table Factures : Id_Facture et ID_Client.
  2. Double-cliquez sur les champs suivants de la table Client : emp_nom et Adresse.
  3. Exécuter la requête en cliquant sur le bouton bouton exécuter la requête.
résultat de la requête1

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.

relation clients-factures dans une requête
  1. Placez le pointeur sur l'un des champs en commun.
  2. 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.

  1. Cliquez avec le bouton droit de la souris sur la ligne qui relie les deux tables.
  2. Sélectionnez la commande Supprimer.
OU
  1. Appuyez sur la touche touche SUPPR du clavier.

Maintenant que les tables sont correctement reliées, nous pouvons afficher le résultat.

  1. Exécutez encore une fois la requête en appuyant sur le bouton bouton exécuter la requête.

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.

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

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

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

relations entre toutes les tables de la base de données

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

Si vous n'avez pas cette fenêtre, vous pouvez la faire afficher en cliquant sur le bouton bouton ajouter une table.

OU

Du menu Insertion, sélectionnez la commande Ajouter des tables.

La fenêtre suivante va apparaître :

fenêtre ajouter une table

Avec OpenOffice Base, il est possible de relier des tables ou des requêtes si elles ont un champ en commun.

  1. Ajoutez les tables Client, Factures, Transition_Fact-Stock, Stock et Emplyés.

5.2-Établir les relations entre les tables

  1. Sélectionnez le champ ID_client de la table Client avec la souris.
  2. 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.

relation entre Clients et Factures

Vous pourrez alors éditer la relation pour la modifier.

  1. Cliquez avec le bouton droit de la souris sur le lien entre les tables.
  2. Sélectionnez la commande Éditer.
relation entre Clients et Factures

Ou

  1. Cliquez sur le bouton Nouvelle relation Bouton nouvelle relation.

Puis

  1. Sélectionnez le bouton radio Mise à jour en cascade.

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

fenêtre erreur d'intégrité

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 !

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

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

liaisons entre les tables