Le Modèle Relationnel de Données Les Contraintes du Modèle
I. Deux Exemples :
Exemple 1.
Employés Départements
NumE NomE Status Dept NomD Etage E12 Aziza Technicien Elec Info 1 E03 Amine Administratif Info Elec 2
E01 Fatima Stagiaire ? Indus 2
E02 Ali Technicien Info Meca 3
E45 Khalid Ingénieur Meca
E06 Karim Administratif Elec E09 Saida Ingénieur Info
Clés soulignées NB. Le signe " ? " signifie valeur indéfinie: non applicable ou inconnue.
On parle de valeur NULL. (Ne pas confondre avec nulle, i.e. égale à zéro,
On a :
✔ L’attribut NumE est Clé primaire de la relation Employés
✔ L’attribut NomD est Clé Primaire de la relation Departements. (Ang. Primary Key)
✔ Une « relation » entre les deux tables : La colonne Dept dans Employés fait référence à une ligne de la table Départements.
✔ Par Jointure, on peut savoir dans quel étage travaille un employé donné.
✔ On appelle une telle colonne Clé Etrangère. (Ang. Foreign Key)
✔ Cela implique une contrainte sur les données: les valeurs de la colonne Dept dans Employés
doit figurer parmi les valeurs de la colonne NomD de la Départements.
✔ Notation : R [A], désignant la projection de R sur la A. La contrainte s’exprime par la formule
Employés [Dept] ⊆ Départements [NomD]
✔ On appelle cette formule:
Intégrité Reférentielle
✔ Elle entraîne une contrainte sur les mises à jours des données. On ne peut pas toujours supprimer un département ou changer son nom. Il y a peut-être des employés qui sont affectés à ce département.
Exemple 2
Livre
NumInv Titre Auteur Qte 323 Bases De
Données
C.J. Date 3 124 Algorithmes D. Knuth 2 1110 Programmation B. Meyer 6 241 Langage C B. Kernighan 5 321 Unix K. Thompson 2 312 Langage Java J. Gosling 8
Abonné Prêt
NumAb Nom Prénom NumInv NumAb DatePrêt
12 Benali Ali 323 10 1/11/2007
10 BenSaid Said 124 12 2/11/2007
32 Karim Karima 323 12 3/10/2007
14 Rajaoui Rajaa 241 32 3/10/2007
321 14 13/10/2007 323 32 13/09/2007
On a :
✔ NumInv, clé primaire de la relation Livre
✔ NumAb, clé primaire de la relation Abonné
✔ La combinaison (NumInv, NumAb) clé primaire de Prêt.
✔ Numinv de la table Prêt, permet d’accéder à la table Livre pour connaître le nom du livre emprunté.
✔ NumInv est une clé étrangère dans cette table Prêt. Elle fait référence à la table Livre.
✔ On a donc la contrainte référentielle :
Prêt [NumInv] ⊆ Livre [NumInv].
✔ Le même raisonnement permet de dire :
Prêt [NumAb] ⊆ Abonné [NumAb].
✔ NB. Dans cet example, NumInv (resp. NumAb), est clé étrangère en plus du fait que la combinaison (NumInv, NumAb) est clé primaire dans cette même table.
II. Clés Primaire et Etrangère
✔ Clé primaire
On appelle Clé Primaire d’une relation, un attribut (ou collection d’attributs) dont la valeur identifie chaque tuple de la relation. Autrement dit, dont la valeur est unique d’un tuple à un autre.
✗ Dans le cas plus d’un attribut, la clé primaire doit être minimale (aucun attribut n’est superflu).
✗ Il se peut qu’il existe plusieurs attributs (ou collections) ayant la propriété d’unicité et de minimalité. On les appelle clés candidates.
✗ Exemples :
o Numinv dans la table Livre.
o (NumInv, NumAb) dans la table Prêt
o (NumInv, Nom) a la propriété d’unicité, mais pas celle de minimalité o (Titre, Auteur) est clé candidate de la table Livre.
✗ La clé primaire est soulignée dans le schéma d’une relation.
Prêt (NumInv, NumAb, Date) Départements (NomD, Etage)
✔ Clé Etrangère
On appelle Clé Etrangère dans une relation S, un attribut (ou collection d’attributs) dont la valeur est définie sur le même domaine que la clé primaire d’une autre relation C.
✗ S est dite source de la clé étrangère, et C cible de la clé étrangère.
✗ C et S, ne sont pas nécessairement distinctes. (voir exemple plus loin)
✗ Exemples :
o Dept est clé étrangère dans Employés.
o Départements (dont la clé primaire est NomD) est cible de la clé étrangère.
III. Les Deux Contraintes du Modèle Relationnel
✔ Contrainte d’Entité
Dans une relation, la clé primaire ne peut être indéfinie. Ne peut accepter une valeur NULL, c’est à dire indéfinie (inconnue ou inapplicable).
✗ Dans une relation, un n-uplet représente un objet ou une entité de l’application. Cette entité
n’existerait pas si elle n’était pas identifiée
✗ La clé primaire représente cet identifiant
✗ C’est d’ailleurs le seul moyen d’accéder à une ligne dans une table.
NumAb Nom Prénom
? Benali Ali
et
NumInv NumAb DatePrêt
323 ? 1/11/2007
N’auraient pas de sens.
✔ Contrainte Référentielle.
Dans une relation S, la valeur d’une clé étrangère (attribut E) est soit indéfinie (NULL), soit de valeur v, où v est une valeur de clé primaire (attribut P) d’une relation cible C.
On note :
S [ E ] ⊆ C [ P ]
✗ C n’est pas forcément distincte de S.
✗ Exemples :
o Prêt [NumInv] ⊆ Livre [NumInv]
o Prêt [NumAb] ⊆ Abonné [NumAb]
o Employés [Dept] ⊆ Départemens [NomD]
✗ Notation de schéma :
Employés
NumE NomE Status Dept
Départements
NomD Etage
Abonné
Prêt
- NumAb - Nom - Prénom - NumInv
- NumAb
- Date Livre
- NumInv - Titre - Auteur - Qte
✔ Exercice :
Etudier les clés primaires et étrangères des exemples suivants. En déduire les contraintes référentielles.
✗ Client (NumC, Nom, Adresse)
Commande (NumCde, DateCde, NumCli)
✗ Client (NumC, Nom, Adresse)
Commande (NumCde, DateCde, NumCli)
DétailCommande (NumCde, NumLigne, NumProd, Qte) Produit (NumP, NomP, Prix)
✗ Employé (NumE, NomE, Salaire, Dept)
Département (Nomd, Etage, Mgr) où Mgr est le n° Employé du chef de département
✗ Employé (NumE, NomE, Salaire, Mgr)
III. Les Règles de Mise à Jour Associées.
✔ Problème : Modification/suppression de valeur de clé primaire. Que se passe t-il pour les clés étrangères qui y font référence ?
✔ Exemples :
1. Dans la table Livre, NumInv ‘323’ devient ‘626’. Dans la table Prêt ‘323’ figure comme valeur de clé étrangère dans deux lignes (le livre est emprunté par deux abonnés).
2. De même si on supprime dans la table Livre, la ligne ‘323’ concernant ce livre.
3. NB. La clé primaire ‘1110’ de Livre ne pose pas de problème. Il n’y a pas de clé étrangère ayant cette valeur.
4. Dans la table Départements, même type de problème : la valeur clé primaire ‘Méca’
change ou est supprimée (le département ‘Méca’ change de nom ou est supprimé).
Dans la table Employés, ‘Méca’ figure comme valeur de clé étrangère (Il y a un employé affecté à ce département).
✔ Solution : Il y a trois type de solutions.
✗ Refuser, la mise à jour d’une clé primaire, si une contrainte référentielle est violée (une clé étrangère de même valeur existe).
✗ Rendre NULL, la valeur de clé étrangère ayant été touchée
✗ Propager (Ang. Cascade) la mise à jour vers la valeur de clé étrangère ayant été touchée (la modifier ou supprimer la ligne)
✔ Exemples :
1er cas : La valeur NumInv 323 devient 626.
NumInv Titre Auteur Qte 626 Bases De
Données
C.J. Date 3
323
NumInv NumAb DatePrêt 323 10 1/11/2007 124 12 2/11/2007 323 12 3/10/2007
On peut soit :
✗ Refuser. Le livre 323 figure dans la table Prêt (il est emprunté)
✗ Mettre à NULL. Impossible car NumInv ne peut être indéfini (Règle d’entité)
NumInv NumAb DatePrêt Null 10 1/11/2007
124 12 2/11/2007 Null 12 3/10/2007
✗ Propager.
NumInv NumAb DatePrêt 626 10 1/11/2007 124 12 2/11/2007 626 12 3/10/2007
✗ Le concepteur doit donc choisir refuser ou propager selon l’application.
4e cas : La valeur ‘Méca’ change ou est supprimée dans la table Départements .
Employés Départements
NumE NomE Status Dept NomD Etage E01 Fatima Stagiaire Null Indus 2 E02 Ali Technicien Info Proc 3 E45 Khalid Ingénieur Null Meca
✗ Ici, on rend la valeur de la clé étrangère Null, car c’est possible dans ce cas.
✗ Sinon, il faut refuser, le temps de changer l’affectation des employés.
Exercice : Etudier les règles de mise à jours pour les exercices précédents (p11)