3/1/2014

Les relations

Nous venons de voir dans ce TD comment créer des tables. Au TD2, nous avons vu comment créer le modèle conceptuel des données et identifier les associations entre les entités, avec leurs cardinalités, puis en déduire les relations. Nous allons maintenant voir comment créer ces relations dans OpenBase de manière permanente.

Les relations permettent de matérialiser les liens existant entre des informations contenues dans plusieurs tables. Les relations permettent entre autre d’éviter la redondance d’informations.

Exemple : La table FILM contient le champ N°Réalisateur et aucune autre information sur le réalisateur. On ne stocke donc les informations sur le réalisateur qu’une seule fois dans la table REALISATEUR et non pour chaque film dans la table FILM. Ainsi, il n’y a pas redondance des informations. Le champ N°Réalisateur est une cléétrangère dans la table FILM, c’est-à -dire qu’il pointe vers le champ NumRealisateur de la table REALISATEUR.

Les types de relations

Il existe trois types de relations, correspondant aux 3 types de cardinalités du modèle conceptuel des données : un à un, un à plusieurs et plusieurs à plusieurs. Ici, nous ne nous intéressons qu'au maximum. Ce n'est pas toujours évident de déterminer quel genre de relation existe entre deux tables. Lors du choix des cardinalités, il a fallu se poser deux questions :

Les deux seules réponses possibles sont soit un soit plusieurs. On considère le « pire des cas » pour identifier la cardinalitéminimale et le « meilleur des cas » pour la cardinalitémaximale. Sur notre exemple, cela donne :

Finalement, pour trouver le type de relation, on ne s’intéresse qu'aux deux cardinalités maximales. Pour la Q1, la cardinalitémaximale est 1 et pour Q2, elle est égale à N. Nous obtenons donc une relation 1-N, c’est-à -dire une relation d'un à plusieurs de REALISATEUR vers FILM.

Ceci veut dire que l'on a une seule ligne contenant des informations sur un réalisateur dans la table REALISATEUR alors que l’on a plusieurs lignes correspond à ce réalisateur dans la table FILM. Chaque valeur du champ NumRéalisateur de la table REALISATEUR est unique. Il n'y a pas deux enregistrements (ou réalisateurs) avec le même numéro de réalisateur. Au contraire, dans la table FILM, vous pouvez retrouver le même numéro de réalisateur pour plusieurs enregistrements (films) différents.

Autres exemples de relation :

Application

Récupérez ce fichier correspondant à une base de données permettant de gérer les clients, les factures, les employés, les produits vendus par une société. Cette base de données contient déjà des tables et nous allons mettre en place des relations entre ces tables.

Mise en place des relations

OpenOffice Base offre la possibilitéde créer des relations permanentes entre les tables de votre base de données et de vérifier l'"intégrité" des relations entre les tables.

  1. Du menu Outils > Relations : vous accédez à un écran pour créer les relations entre les tables. Lorsque vous ouvrez cet écran pour la première fois, il n'y a pas de tables. Il faut donc les ajouter Insertion > Ajouter des tables. Ajoutez toutes les tables existant dans cette base de données.
  2. Nous allons lier les tables CLIENT et FACTURE. Vous pouvez utiliser soit la souris et faire glisser les champs d'un table à l'autre ou utiliser le menu Insertion > Relation. Une fois la relation mise en place, un lien apparait entre les deux tables.
  3. Vous pouvez alors éditer la relation pour la modifier. En particulier, sélectionnez l’option de Mise à jour :
    • L’option Mise à jour en cascade met à jour les enregistrements dans la ou les autres tables reliées.
    • L’option Supprimer en cascade efface les enregistrements de la table reliée qui ont le même champ en commun que l'enregistrement supprimé.

Les champs doivent être de même type !

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

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

Première exception : il est possible de faire une relation entre un champ de type AutoValeur et un champ de type Integer.

Autre exception : il est impossible de créer une relation de type un à plusieurs si les champs en commun sont de type AutoValeur. En effet, par définition, ce type de champ ne peut pas avoir deux fois la même information !

Essayez de relier le champ ID_Vendeur de la table FACTURE avec le champ Nom de la table EMPLOYE. Recommencez avec le champ Numero_poste.

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'est pas le cas, OpenOffice Base affiche une erreur et aucune relation ne peut être établie entre les tables.

Assurez vous d'avoir bien reliéles tables CLIENT et FACTURE. Essayez maintenant d'ajouter une ligne dans la table FACTURE pour un CLIENT ayant le numéro 6. Que se passe t-il ? Vous obtenez un message d'erreur car nous avons voulu faire correspondre un client numéro 6 de la table FACTURE avec un client numéro 6 de la table CLIENT qui visiblement n'existe pas !

Il faut attentivement lire le message pour comprendre ce qui arrive. Dans notre cas, c'est la phrase "Integrity constraint violation - no parent 6, table : Factures in statement" qui explique la situation : La donnée du champ ID_Client de la table FACTURE ne respectent pas les règles d'intégrité référentielle. Il fait référence à un numéro de client inexistant dans la table CLIENT.

L'option Modifier en cascade

Cette option met à jour les enregistrements de l'autre table qui ont le même champ en commun que l'enregistrement modifié.

Vérifiez que vous avez bien choisi l'option "modifier en cascade" pour la relation reliant la table CLIENT et FACTURE.

Modifiez le numéro du client de la table CLIENT 5 en 6. Rendez vous dans la table FACTURE pour constater le résultat.

Les relations de plusieurs à plusieurs

La création de relations de type plusieurs à plusieurs nécessitent plus de travail que les précédentes.

Prenons l'exemple de la création d'une relation entre les tables FACTURES et PRODUITS.

Il s'agit donc d'une relation N à N.

Il est impossible de créer directement cette relation. Il faut créer une table intermédiaire FACTURE-PRODUIT qui contient la cléprimaire des deux tables.

Il faut ensuite créer deux relations de type un à plusieurs entre les tables FACTURE et FACTURE-PRODUIT et entre PRODUIT et FACTURE-PRODUIT en utilisant le champ de la clé primaire des deux tables.

N'oubliez pas d'activer l'option de mise à jour en cascade.

Remplissez avec quelques exemples cette table