1 Introduction
2 Les associations particulières du MCD
3 Les entités particulières
4 Généralisation, spécialisation
5 Prise en compte des contraintes sur les entités et sur les associations
6. Conclusion
>>> Retour page précédente
Nous avons maintenant un MCD qui contient des contraintes, des spécialisations, des agrégats, etc. …
(MCD merise2 ou modèle étendu). Mais que devient le MR ?
Etudions chaque cas séparément.
2.1 Les associations ternaires (et n-aires)
Lorsque le cas se présente, faire comme pour les associations binaires non hiérarchiques.La clé primaire est la concaténation des identifiants de la collection d'entités de l'association. Tous ces attributs sont, en plus, des clés étrangères.
Soit le MR suivant :
Plongeur(ploNum, …)
Matériel(matNum, …)
Date(date)
Clé primaire : ploNum
Matériel(matNum, …)
Clé primaire : matNum
Date(date)
Clé primaire : date
L'association ternaire Emprunter, qui dit quel plongeur emprunte quel matériel à quelle date et contient la quantité empruntée, devient :
Emprunter(ploNum, matNum, date, quantité)
>> Anc. convention : Emprunter(ploNum#, matNum#, date#, quantité)
Clé primaire : matNum
Clé étrangère : ploNum référence ploNum dans Plongeur
Clé étrangère : matNum référence matNum dans Matériel
Clé étrangère : date référence date dans Date
Clé étrangère : ploNum référence ploNum dans Plongeur
Clé étrangère : matNum référence matNum dans Matériel
Clé étrangère : date référence date dans Date
>> Anc. convention : Emprunter(ploNum#, matNum#, date#, quantité)
2.2 Les associations réflexives
Une association réflexive est une association entre une entité et … elle même.
Exemple :
Une personne est enfant de plusieurs personnes, sauf les premiers de la liste.
Une personne peut être parent de plusieurs enfants.
Dans ce cas, le rôle de l'entité pour chaque "patte" de l'association est précisé.
Une personne est enfant de plusieurs personnes, sauf les premiers de la liste.
Une personne peut être parent de plusieurs enfants.

Dans ce cas, le rôle de l'entité pour chaque "patte" de l'association est précisé.
C'est ce rôle que l'on va utiliser pour nommer les attributs de la relation résultante :
Affilié(numParent, numEnfant)
>> Anc. convention : Affilié(numParent#, numEnfant#) : on a perdu le nom "d'origine" des attributs clés étragères !
Clé primaire : numParent, numEnfant
Clés étrangères : NumParent et numEnfant référencent numPers dans Personne
Clés étrangères : NumParent et numEnfant référencent numPers dans Personne
>> Anc. convention : Affilié(numParent#, numEnfant#) : on a perdu le nom "d'origine" des attributs clés étragères !
N'oublions pas d'indiquer quel attribut est référencé et dans quelle table.
Ceci est important si on a une base importante, ou si le nom des attributs ne fait pas penser à l'attribut référencé.
Remarquer que ce sont des clé étrangères. Retour index
3.1 L'agrégation
On a l'agrégat suivant :
Dans ce type de cas, "l'identifiant" de l'agrégat est composé des identifiants des deux entités de l'agrégat, comme si la future clé primaire de l'association Disponible était identifiant de l'agrégat "Disponibilité".
Ici, la clé primaire de Disponible se retrouvera dans la relation Resa car Réserver est une association hiérarchique issue d'une dépendance fonctionnelle entre l'agrégat et Resa.
Resa(numResa, …, numVoilier, numSem)
>> Anc. convention : Resa(numResa, …, numVoilier#, numSem#)
Tout se passe comme si l'association interne de l'agrégat était une entité et l'association externe associée à celle-ci.
Clé primaire : numResa
Clé étrangère : numVoilier référence numVoillier dans Voilier
Clé étrangère : numSem référence numSem dans Semaine
Clé étrangère : numVoilier référence numVoillier dans Voilier
Clé étrangère : numSem référence numSem dans Semaine
>> Anc. convention : Resa(numResa, …, numVoilier#, numSem#)
3.2 Entités dépendantes ou entité faibles
Exemple :
Immeuble et appartement : un appartement a un n° dans l'immeuble, si l'immeuble n'existe pas, l'appartement non plus.
L'identifiant de cette entité faible est dit identifiant relatif et nécessite la concaténation de celui de l'entité maîtresse.
L'appartement aura comme identifiant le n° de l'immeuble + celui de l'appartement dans l'immeuble dans le schéma relationnel.
Modélisation :
Le schéma relationnel de cette association est :
Immeuble et appartement : un appartement a un n° dans l'immeuble, si l'immeuble n'existe pas, l'appartement non plus.
L'identifiant de cette entité faible est dit identifiant relatif et nécessite la concaténation de celui de l'entité maîtresse.
L'appartement aura comme identifiant le n° de l'immeuble + celui de l'appartement dans l'immeuble dans le schéma relationnel.
Modélisation :

Le schéma relationnel de cette association est :
Immeub(n°Imm, …)
Appart(n°Imm, n°App, ...)
>> Anc. convention : Appart(n°Imm#, n°App, ...)
Autres cas courants : l'hôtel et les chambres, le film et les K7 louées, ...
Clé primaire : n°Imm
Appart(n°Imm, n°App, ...)
Clé primaire : n°Imm , n°App
Clé étrangère : n°Imm référence n°Imm dans Immeub
Clé étrangère : n°Imm référence n°Imm dans Immeub
>> Anc. convention : Appart(n°Imm#, n°App, ...)
La clé primaire de la relation dépendante est la concaténation de l'attribut de la relation déterminante suivi de l'atribut qui était l'identifiant de l'entité faible.
L'attribut de la relation déterminante est aussi clé étrangère. Retour index
4.1 Introduction
L'entité générale se caractérise par l'ensemble des propriétés communes aux entités spécialisées.On rencontre, dans les entités spécialisées :
- des propriétés utiles aux unes mais pas aux autres,
- des associations spécifiques aux unes mais pas aux autres.
Lorsqu'on rédige le MR d'une spécialisation, l'entité générale est faite comme si les spécialisations n'existaient pas (ni les associations qui sont reliées à ces entités spécialisées).
Les entités spécifique héritent de l'identifiant de l'entité générique.
Exemple :
Dans une agence de location, les propriétaires et les locataires sont des tiers (=personnes, un locataire peut être propriétaire et un proprio, locataire).
Mais ils disposent d'informations différentes :
Des appart. Appartiennent aux proprio, les locataires effectuent des résa.
Les propriétaires sont payés, on mémorise le n° de compte en banque, des locataires, on retiendra le nombre d'enfants pour affiner l'offre.
Le schéma sera le suivant :
Le MR, des entités Personne, Proprio et Locataire, sera le suivant :
De même pour le club de plongée :
Il existe deux types de matériels, celui qui est propriété de plongeurs et celui qui est propriété du club.
Retour index
Dans une agence de location, les propriétaires et les locataires sont des tiers (=personnes, un locataire peut être propriétaire et un proprio, locataire).
Mais ils disposent d'informations différentes :
Des appart. Appartiennent aux proprio, les locataires effectuent des résa.
Les propriétaires sont payés, on mémorise le n° de compte en banque, des locataires, on retiendra le nombre d'enfants pour affiner l'offre.
Le schéma sera le suivant :

Le MR, des entités Personne, Proprio et Locataire, sera le suivant :
Personne(numPers, nomP, prenomP)
Proprio(numPers, n°CpteBanq)
Locataire(numPers, nbreEnfants)
>> Anc. convention : Personne(numPers, nomP, prenomP) ; Proprio(numPers#, n°CpteBanq) ; ...
Clé primaire : numPers
Proprio(numPers, n°CpteBanq)
Clé primaire : numPers
Clé étrangère : numPers référence numPers dans Personne
Clé étrangère : numPers référence numPers dans Personne
Locataire(numPers, nbreEnfants)
Clé primaire : numPers
Clé étrangère : numPers référence numPers dans Personne
Clé étrangère : numPers référence numPers dans Personne
>> Anc. convention : Personne(numPers, nomP, prenomP) ; Proprio(numPers#, n°CpteBanq) ; ...
De même pour le club de plongée :
Il existe deux types de matériels, celui qui est propriété de plongeurs et celui qui est propriété du club.

Matériel(noIdM, descM)
MatérielClub(noIdM, qtéDispo)
MatérielPerso(noIdM, dispoM, noPlo)
>> Anc. convention : MatérielPerso(noIdM#, dispoM, noPlo#) ; ...
MatérielPerso reçoit la clé étrangère noPlo de plongeur au travers de Appartenir comme d'habitude dans le cas d'une association hiérarchique.
Clé primaire : noIdM
MatérielClub(noIdM, qtéDispo)
Clé primaire : noIdM
Clé étrangère : noIdM référence noIdM dans Matériel
Clé étrangère : noIdM référence noIdM dans Matériel
MatérielPerso(noIdM, dispoM, noPlo)
Clé primaire : noIdM
Clé étrangère : noIdM référence noIdM dans Matériel
Clé étrangère : noPlo référence noPlo dans Plongeur
Clé étrangère : noIdM référence noIdM dans Matériel
Clé étrangère : noPlo référence noPlo dans Plongeur
>> Anc. convention : MatérielPerso(noIdM#, dispoM, noPlo#) ; ...
5.1 Contraintes exprimables ou non
Les contraintes ne sont généralement pas visibles dans le schéma relationnel et on peut les indiquer sous forme de commentaires.Sauf qu'une contrainte qui exprime une pseudo dépendance fonctionnelle est exprimable.
5.2 Contraintes sur les entités
Elles ne sont pas exprimables dans le SRD sauf sous forme de commentaires.Reprenons le cas des plongeurs. Nous avons le schéma relationnel suivant :
Matériel(noIdM, descM)
MatérielClub(noIdM#, qtéDispo)
MatérielPerso(noIdM#, dispoM, noPlo#)
Note 1 : MatérielClub et MatérielPerso sont disjoints et représentent la totalité du matériel géré.
Clé primaire : noIdM
MatérielClub(noIdM#, qtéDispo)
Clé primaire : noIdM
Clé étrangère : noIdM référence noIdM dans Matériel
Clé étrangère : noIdM référence noIdM dans Matériel
MatérielPerso(noIdM#, dispoM, noPlo#)
Clé primaire : noIdM
Clé étrangère : noIdM référence noIdM dans Matériel
Clé étrangère : noPlo référence noPlo dans Plongeur
Clé étrangère : noIdM référence noIdM dans Matériel
Clé étrangère : noPlo référence noPlo dans Plongeur
Note 1 : MatérielClub et MatérielPerso sont disjoints et représentent la totalité du matériel géré.
Les contraintes d'Exclusion (X, sans totalité), de Partition (XT ou + : Exclusion et Totalité) ne sont jamais exprimées autrement que par un commentaire.
La contrainte de Totalité (T, sans exclusion) peut être exprimée dans un cas particulier.
Exemples de commentaires
Exclusion : Le matériel de plongée personnel n'est pas celui mis à la disposition par le club. Il existe du matériel n'étant pas mis à la disposition des membres.
Nous ajouterons la remarque :
MatérielClub et MatérielPerso sont disjoints
Partition : Le matériel de plongée personnel peut être mis à la disposition par le club. Il existe du matériel n'étant pas mis à la disposition des membres.
Nous ajouterons la remarque :
MatérielClub et MatérielPerso sont disjoints et représentent la totalité du matériel géré.
Totalité (normale) : Le matériel de plongée personnel peut être mis à la disposition par le club. Il n'existe aucun autre matériel géré.
Nous ajouterons la remarque :
MatérielClub et MatérielPerso représentent la totalité du matériel géré.
Certaines totalités peuvent être exprimées si les occurences d'une sous entité recouvrent toujours celles d'une autre.
Exclusion : Le matériel de plongée personnel n'est pas celui mis à la disposition par le club. Il existe du matériel n'étant pas mis à la disposition des membres.
Nous ajouterons la remarque :
MatérielClub et MatérielPerso sont disjoints
Partition : Le matériel de plongée personnel peut être mis à la disposition par le club. Il existe du matériel n'étant pas mis à la disposition des membres.
Nous ajouterons la remarque :
MatérielClub et MatérielPerso sont disjoints et représentent la totalité du matériel géré.
Totalité (normale) : Le matériel de plongée personnel peut être mis à la disposition par le club. Il n'existe aucun autre matériel géré.
Nous ajouterons la remarque :
MatérielClub et MatérielPerso représentent la totalité du matériel géré.
5.3 Les contraintes sur les associations
Ici, seule l'inclusion (une occurrence d'une association doit exister dans une autre association) peut être assimilée à une dépendance fonctionnelle.Les autres contraintes ne sont pas exprimables autrement que par un commentaire.
5.3.1 Inclusion exprimable
Elle sera exprimée en ajoutant un référencement de la clé étrangère commune au pivot de l'association incluse vers celle de l'association globale.
Exemple :
Soit le SRD suivant d'une base de donnée sur des bandes dessinées :
Soit le SRD suivant d'une base de donnée sur des bandes dessinées :
Personnage(perCode, perNom, …)
Collection(colCode, colNom, …)
Album(albCode, albTitre, …, colCode) ;
Auteur(genCode, genDesc, …)
Clé primaire : perCode
Collection(colCode, colNom, …)
Clé primaire : colCode
Album(albCode, albTitre, …, colCode) ;
Clé primaire : albCode
Clé étrangère : colCode référence colCode dans Collection (un album appartient à une collection)
Clé étrangère : colCode référence colCode dans Collection (un album appartient à une collection)
Auteur(genCode, genDesc, …)
Clé primaire genCode
Voyons la suite …
Exemple A ; Une seule entité pivot :
Un personnage qui participe à un album d'une collection, appartient forcément à la collection.
Un personnage d'une collection ne participe pas forcément à tous les albums.
Exemple 2, Plusieurs entités pivot :
Dans la collection de Tintin, dessinée par Hergé, un personnage qui prononce un juron dans un album, y participe forcément.
La réciproque est fausse : un personnage participant à un album n'y prononce pas forcément de juron.
Un personnage qui participe à un album d'une collection, appartient forcément à la collection.
Un personnage d'une collection ne participe pas forcément à tous les albums.
Appartenir(perCode, colCode)
Participer(perCode, albCode)
>> Anc. convention : Participer(perCode#, colCode#)
Attention, cette représentation n'exprime pas la contrainte !!
Clé primaire : perCode, colCode
Clé étrangère : perCode référence perCode dans Personnage
Clé étrangère : colCode référence colCode dans Collection
Clé étrangère : perCode référence perCode dans Personnage
Clé étrangère : colCode référence colCode dans Collection
Participer(perCode, albCode)
Clé primaire : perCode, colCode
Clé étrangère : albCode référence albCode dans Album,
Clé étrangère : perCode référence perCode dans Personnage
Clé étrangère (Contrainte) : perCode référence perCode dans Appartenir (Inclusion)
Clé étrangère : albCode référence albCode dans Album,
Clé étrangère : perCode référence perCode dans Personnage
Clé étrangère (Contrainte) : perCode référence perCode dans Appartenir (Inclusion)
>> Anc. convention : Participer(perCode#, colCode#)
Attention, cette représentation n'exprime pas la contrainte !!
Exemple 2, Plusieurs entités pivot :
Dans la collection de Tintin, dessinée par Hergé, un personnage qui prononce un juron dans un album, y participe forcément.
La réciproque est fausse : un personnage participant à un album n'y prononce pas forcément de juron.
Prononcer(albCode, perCode, juron)
Clé primaire : perCode, colCode
Clé étrangère : albCode référence albCode dans Album,
Clé étrangère : perCode référence perCode dans Personnage
Clé étrangère (Contrainte) : (albCode, perCode) référence (albCode, perCode) dans Participer (Inclusion)
Clé étrangère : albCode référence albCode dans Album,
Clé étrangère : perCode référence perCode dans Personnage
Clé étrangère (Contrainte) : (albCode, perCode) référence (albCode, perCode) dans Participer (Inclusion)
5.3.2 Inclusion non exprimable
Exemple 3 :
Un client qui est suivi par un (et un seul) représentant passe forcément des commandes. Un client qui passe des commandes n'est pas forcément suivi par un représentant.
Il y a bien une inclusion de l'association Suivre dans l'association Passer avec l'entité Client pour pivot (c'est le Client qui est suivi et qui passe des commandes).
Le MR ressemble à ça :
Un client qui est suivi par un (et un seul) représentant passe forcément des commandes. Un client qui passe des commandes n'est pas forcément suivi par un représentant.
Il y a bien une inclusion de l'association Suivre dans l'association Passer avec l'entité Client pour pivot (c'est le Client qui est suivi et qui passe des commandes).
Le MR ressemble à ça :
Client(cliNum, cliNom, …, rCode)
Représentant(rCode, rNom, …)
Commande(cdeNum, …, cliNum)
Clé primaire : cliNum
Clé étrangère : rCode référence rCode dans Représentant
ou rCode peut prendre la valeur nulle.
Clé étrangère : rCode référence rCode dans Représentant
ou rCode peut prendre la valeur nulle.
Représentant(rCode, rNom, …)
Clé primaire : rCode
Commande(cdeNum, …, cliNum)
Clé primaire : cdeNum
Clé étrangère : cliNum référence cliNum dans Client.
Clé étrangère : cliNum référence cliNum dans Client.
La contrainte s'exprimerait en disant que si, pour un client, rCode n'est pas nul, alors il existe au moins une commande qui contient le n° de ce client dans CliNum. On ne peut pas la faire apparaître avec des contraintes exprimant une dépendance fonctionnelle.
5.4 Conclusion
Seule une contrainte d'inclusion peut apparaître dans le schéma relationnel, si (et seulement si) elle peut être exprimée sous forme d'une dépendance fonctionnelle entre deux entités ou deux associations. Retour index
La plus grande difficulté de passer du SCD au SRD vient qu'il devient (très) courant qu'une clé étrangère soit aussi, ou aie un rôle dans la clé primaire.
Pour éviter toute ambiguïté, il convient de bien comprendre ces deux notions qui expriment des concepts totalement différents.
La clé primaire est un attribut ou un ensemble d'attributs dont la valeur identifie de façon unique chaque tuple (ligne, enregistrement) de la relation.
fouNum (clé primaire) | fouNom | ... |
---|---|---|
1 | abc | ... |
2 | def | ... |
100 | ghi | ... |
F62354 | klm | ... |
... |
Une clé étrangère d'une table TA est un champ CA dont le domaine (les différentes valeurs possibles) doit figurer dans le domaine (les différentes valeurs existantes) d'un autre champ CB d'une autre table TB. Ce dernier (CB) étant toujours (ou presque) la clé primaire de la table où il figure (TB).
Une clé étrangère est une vraie dépendance fonctionnelle 'clé primaire de TA' -> CB.
|
| |||||||||||||||||||||||||||||||||||||||||||
La clé étrangère categorieCode de Article fait référence et DOIT correspondre au champ clé primaire categorieCode de la table Catégorie. |