Maude Manouvrier
La reprodution de e doumentpar tout moyen quee soitest interdite
onformémentaux artilesL111-1 et L122-4 du ode de lapropriété intelletuelle
Attention, e doument peut omporter des erreurs, à utiliser don en
onnaissane de ause!!
1
Exerie 1
Enoné de l'exerie
QuestionID Intitulé Réponse NiveauDifficulté Thème
QUESTION ClientID Nom Prénom Adresse DateNaissance
CLIENT
PassageCodeID Date Heure LieuExamen EXAMEN_CODE
NombreFautes RESULTAT_SEANCE
NombreFautes RESULTAT_EXAM
SEANCEID DATE HEURE SEANCE−CODE
Numéro POSITION_QUESTION
CD−ROM CdRomID Editeur NombreFautes
EST_AUTORISE A PASSER
ASSISTE_A NombreFautes
EST_COMPOSE_DE CD−ROM CdRomID Editeur
QuestionID Intitulé Réponse NiveauDifficulté Thème
QUESTION
CONTIENT Numéro
SERIE SérieID ClientID
Nom Prénom Adresse DateNaissance
CLIENT
PassageCodeID Date Heure LieuExamen EXAMEN_CODE
PENDANT EST_DIFFUSE
SEANCEID DATE HEURE SEANCE−CODE
MODELISATION UML MODELISATION ENTITE − ASSOCIATION
ASSISTE_A
EST_AUTORISE_A_PASSER
*
CONTIENT
0:N 1:M
1:N 0:N
6:6
6 40
40:40 1:1
SERIE SérieID SérieID
DE
COMPOSE EST
1:1
0:N
EST_DIFFUSE_PENDANT
1
* 0..8
0:8
* 1..*
1
1..*
Figure1: ModélisationE/Aet UMLdelabasededonnéesd'unel'auto-éole.
Uneauto-éole souhaiteonstruire une base dedonnées pour gérerlesexamens théoriques du
odedelaroutedesesélèves. Chaqueélèveestidentiéparunnumérouniqueetestaratérisépar
unnom, unprénom,uneadresseetunedatedenaissane. Chaqueélèveassisteàplusieursséanes
de ode (autant qu'ille souhaite). Chaqueséaneest aratériséepar une date et une heure. A
haqueséanedeode, ledireteurdel'auto-éolehoisitunesérie dequestionssurunCD-ROM.
Chaque CD-ROM est identié par un numéro et est aratérisé par un nom d'éditeur. Chaque
CD-ROMestomposéde6séries,numérotéesde1à6. Chaquesérieestomposéede40questions.
Chaque question est identiée par un intitulé et est aratérisée par une réponse, un niveau de
diulté et un thème. Unemême questionpeutapparaîtredans plusieursséries aveun numéro
d'ordrepourhaquesérie ;parexempleune mêmequestionpeutapparaîtreommequestionN
◦
2
danslasérie5duCD-ROM15etommequestionN
◦
12danslasérie3duCD-ROM4. Unemême
sériepeutêtreprojetéeplusieursfoisàdesséanesdiérentes. Lorsqu'unélèveassisteàuneséane,
il obtientlenombredefautes(unenote sur40)qu'ilafaitpourlasérie passéependantlaséane.
defautesinférieurouégalà5,ledireteurdel'auto-éolel'autoriseàpasserl'examenthéoriquedu
odedelarouteàunedate donnée(unseul examenpourunedatedonnée). L'auto-éole nepeut
présenterque8élèvesmaximumàhaquedated'examen. Lesélèvesayantobtenuplusde5fautes
à l'examensont realéset doivent assisterde nouveau àdesséanes deode avant depouvoirse
représenteràl'examen.
Labasededonnéesdoitpermettrederépondreàdesrequêtestellesque"Quelestlenombremoyen
defautespourlasérie
5
duCD-ROM14
?","Quelsélèvespeuventseprésenterauprohainexamenduodedelaroute?","Quelsélèvesontéhouéaumoins unefoisàl'examen?"et.
La gure 1présente lamodélisation Entité/Assoiation (format Merise)et lamodélisation UML
del'énoné. LesexpliationsnesontdonnéesquepourleshémaE/A maispeuventêtreadaptées
aushémaUML.Pouruneompréhensiondeladiéreneentreunemodélisation E/AouUMLet
lepassageaurelationnel, vouspouvez vousreporteràl'ouvrage[4℄. Lesshémasde modélisation
i-avantsontsémantiquementlairs. Néanmoins,quelspointsnéessitentd'êtrepréisés.
•
L'ensemble d'entités Serie est un ensemble d'entités faibles de CD-ROM, au format Merise(ou une assoiation qualiée en UML). En eet, e hoix de modélisation a été fait pour
représenterlefaitquelenumérod'unesérieestrelatifauCD-ROMauquellasérieappartient.
•
Lesardinalités del'assoiationentrelesensemblesd'entités SerieetCD-ROMsont1:1-6:6, arunesérie appartientàununiqueCD-ROM et unCR-ROM ontientexatement6sériesde questions. Le prinipe est le même pour les ardinalités de l'assoiation entre Serie et
Question : une série ontient exatement 40 questions (ardinalité
40 : 40
). En revanhe,unemême questionpeutapparaîtredansplusieurssériesave unnumérod'ordrediérentà
haquefois,d'oùlaardinalité
1 : N
etl'attributNuméroquiaratérisel'assoationontient.•
L'attributNombreFautesestunattribut de l'assoiationentreles ensemblesd'entités Client etExamen_Codeet del'assoiationentrelesensemblesd'entités ClientetSeane_Code. Eneet,etattribut aratérisel'assoiationet nonpasunlient,uneséanedeodeouenore
unexamendeode. Ilaratériselelienentredeuxentitésdeesensembles.
Déduisezleshémarelationneldelabase dedonnéesorrespondante.
Vous préiserez les lés primaires des relations en les soulignant ainsi que les lés étrangères en
lessignalantparun#etenpréisantàquoiellesfontréférene.
Dansvotreshémarelationnel,haquerelationdoitêtrespéiéedelamanièresuivante :
N om
(att 1,...,att n)oùN om
estlenomdelarelationetatt 1, ..., att nsontdesnomsd'attributs.
N om
estlenomdelarelationetatt 1, ..., att nsontdesnomsd'attributs.
Le nom de la relation doit obligatoirement avoir un lien ave les noms des ensembles d'entités
(lasses)oudesassoiationsdushémademodélisationdelaquestion1.
Vous donnerez des expliations laires et onises du passage au relationnel. Vous préiserez no-
tamment pourquoi et omment vous réez ou modiez ertaines relations (1 ligne maximum par
relation).
Corretion de l'exerie 1
Le modèle relationnel déduit de la modélisation i-dessus est le suivant. Les lés primaires sont
soulignées. Les lés étrangères sont préédées d'un '#'. Pour un rappel de es notions, vous
pouvezvousréférerauxpages56à60de[2℄. Lepassaged'unshémademodélisationàunmodèle
relationnelestrappeléauxpages120à143de[4℄.
Client(ClientID,Nom, Prénom,Adresse,DateNaissane)
Cetterelationestdéduitedupassageaurelationneldel'ensembled'entités(oulasse)Client.
CD-ROM(CdRomID,Editeur)
Cetterelation est déduite dupassageaurelationnel de l'ensembled'entités (ou lasse)CD-
ROM.
Cetterelationestdéduitedupassageaurelationneldel'ensembled'entités (oulasse)Ques-
tion.
Serie(SerieID,#CdRomID)
Cette relation est issue du passage au relationnel de l'ensemble d'entités (lasses) Serie.
En modélisation E/A, l'ensemble d'entités Serieétant unensemble d'entités faibles deCR-
ROM, la lé primaire de la relation Serie est omposéede l'identiateur de la série et de
l'identiateurduCD-ROMauquellasérieappartient.
ContenuSerie(#QuestionID,SerieID,#CdRomID,Numéro)
Cette relation est déduite du passage au relationnel de l'assoiation Contient. Le ou-
ple d'attributs #CdRomID,#SerieID fait référene à la lé primaire de la relation Serie.
L'attribut #QuestionID fait référene à la lé primaire de la relation Question. Il ne faut
pasoublier l'attributNuméroquiaratérise l'assoiationontient. Seane_Code(SeaneID,
Date,Heure, #CdRomID,#SerieID)
Cetterelationestissuedupassageaurelationneldel'ensembled'entités(lasses)Seane_Code.
Le ouple d'attributs #CdRomID est une lé étrangère qui fait référene à la lé primaire
de la relation Serie. Ce ouple d'attributs a été ajouté lors du passage au relationel de
l'assoiationest_diusée_pendant,uneseulesérie(d'unCR-ROMdonné)étantdiuséepen-
dantuneséanedeode(ardinalité1:1).
Partiipation(#ClientID, #SeaneID,NombreFautes)
Cette relation est issue du passage au relationnel de l'assoiation assiste_à. Les attributs
#ClientIDet #SeaneIDsontdeslés étrangèresqui fontrespetivementréférenesauxlés
primairesdesrelationsClient etSeane. Eneet, unlient peutassisteràplusieursséanes
et,lorsd'uneséane, il y aplusieurslients. Ilne faut pasoublierl'attribut NombreFautes
quiaratérisel'assoiationassiste_à.
Examen_Code(PassageCodeID,Date, Heure, LieuExamen)
Cetterelationest déduite dupassageaurelationnelde l'ensembled'entités (oulasse)Exa-
men_Code.
PassageCode(#PassageCodeID, #ClientID,NombreFautes)
Cetterelation estdéduite dupassageaurelationneldel'assoiationest_autorisé_à_passer.
Lesattributs #PassageCodeIDet #ClientIDfont référeneaux lés primaires des relations
Examen-Codeet Client.
Exerie 2
Enoné de l'exerie
On souhaite onstruire une base de données gérantdes revues et les artilesde es revues. Une
revueestaratériséeparunnometunepériodiité. Chaquerevueparaitsouslaformedenuméros,
haquenuméroétantidentiéparunnombrerelatifàlarevueetàl'annéeenours(ex. lenuméro
N
◦
12 deLinux Magazine en2003 est diérentdunuméro N
◦
12de Linux Magazine en2004). Un
numéro est également aratérisé parun nombre de pages. Chaque numéroontient des artiles
érits parunou plusieursauteurs. Un auteur est aratériséparunnom, unprénom, ainsiqu'un
email. Chaque artile possède un titre et un ontenu. Un même artile peut apparaître dans
plusieursplusieursnumérosd'unemêmerevueoudediérentes revues. Lorsqu'unartileapparaît
dans un numéro d'une revue, il a une page de début et une page de n. Un artile peut faire
référene àd'autres artiles,en préisant le numéro et la revue dans lesquelsl'artile référené a
étépublié.
Nom Revue
ID
NbPages Année
Numéro comporte
Titre Contenu
Article
fait référence à écrit
Nom Revue
Titre Contenu
Article Email Prénom Nom ID
Auteur
ID
NbPages Année
Numéro
Publication PageDébut PageFin Modélisation Entité / Association
Périodicité
1:N 1:M
1:M 1:1
0:N 0:M Auteur
Email Prénom
ID Nom
PageDébut PageFin 1:N
1:N
Modélisation UML Périodicité
1
écrit
1..*
1..* 1..*
1..* est publié dans 1..*
*
* NuméroID
référence à
fait
comporte
est publié dans
Figure2: Modélisation E/AetUMLd'unebasededonnéesgérantdesrevues.
La base de données doit permettre de répondre à des requêtes telles que "Combien de numéros
de Linux Magazine sontparus en2004?", "Quelssontlestitres desartilesparusdans aumoins
deux revues diérentes ?", "Quels sont les auteurs ayant publiés dans le numéro 3 de la revue
L'Histoireen2004?"et.
La gure 2présente lamodélisation Entité/Assoiation (format Merise)et lamodélisation UML
del'énoné. LesexpliationsnesontdonnéesquepourleshémaE/A maispeuventêtreadaptées
aushémaUML.Pouruneompréhensiondeladiéreneentreunemodélisation E/AouUMLet
lepassageaurelationnel, vouspouvez vousreporteràl'ouvrage[4℄. Lesshémasde modélisation
i-avantsontsémantiquementlairs. Néanmoins,quelspointsnéessitentd'êtrepréisés.
•
L'ensemble d'entités Numéro est un ensemble d'entités faibles de Revue au format Merise(ou une assoiation qualiée en UML). En eet, e hoix de modélisation a été fait pour
représenterlefaitquel'identiateur d'unnuméroestrelatifàlarevueàlaquelle lenuméro
appartient. Un numérod'unerevue donnéeétantidentié parunnombreet une année,es
deuxattributs(IDetAnnée)sontsoulignés.
•
Lesardinalitésdel'assoiationentrelesensemblesd'entitésNuméroetArtilesont1:N-1:M, arunartilepeutapparaîtredansplusieursnumérosetunnuméroontientplusieursartiles.Leprinipeest lemême pourlesardinalitésdel'assoiationentreAuteuret Artile.
•
Lesattributs PageDébut et PageFin aratérisentl'assoiation entre Artile et Numéro(un numéroétantrelatifàunerevue,ilestinutiledefaireuneassoiationaveRevue). Eneet,lapagededébutetlapagedenpeuventvarier,pourunmêmeartile,lorsqu'ilparaîtdans
plusieursnumérosdiérents.
•
Unartilepeutfaireréféreneàunautreartile. Lenuméroetlarevuedanslesquelsl'artileréférenéapparaît doivent êtrepréisés dans l'artile référençant. Parexemple, l'artile in-
titulé"Corretiond'exeriesenbasesdedonnées" peutfaireréféreneàl'artile"Conepts
générauxenBDrelationnelle"dunuméro12del'année2004delarevue"Informatiquemag-
azine". Aet eet,lesensemblesd'entitésNuméroet Artileontétéregroupésauseind'un
agrégatauformatMerise(oud'unelasse-assoiationenUML).Cetagrégat(ouettelasse-
assoiation)représente l'artile référené,'est-à-dire l'artileet le numérodela revue oùil
a été publié (il est inutile d'ajouter la revue à l'agrégat puisque Numéro est un ensemble
d'entitésfaibles de Revue). Cetagrégrat(ouette lasse-assoiation)est assoiée àArtile,
nalitésontpourborneinférieure0arunartilepeutneréférenerauunautreartileet un
artilepeutnejamaisêtreréférené. Pourplusdedétailssurl'agrégation,vouspouvezvous
référeràlapage37del'ouvrage[2℄ouauxpages55-56de[3℄.
Déduisezleshémarelationneldelabase dedonnéesorrespondante.
Vouspréiserezleslésprimairesdesrelationsenlessoulignantainsiqueleslésétrangèresenles
signalantparun#et enpréisantàquoiellesfontréférene.
Dansvotreshémarelationnel,haquerelationdoitêtrespéiéedelamanièresuivante :
R N om(att 1,...,att n)oùR N omestlenomdelarelationetatt 1, ..., att nsontdesnomsd'attributs.
att n)oùR N omestlenomdelarelationetatt 1, ..., att nsontdesnomsd'attributs.
att 1, ..., att nsontdesnomsd'attributs.
Le nom de la relation doit obligatoirement avoir un lien ave les noms des ensembles d'entités
(lasses)oudesassoiationsdushémademodélisationdelaquestion1.
Vous donnerez des expliations laires et onises du passage au relationnel. Vous préiserez no-
tamment pourquoi et omment vous réez ou modiez ertaines relations (1 ligne maximum par
relation).
Corretion de l'exerie 2
Le modèle relationnel déduit de la modélisation i-dessus est le suivant. Les lés primaires sont
soulignées. Les lés étrangères sont préédées d'un '#'. Pour un rappel de es notions, vous
pouvezvousréférerauxpages56à60de[2℄. Lepassaged'unshémademodélisationàunmodèle
relationnelestrappeléauxpages120à143de[4℄.
Revue(Nom,Périodiité)
Cetterelationestdéduitedupassageaurelationneldel'ensembled'entités(oulasse)Revue.
Numéro(ID,Année,#NomRevue,NbPages)
Cetterelationestissuedupassageaurelationneldel'ensembled'entités(lasses)Numéro,qui
estunensembled'entitésfaibles(ouuneassoiationqualiée)deRevue. Laléprimairedela
relationNuméroestdonomposéeduouple(ID, Année)qui identieunnuméropourune
revuedonnéeetdel'attribut#NomRevue,léétrangèrefaisantréféreneàlaléprimairede
larelationRevue('est-à-direfaisantréféreneàlarevueàlaquellelenuméroestrelatif).
Auteur(ID,Nom,Prénom,Email)
Cetterelationestdéduitedupassageaurelationneldel'ensembled'entités(oulasse)Auteur.
Artile(Titre,Contenu)
Cetterelationestdéduitedupassageaurelationneldel'ensembled'entités(oulasse)Artile.
Eriture(#Titre, #IDAuteur)
Cetterelationest déduitedupassageaurelationnelde l'assoiation entre Artileet Auteur.
En eet, un artilepeut être érit par plusieurs auteurs et un auteur peut érire plusieurs
artiles. L'attribut #Titre est une lé étrangère qui fait référene à la lé primaire de la
relationTitre. L'attribut#IDAuteurestunelé étrangèrequifaitréféreneàlaléprimaire
delarelationAuteur.
Publiation(#Titre, #NomRevue,#IDNuméro, #AnnéeNuméro,PageDébut,PageFin)
Cetterelationestdéduitedupassageaurelationneldel'assoiationentreArtileetNuméros.
Lalé primairedelarelation estomposéedutitre del'artilepublié (identié par#Titre)
etdunumérodanslequell'artileapparaît(identiéparletriplet#NomRevue,#IDNuméro,
#AnnéeNuméro). L'attribut#Titre estune léétrangèrequi faitréféreneàlaléprimaire
delarelationTitre. Lesattributs(#NomRevue,#IDNuméro, #AnnéeNuméro)formentune
lé étrangère qui fait référene àla lé primaire de la relation Numéro. Il faut bien noter,
ii, qu'une lé étrangère fait toujours référene à la lé primaire d'une autre relation. Or,
danset exemple, lalé primaire de larelation Numéro est omposéede trois attributs qui
doiventégalementapparaîtredans toutes lés étrangèresy faisant référene. Il ne faut pas
aratérisel'assoiationest_publié_dans.
Référene(#TitreArtileRéférençant,#TitreArtileRéférené, #NomRevueArtileRéférené,
#IDNuméroArtileRéférené, #AnnéeNuméroArtileRéférené)
Cetterelationestdéduitedupassageaurelationneldel'assoiationentrel'ensembled'entités
(oulalasse)Artileetl'agrégat(oulalasse-assoiation)regroupantNuméroetArtile. Les
nomsdesattributs sontpartiulièrementlongs pourquelasémantiquesoit laire. L'attribut
#TitreArtileRéférençantestune lé étrangèrequi faitréféreneàlaléprimairedelarela-
tionArtile. Cet attributreprésente letitredel'artile référençant(ontenantune référene
àunartilepubliédansunnuméro). L'attribut#TitreArtileRéférenéestunelé étrangère
qui faitréférene àlalé primaire de larelation Artile. Cet attribut représente letitre de
l'artileréférençé. Lesattributs(#NomRevueArtileRéférené, #IDNuméroArtileRéférené,
#AnnéeNuméroArtileRéférené)formentuneléétrangèrequifaitréféreneàlaléprimaire
delarelationNuméro. Ilsreprésententlenumérodelarevuedanslequelaétépubliél'artile
référené.
Exerie 3
Enoné de l'exerie
On suppose qu'une bibliothèque gèreune base de donnéesdontle shéma est le suivant (leslés
primairesdesrelationssontsoulignées):
Emprunt(Personne,Livre, DateEmprunt,DateRetourPrevue, DateRetourEetive)
Retard(Personne,Livre,DateEmprunt, PenalitéRetard)
Exprimer,lorsqueelaestpossible,lesrequêtessuivantesenalgèbrerelationnelle,enalulàvariablenuplet
et enSQL.
1. Quellessontlespersonnesayantemprunté lelivre"ReueilExamensBD"?
2. Quellessontlespersonnesn'ayantjamaisrendu delivreenretard?
3. Quellessontlespersonnesayantemprunté tousleslivres(empruntésaumoinsunefois)?
4. Quelssontleslivresayantétéempruntéspartout lemonde(i.e. touslesemprunteurs)?
5. Quellessontlespersonnesayanttoujoursrenduenretardleslivresqu'ellesontempruntés ?
Corretion de l'exerie 3
Dans et exerie, leshémarelationnel est partiulièrementsimple, an que l'expressiondes re-
quêtessoitfaileàexprimer. Ils'agitnéanmoinsderequêtesomplexes. Vouspouvezvousentraîner
àexprimeres requêtesen améliorantleshéma,'est-à-direenajoutantdeuxrelations Personne
etLivreetpréisantleslésétrangèresdanslesrelationsEmpruntetRetardfaisantréféreneàune
personneetàunlivre.
1. Quellessont lespersonnes ayant emprunté lelivre"Reueil ExamensBD" ?
Enalgèbrerelationnelle:
Π P ersonne (σ Livre= ′ Recueil... ′ (Emprunt))
L'algèbrerelationnelleestunlangageomposéd'opérationsensemblistes. Ilpermetd'indiquer
ommentlerésultatdelarequêteestaluléentermesd'opérationsensemblistessurdesen-
sembles de nuplets (les relations). Dans ette requête par exemple, le résultat est alulé
en parouranttous les nuplets de la relation Emprunt, en y séletionnant les nuplets dont
l'attributLivre apour valeur'Reueil...' et enprenantuniquement lesvaleursde l'attribut
Personne(i.e. enprojetantsurl'attributPersonne).
Enalulrelationnel:
{t.P ersonne | Emprunt(t) ∧ (u.Livre = ′ Recueil... ′ ) }
Lealul relationneldérit, sousformelogique, lerésultat delarequête (sanspréiser om-
mentonlealule). Lerésultatdelarequêteontientlesvaleursdel'attribut
P ersonne
desnuplets
t
dela relationEmprunt
tels quel'attributLivre
orresponde à'ReueilExamensEnSQL:
SELECT Personne
FROM Emprunt WHERE Livre = 'Reueil...'
IlauraitégalementétépossiblederemplaerlalauseWHEREparWHERE Livre LIKE 'Reueil%'
indiquant quel'on reherhe lesemprunteursdesouvrages dont letitre ommene par 'Re-
ueil'.
2. Quellessont lespersonnes n'ayant jamais rendude livre en retard ?
Enalgèbrerelationnelle:
Π P ersonne (Emprunt) − Π P ersonne (Retard)
La résultat de la requête est alulé en prenant toutes les valeurs de l'attribut Personne
danslarelationEmpruntet enéliminantlesvaleursdee mêmeattributapparaissantégale-
mentdanslarelationRetard. Ils'agitd'unediéreneentredeuxensembles.
Enalulrelationnel:
{t.P ersonne | Emprunt(t) ∧ ¬[∃ u Retard(u) ∧ (u.P ersonne = t.P ersonne) )]}
Le résultat de la requête ontient les valeurs de l'attribut
P ersonne
des nupletst
de larelation
Emprunt
(dondespersonnesempruntant)tels qu'iln'existepasdenupletsu
danslarelation
Retard
ave la même valeur pour l'attributP ersonne
(dontelles qu'il n'existepasderetardsassoiésàespersonnes).
EnSQL, deux manières possibles, par simple tradution en SQL de la requête en alul
relationnel(lealulrelationnelétantàl'originedelasyntaxedeSQL):
SELECT t.Personne FROM Emprunt t SELECT Personne FROM Emprunt
WHERE NOT EXISTS (SELECT * FROM Retard u WHERE Personne NOT IN
WHERE u.Personne=t.Personne (SELECT Personne FROM Retard)
)
Lesvariables nuplet (ex.
t
etu
)nesontnéessairequelorsqu'ilyaambiguïtéauniveaudesnomsd'attributs(f. requêtedegauhe).
3. Quelles sont les personnes ayant emprunté tous les livres (empruntés au moins
unefois) ?
Enalgèbrerelationnelle:
Π P ersonne,Livre (Emprunt) ÷ Π Livre (Emprunt)
Lerésultat deetterequêteest alulé enutilisantl'opérateurdedivision. Pourune bonne
ompréhensiondeladivision,vouspouvezvousreporteràlapage99de[2℄.
Lasous-requête
Π Livre (Emprunt)
orrespondàlalistedeslivresempruntés. Lerésultatdelasous-requête
Π P ersonne,Livre (Emprunt)
ontienttouslesouples(Personne, Livreempruntéaumoinsunefoisparettepersonne). Lerésultatdeladivisionseradonlalistedesperson-
nesassoiées,danslerésultatde
Π P ersonne,Livre (Emprunt)
,àhaundeslivresapparaissant danslerésultatdelarequêteΠ Livre (Emprunt)
.{t.P ersonne | Emprunt(t) ∧ [∀ u (Emprunt(u)) = ⇒ (∃ v Emprunt(v) ∧ (v.P ersonne = t.P ersonne) ∧ (u.Livre = v.Livre) )]}
Lerésultatdelarequêteontientlesvaleursdel'attribut
P ersonne
desnupletst
delarelationEmprunt
telsque quel quesoit unnuplet s'il s'agit d'un livreemprunté (dond'un nupletu
dansEmprunt
)alors ontrouveunnupletv
dansEmprunt
assoiant ette personne àelivre('est-à-dire
v.P ersonne = t.P ersonne
etu.Livre = v.Livre
).Onpeutégalementl'ériredelamanièresuivante:
{t.P ersonne | Emprunt(t) ∧ [∀ u ¬(Emprunt(u)) ∨ (∃ v Emprunt(v) ∧ (v.P ersonne = t.P ersonne) ∧ (u.Livre = v.Livre) )]}
Ce qui signie que le résultat de larequête ontient lesvaleurs de l'attribut
P ersonne
desnuplets
t
de la relationEmprunt
tels quequel que soit un nupletu
soit 'est n'est pas unnupletde
Emprunt
soit (impliitement'estunnupletdeEmprunt
et)ontrouveunnupletv
dansEmprunt
assoiantettepersonneà elivre ('est-à-direv.P ersonne = t.P ersonne
et
u.Livre = v.Livre
).D'oùditdemanièrenégative:
{t.P ersonne | Emprunt(t)∧ ¬[∃ u Emprunt(u) ¬(∃ v Emprunt(v)∧(v.P ersonne = t.P ersonne)∧
(u.Livre = v.Livre) )]}
EnSQL,simpletradutiondelarequêteenalul relationnel:
SELECT t.Personne
FROM Emprunt t
WHERE NOT EXISTS ( SELECT *
FROM Emprunt u WHERE NOT EXISTS ( SELECT *
FROM Emprunt v
WHERE v.Personne=t.Personne
AND v.Livre=u.Livre
)
)
4. Quels sont les livres ayant été empruntés par tout le monde (i.e. tous les em-
prunteurs)?
Enalgèbrerelationnelle:
Π P ersonne,Livre (Emprunt) ÷ Π P ersonne (Emprunt)
Lerésultatdeetterequêteestaluléenutilisantégalementl'opérateurdedivision.
Lasous-requête
Π P ersonne (Emprunt)
orrespondàlalistedesemprunteurs. Lerésultatdela sous-requêteΠ P ersonne,Livre (Emprunt)
ontienttous lesouples(Personneayant empruntéaumoins une fois, Livreemprunté aumoins une fois par ette personne). Le résultatde la
divisionseradonlalistedeslivresassoiés,danslerésultatde
Π P ersonne,Livre (Emprunt)
,àhaundesemprunteursapparaissantdanslerésultatdelarequête
Π P ersonne (Emprunt)
.Enalulrelationnel:
{t.Livre | Emprunt(t) ∧ [∀ u (Emprunt(u)) = ⇒ (∃ v Emprunt(v) ∧ (v.Livre = t.Livre) ∧ (v.P ersonne = u.P ersonne) )]}
Le résultat de la requête ontient les valeurs de l'attribut
Livre
des nupletst
de la rela-tion
Emprunt
tels que quel que soit un nupletu
, s'il s'agit d'un emprunteur (don d'unnuplet
u
dansEmprunt
)alors ontrouveunnupletv
dansEmprunt
assoiante livreàetemprunteur('est-à-dire
v.Livre = t.Livre
etv.P ersonne = u.P ersonne
).Onpeutégalementl'ériredelamanièresuivante:
{t.Livre | Emprunt(t) ∧ [∀ u ¬(Emprunt(u)) ∨ (∃ v Emprunt(v) ∧ (v.Livre = t.Livre) ∧ (v.P ersonne = u.P ersonne) )]}
Ce qui signieque le résultat de la requête ontient les valeursde l'attribut
Livre
des nu-plets
t
de larelationEmprunt
tels quequel quesoit unnupletu
, soit il ne s'agit pasd'unnuplet
u
dansEmprunt
, soit (il s'agit d'un d'un nupletu
dansEmprunt
et) il existe unnuplet
v
dansEmprunt
assoiantelivreàetemprunteur('est-à-direv.Livre = t.Livre
ett.P ersonne = u.P ersonne
). D'où ditdemanièrenégative:{t.Livre | Emprunt(t)∧ ¬[∃ u Emprunt(u) ¬(∃ v Emprunt(v) ∧ (v.Livre = t.Livre) ∧ (v.P ersonne = u.P ersonne) )]}
EnSQL,simpletradutiondelarequêteenalul relationnel:
SELECT t.Livre FROM Emprunt t
WHERE NOT EXISTS ( SELECT * FROM Emprunt u
WHERE NOT EXISTS ( SELECT * FROM Emprunt v
WHERE v.Livre=t.Livre AND v.Personne=u.Personne
)
)
5. Quellessont les personnes ayant toujours rendu en retard leslivres qu'elles ont
empruntés ?
Enalgèbrerelationnelle : Il n'est pas possible d'exprimer ette requête par une division.
Larequêteestdondéomposéeendeux sous-requêtes. Larequête,
R 1, i-dessous,retourne
lalistedespersonnesayantemprunté aumoinsunlivresanslerendreenretard.
R 1 = Π P ersonne [Π P ersonne,Livre,DateEmprunt (Emprunt) − Π P ersonne,Livre,DateEmprunt (Retard)]
Larequêtei-dessousenlèvedelalistedespersonnesquiempruntentdeslivres(sous-requête
degauhe)lalistedespersonnesayantrenduaumoinsunlivresansretard(requête
R 1). Cela
orrespondàommentalulerlerésultatdelarequêtequel'onreherhe.
Π P ersonne (Emprunt) − R 1
Enalulrelationnel:
{t.P ersonne | Emprunt(t) ∧ [∀ u [Emprunt(u) ∧ (u.P ersonne = t.P ersonne)] = ⇒ (∃ v Retard(v) ∧ (v.P ersonne = u.P ersonne) ∧ (u.Livre = v.Livre) )]}
Lerésultatdelarequêteontientlesvaleursdel'attribut
P ersonne
desnupletst
delarelationEmprunt
telsquequel quesoit unnuplet s'il s'agitd'un livreemprunté parette personne(dond'unnuplet
u
dansEmprunt
telqueu.P ersonne = t.P ersonne
)alorsontrouveunnu-plet
v
dansRetard
assoiantettepersonneàelivre('est-à-direv.P ersonne = u.P ersonne
et
u.Livre = v.Livre
).Onpeutégalementéire:
{t.P ersonne | Emprunt(t) ∧ [∀ u ¬[Emprunt(u) ∧ (u.P ersonne = t.P ersonne)] ∨ (∃ v Retard(v) ∧ (v.P ersonne = u.P ersonne) ∧ (u.Livre = v.Livre) )]}
Le résultat de la requête ontient les valeurs de l'attribut
P ersonne
des nupletst
de larelation
Emprunt
telsque quel quesoit unnuplet soit il ne s'agitpas d'un livreempruntéparette personne (dond'un nuplet
u
dansEmprunt
telqueu.P ersonne = t.P ersonne
)soit on trouve un nuplet
v
dansRetard
assoiant ette personne à e livre ('est-à-direv.P ersonne = u.P ersonne
etu.Livre = v.Livre
).D'oùditdemanièrenégative:
{t.P ersonne | Emprunt(t)∧ ¬[∃ u Emprunt(u)∧(u.P ersonne = t.personne) ¬(∃ v Retard(v)∧
(v.P ersonne = u.P ersonne) ∧ (u.Livre = v.Livre) )]}
EnSQL,làenore,simpletradutiondelarequêteenalulrelationnel:
SELECT t.Personne
FROM Emprunt t
WHERE NOT EXISTS (SELECT * FROM Emprunt u WHERE u.Personne=t.Personne
AND NOT EXISTS (SELECT * FROM Retard v WHERE v.Personne=u.Personne
AND v.Livre=u.Livre )
)
Exerie 4
Enoné de l'exerie
Unorganismedegestiondespetales,desallesdeonertet deventedebilletsdespetalesgère
unebase dedonnéesdontleshémarelationnelest lesuivant:
Spetale(Spetale_ID,Titre, DateDéb, Durée, Salle_ID,Chanteur)
Conert (Conert_ID,Date, Heure, Spetale_ID)
Salle(Salle_ID,Nom, Adresse, Capaité)
Billet(Billet_ID , Conert_ID,Num_Plae,Catégorie,Prix)
Vente (Vente_ID,Date_Vente,Billet_ID,MoyenPaiement)
Les attributs soulignéssont les attributs appartenant à la lé primaire. Ils sont de type entier.
L'attribut Salle_ID delarelation Spetaleest une lé étrangèrequi faitréféreneàl'attributde
mêmenomdelarelationSalle. L'attributSpetale_IDdelarelationConertestuneléétrangère
qui faitréférene àl'attributdemême nom delarelationSpetale. L'attributConert_IDde la
relationBilletestuneléétrangèrequifaitréféreneàl'attributdemêmenomdelarelationCon-
ert. L'attributBillet_ID delarelation Venteest une lé étrangèrequi faitréférene àl'attribut
demêmenom delarelationBillet.
Exprimez, lorsque ela est possible, les requêtes suivantes en algèbre relationnelle,
en alul relationnelà variable nupletet en SQL.
1. QuellessontlesdatesduonertdeCorneille auZenith ?
2. Quelssontlesnomsdessallesayantlaplusgrandeapaité?
3. Quelssontleshanteursn'ayantjamaisréalisédeonertàlaCygale?
4. Quelssontleshanteursayantréaliséaumoins unonertdanstouteslessalles?
5. Quelssontles dates et les identiateurs des onerts pourlesquels il ne reste auun billet
invendu ?
Corretion de l'exerie 4
1. Quellessont lesdates du onertde Corneilleau Zenith?
Enalgèbrerelationnelle:
Π Date [Concert ⋊ ⋉ σ Chanteur= ′ Corneille ′ (Spectacle) ⋊ ⋉ σ N om= ′ Zenith ′ (Salle)]
ConertetSpetale,assoielesnupletsdeSpetale,orrespondantauxspetalesduhanteur
`Corneille'(puisqu'ilyauneséletionavant),avelesnupletsdelarelationConertayantla
mêmevaleurpourl'attributSpetale_ID.Lajointuresefaitnaturellementsurl'attributde
mêmenom, Spetale_ID.La deuxième jointureassoie les nupletsrésultats de lapremière
jointure(don les onerts des spetales de 'Corneille') ave le nuplets orrespondantà la
salledu'Zenith'(résultatdelarequêtedeséletion
σ N om= ′ Zenith ′ (Salle)
). Lajointuresefaitnaturellementsurl'attributommunSalle_ID.Laprojetionnalesefaitsurl'attributDate.
Enalulrelationnel:
{t.Date | Concert(t) ∧ [∃ u, v Spectacle(u) ∧ Salle(v) ∧ (u.Spectacle
_ID = t.Spectacle
_ID)
∧ (u.Chanteur = ′ Corneille ′ ) ∧ (v.N om = ′ Zenith ′ ) ∧ (u.Salle
_ID = v.Salle
_ID) ] }
Larequête retournelesdates des onerts pour lesquelsil existe unspetalede 'Corneille'
assoiéàlasalle du'Zenith'. Lerésultatdelarequêteontientdonlesvaleursdel'attribut
Date
des nupletst
de la relationConcert
tels qu'il existe un nupletu
dans Spetale, or-respondantàunspetalede 'Corneille'('est-à-diredontl'attributChanteur apourvaleur
'Corneille'), ave la même valeur pour l'attribut Spetale_ID que le nuplet
t
et tels qu'ilexiste aussi un nuplet
v
dans la relation Salle, orrespondant à la salle du 'Zenith' (dont l'attributNomapourvaleur'Zenith'),avelamêmevaleurpourl'attributSalle_IDqueelledel'attributSalle_IDdunuplet
u
.EnSQL,partradutionimmédiatedelarequêteenalul àvariablenuplet:
SELECT Date
FROM Conert t, Spetale u, Salle v
WHERE t.Spetale_ID = u.Spetale_ID
AND u.Chanteur = 'Corneille'
AND u.Salle_ID = v.Salle_ID
AND v.Nom = 'Zenith'
2. Quelssontlesnomsdes sallesayantla plus grandeapaité ?
Enalgèbrerelationnelle: Cetterequêtenepeutpass'érireenalgèbrerelationnellenonéten-
due. Ilfaut unopérateurmaximum. Pourplusdedétails surl'algèbrerelationnelleétendue,
vouspouvezvousreporterauxpages103à111de[3℄ouauxpages221à230de[1℄.
Enalgèbrerelationnelleétendue 1
,larequêtes'exprimepar:
Π N om (σ (Capacite>=CapaciteM ax) Π Salle_ID,CapacitM ax [Salle×(Π M AX(Capacite) −→ CapaciteM ax) (Salle))])
Larequête
Π Salle_ID,CapacitM ax [Salle×(Π M AX(Capacite) −→ CapaciteM ax) (Salle))]
retourneune
relationtemporairededeuxolonnes,lapemièreontenantlesvaleursdel'attributSalle_ID
dela relation Salle et la deuxième olonne ontenantune seulevaleur (repétéepourtoutes
lesvaleursdeSalle_ID)orrespondantàlavaleurmaximalede l'attributCapaité(alulée
parlafontiond'agrégationMAXet renomméeenCapaiteMAX). L'opérateurutilisé est le
produit artésien(
×
). Pour obtenirle nom dessalles ave la plusgrande apaité, il sutdonde joindre àette relationtemporaireàla relationSalle et de séletionnerlesnuplets
ayantunevaleurdeCapaitésuperieureouégaleàelle del'attributCapaiteMax.
Enalulrelationnel:
{t.N om | Salle(t) ∧ ¬[∃ u Salle(u) (u.Capacite >= t.Capacite) ] }
Cetterequête retourne lesvaleursde l'attribut Nom desnuplets
t
de larelation Salle pour1
L'algèbrerelationnelleétenduen'estpasauprogrammedel'examen.
lesquelsiln'existepasdenuplets
u
dansSalleaveunevaleurdel'attributCapaitésupérieureouégale.
EnSQL:
Ilest possiblede traduirediretement larequête expriméeen alul relationnel, ommei-
dessous.
SELECT Nom
FROM Salle t
WHERE NOT EXISTS (SELECT *
FROM Salle u
WHERE u.Capaité >= t. Capaité)
Il est également possible d'utiliser l'opérateur d'agrégation
M AX
, omme pour la requêtesuivante.
SELECT Nom
FROM Salle
WHERE Capaité >= ( SELECT (MAX(Capaité)
FROM Salle
)
Ilestégalementpossibled'utiliserlemot-léALL:
SELECT Nom
FROM Salle
WHERE Capaité >= ALL ( SELECT Capaité
FROM Salle
)
3. Quelssontleshanteurs n'ayant jamaisréaliséde onert à la Cygale ?
Enalgèbrerelationnelle:
Π Chanteur (Spectacle)−Π Chanteur [Spectacle ⋊ ⋉ σ (N om= ′ Cygale ′ ) (Salle)]
Larequête
Π Chanteur [Spectacle ⋊ ⋉ σ (N om= ′ Cygale ′ ) (Salle)]
retourneleshanteursayanthantéaumoins une foisdans lasalle de la'Cygale'. Le résultatde larequête fnaleest obtenuen
supprimanteshanteursdelalistedetousleshanteurs.
Enalulrelationnel:
{t.Chanteur | Spectacle(t) ∧ ¬[∃ u, v Spectacle(u) ∧ Salle(v) ∧ (v.N om = ′ Cygale ′ ) ∧ (u.Chanteur = t.Chanteur) ∧ (u.Salle
_ID = v.Salle
_ID) ] }
La requête retourne les valeurs de l'attribut Chanteur des nuplets
t
de la relation Speta-le telsqu'ilnesoit paspossiblede trouverunspetale dee mêmehanteur àla 'Cygale'
(i.e. de trouverun nuplet
u
dansSpetaleavela mêmevaleurpourl'attributChanteur etunnuplet
v
dansSalleave'Cygale'ommevaleurdel'attributNomet avelamêmevaleurque
u.Salle
_ID
pourl'attributSalle_ID).EnSQL:
SELECT Chanteur
FROM Spetale
WHERE Chanteur NOT IN (SELECT Chanteur
WHERE u.Salle_ID=v.Salle_ID
AND v.Nom='Cygale'
)
Cetterequête peut aussi s'exprimer ave un NOT EXISTS en utilisant une variable nuplet
t
danslepremier
F ROM
,parunesimpletradutiondualul relationnel: SELECT ChanteurFROM Spetale t
WHERE Chanteur NOT EXISTS ( SELECT *
FROM Spetale u, Salle v
WHERE u.Salle_ID=v.Salle_ID
AND v.Nom='Cygale'
AND t.CHanteur=u.Chanteur
)
4. Quels sont leshanteurs ayant réaliséau moins un onert dans toutes lessalles
?
Enalgèbrerelationnelle:
Π Chanteur,Salle_ID (Spectacle ⋊ ⋉ Salle) ÷ Π Salle
_ID (Salle)
Larequête
Π Salle_ID (Salle)
retournetouslesidentiateursdesalle.
Larequête
Π Chanteur,Salle_ID (Spectacle ⋊ ⋉ Salle)
retourne une relation assoiant à haque
hanteurl'identiateurdelasalledanslaquelleil aréaliséaumoinsunspetale.
Ladivisionvadonretournerleshanteursassoiésaumoinsunefoisàtouteslessallesdela
base.
Enalulrelationnel:
{t.Chanteur | Spectacle(t) ∧ [∀ u (Salle(u)) = ⇒ (∃ v Spectacle(v) ∧ (v.Chanteur = t.Chanteur)
∧ (u.Salle
_ID = v.Salle
_ID) ) ] }
La requête retourne les valeurs de l'attribut Chanteur des nuplets
t
de la relation Speta-le telsque pour quel quesoit unnuplet, s'il s'agitd'une salle (donunnuplet
u
pris dansSalle),alorsil existe unspetalede e hanteurdans ettesalle (donil existeunnuplet
v
dansSpetaleorrespondantàehanteur,ave
v.Chanteur = t.Chanteur
,et àette salle,ave
u.Salle
_ID = v.Salle
_ID
).Onpeutégalementérire:
{t.Chanteur | Spectacle(t) ∧ [∀ u ¬(Salle(u)) ∨ (∃ v Spectacle(v) ∧ (v.Chanteur = t.Chanteur)
∧ (u.Salle
_ID = v.Salle
_ID) ) ] }
Larequête retourneles valeursde l'attributChanteur desnuplets
t
de larelation Spetaletelsquepourquelquesoitunnuplet,soitilnes'agitpasd'unesalle(donilnes'agitpasd'un
nuplet
u
deSalle),soit(impliitementils'agitd'unnupletu
deSalleet)ilexisteunspetaledeehanteurdansettesalle(donilexisteunnuplet
v
dansSpetaleorrespondantàe hanteur,avev.Chanteur = t.Chanteur
,etàettesalle,aveu.Salle
_ID = v.Salle
_ID
).D'oùditdemanièrenégative:
{t.Chanteur | Spectacle(t) ∧ ¬[∃ u Salle(u) ¬(∃ v Spectacle(v) ∧ (v.Chanteur = t.Chanteur)
∧ (u.Salle
_ID = v.Salle
_ID) ) ] }
EnSQL:
SELECT Chanteur FROM Spetale t WHERE NOT EXISTS
( SELECT * FROM Spetale v
WHERE v.Chanteur = t. Chanteur AND u.Salle_ID = v.Salle_ID
)
)
5. Quels sont les dates et les identiateurs des onerts pour lesquels il ne reste
auun billetinvendu ?
Enalgèbrerelationnelle : Cette requête étant omplexe et ne peut pas s'exprimer àl'aide
d'unedivision. Ilest plus simplede l'érireen la déomposant. Une premièresous-requête
R 1 vapermettrededéterminerlesbilletsinvendus :
R 1 = Π Billet_ID (Billet) − Π Billet
_ID (V ente)
Larequête
R 1 supprime dela listedes billets(Π Billet_ID (Billet)
), euxqui ont étévendus
ID (Billet)
(
Π Billet_ID (V ente)
). Pourobtenirlesonertsauxquelsappartiennentesbilletsinvendus,il
fautfaireunejointureavelarelationBillet(pourobtenirlavaleurdel'attributConert_ID
assoiéaubillet)puisaveConert(pourobtenirladate duonertassoié),soit:
R 2 = Π Date,Concert_ID (Concert ⋊ ⋉ Billet ⋊ ⋉ [Π Billet
_ID (Billet) − Π Billet
_ID (V ente)]
| {z }
R 1
)
Aunal,onsupprimelalistedesidentiateursdeonertsetdeleurdateassoiéeaurésultat
delarequête
R 2,soit:
Π Date,Concert_ID (Concert)−
R 2
z }| {
Π Date,Concert_ID (Concert ⋊ ⋉ Billet ⋊ ⋉ [Π Billet
_ID (Billet) − Π Billet
_ID (V ente)]
| {z }
R 1
)
Enalulrelationnel:
{t.Concert
_ID, t.Date | Concert(t) ∧ [∀ u Billet(u) (u.Concert
_ID = t.Concert
_ID) (∃
v V ente(v) ∧ (v.Billet
_ID = u.Billet
_ID) ) ] }
La requête retourne les valeurs des attributs Conert_ID et Date des nuplets
t
de la rela-tionConert telsque pour tousles billetsde e onert(don pour touslesnuplets
u
dansBillettelsque
u.Concert
_ID = t.Concert
_ID
),ilexisteuneventedeebillet(donilexisteunnuplet
v
dansVenteorrespondantàebillet,i.e. telquev.Billet
_ID = u.Billet
_ID
).D'oùditdemanièrenégative:
{t.Concert
_ID, t.Date | Concert(t) ∧ ¬[∃ u Billet(u) (u.Concert
_ID = t.Concert
_ID)
¬(∃ v V ente(v) ∧ (v.Billet
_ID = u.Billet
_ID) ) ] }
EnSQL:
SELECT Conert_ID, Date
FROM Conert t
WHERE NOT EXISTS (SELECT * FROM Billet u
WHERE u.Conert_ID=t.Conert_ID
AND NOT EXISTS (SELECT * FROM Vente v
WHERE u.Billet_ID = v.Billet_ID
)
)
normalisation
Exerie 5
Enoné de l'exerie
Soitunshémadebasesdedonnéesontenantlesrelationsuivantes:
Bureau(NumBureau,NumTelephone, Taille)ave
F Bureau = { N umBureau → N umT elephone, T aille; N umT elephone → N umBureau; }
Oupant(NumBureau,PersonneID)ave
F Occupant = { N umBureau → P ersonneID }
Materiel(NumBureau, NumPC)ave
F M ateriel = { N umP C → N umBureau }
1. Lesontraintesi-dessoussont-ellesvériéespareshémadebasesdedonnées? Silaréponse
estpositive,expliquezpourquoi. Si laréponse estnégative,indiquez quelle(s)dépendane(s)
fontionnelle(s)ilfautajouter/supprimeroumodier pourquelaontraintesoitvériée.
(a) "Unbureaupeutontenirplusieurspostestéléphoniques."
(b) "Ilyauneetune seulepersonneparbureau."
() "Unbureauontientunseulordinateur."
2. Apartirdesfamilles dedépendanesfontionnellesinitialesdonnéesdansl'énoné,indiquez
quellessontleslésminimalespossiblesdehaquerelation.
Corretion de l'exerie 5
1. Vériationdes ontraintes expriméespar des dépendanes fontionnelles:
(a) "Un bureaupeut ontenirplusieurs postestéléphoniques"
Cette ontrainte n'est pas vériée ar
F Bureau ontient la dépendane fontionnelle
N umBureau → N umT elephone
donàunbureauest assoié unet unseulnumérodetéléphone. Pourquelaontrainte soit vériée, il faudraitsupprimer ettedépendanes
fontionnelle.
(b) "Il y auneetune seulepersonneparBureau."
Cetteontrainteestvériéear
F OccupantontientladépendanefontionnelleN umBureau → P ersonneID
,donàunnumérodebureauestassoiéeuneetuneseulepersonne.
() "Un bureauontientunseulordinateur."
Cetteontrainten'estpasvériéearilyajustel'informationqu'unordinateurestdans
un seul bureau (
N umP C → N umBureau
) mais pas l'inverse. Pourque la ontraintesoit vériée, ilfaudraitajouterladépendanefontionnelle
N umBureau → N umP C
.F Bureau = { N umBureau → N umT elephone, T aille; N umT elephone → N umBureau; }
Larelation
Bureau
adondeux lésminimalespossibles:N umBureau
etN umT elephone
.Eneet,àpartirdel'attribut
N umBureau
ilestpossiblededéduirelesdeuxautresattributsdelarelation(parlapremièredépendanefontionnelle).Parl'attribut
N umT elephone
,ilestpossible dedéduire
N umBureau
(2ème dépendane fontionnelle) et donl'attributT aille
(parlapremièredépendanefontionnelle). Onadon:
[N umBureau] + = {N umBureau, N umT elephone, T aille}
arN umBureau → N umT elephone, T aille
.et
[N umT elephone] + = {N umT elephone, N umBureau, T aille}
,arN umT elephone → N umBureau
etdonpartransitivitéave
N umBureau → T aille
,onobtientN umT elephone → T aille
.F Occupant = { N umBureau → P ersonneID }
Larelation
Occupant
adonune seulelé minimalepossible:N umBureau
.F M ateriel = { N umP C → N umBureau }
Larelation
M ateriel
adonuneseuleléminimalepossible:N umP C
.Pourplusdedétailssurlesdépendanes fontionnelles,vouspouvezvousreporterauxpages
422à430de[2℄.
Exerie 6
Enoné de l'exerie
Soit
R
une relationdontleshémaestlesuivant:R(UtilisateurID,Nom,Prénom,AdresseEmail,Login, Passwd, ServeurMail).
1. Exprimer,àl'aidededépendanesfontionnelles,lesontraintessuivantesquedoiventvérier
lesinstanesdelarelation
R
:(a) "Onpeutdéduirelenomet leprénomd'unutilisateuràpartirdesonidentiateur."
(b) "Unutilisateur(identiéparsonidentiateur)possèdeunseulloginetunseulpassword
parserveurdemails."
() "Uneadresseemailestassoiéeàunet unseulidentiateurd'utilisateur."
Attention: unutilisateurpeutavoirplusieursadressesdemails.
(d) "Uneadresseemailestassoiéeàunet unseulserveurdemails."
2. Indiquer,àpartirdelafamillededépendanesfontionnelles,issuede laquestion1,quelles
sontleslés mimimalesde
R
.3. Indiquer,àpartirdelafamillededépendanesfontionnelles,issuedelaquestion1,enquelle
formenormaleestlarelation
R
.1. Expressionde ontraintes par des dépendanes fontionnelles:
(a) "Onpeutdéduirelenom etleprénom d'unutilisateuràpartirde sonidentiateur."
Cetteontraintes'exprimeparladépendane fontionnelle:
UtilisateurID
−→
Nom, PrénomEn eet,àunidentiateurd'utilisateurest assoié unet unseulnomet unet unseul
prénom.
(b) "Unutilisateur(identiéparsonidentiateur)possède unseulloginetunseulpassword
par serveurde mails."
Cetteontraintes'exprimeparladépendane fontionnelle:
UtilisateurID,ServeurMail
−→
Login,PasswdEn eetpourun ouple(identiateur d'utilisateur, serveur de mail) est assoiéun et
unseulloginet unet unseulmotdepasse.
() "Une adresseemailest assoiéeàunetunseulidentiateurd'utilisateur."
Attention: unutilisateur peutavoirplusieurs adressesde mails.
Cetteontraintes'exprimeparladépendane fontionnelle:
AdresseEmail
−→
UtilisateurIDEn eet,àune adressemailest assoiéeunet unseulidentiateurd'utilisateur.
(d) "Une adresseemailest assoiéeàunetunseulserveur de mails."
Cetteontraintes'exprimeparladépendane fontionnelle:
AdresseEmail
−→
ServeurMailEn eet,àune adressemailest assoiéeunet unseulserveurdemails.
2. Identiationdes lés minimalesde la relation
R
Lafamillededépendanes fontionnellesassoiéesà
R
est:F = {
UtilisateurID−→
Nom, Prénom; UtilisateurID,ServeurMail−→
Login, Passwd;AdresseEmail
−→
UtilisateurID; AdresseEmail−→
ServeurMail}
L'attributAdresseEmail nepeutêtre déduit d'auun autre attribut,il doit donappartenir
à tous les lés minimales possibles de la relation. A partir de l'attribut AdresseEmail on
peut déduire l'identiateur de l'Utilisateurest don, par transitivité, le nom et le prénom
del'utilisateur : AdresseEmail
−→
UtilisateurID−→
Nom, Prénom. A partirde e mêmeattribut, on peut en déduire aussi le nom du serveur de mail et don ave l'identiateur
d'utilisateur,leloginetlemotdepassedel'utilisateur:
AdresseEmail
−→
UtilisateurID,ServeurMail−→
Login, PasswdD'où:
[AdresseEmail] + = {
AdresseEmail,UtilisateurID, Nom, Prénom,ServeurMail, Lo- gin,Passwd} = R
Larelation
R
adonuneseuleléminimalepossible:AdresseEmail
.3. Dédution de la forme normaledu shéma de la relation
R
Lesdeuxdernièresdépendanesfontionnellessontdelaformeléprimaire
−→
autreattribut,etvérientdonlespropriétésde laformenormaleBCNF. En revanhe,lesdeux premières
dépendanes fontionnelles sont transitives puisqu'elles ne sont omposées que d'attributs
n'appartenant pas à une lé. Par onséquent, le shéma de la relation
R
est en deuxièmeformenormale.
del'ouvrage[1℄, auhapitre15del'ouvrage[2℄ouauhapitre7del'ouvrage[3℄.
[1℄ H. Garia-Molina, J.D. Ulmann et J. Widow, Database Systems - The Complete Book,
PrentieHall, 2002
[2℄ R.Ramakrishnanet J.Gehrke,DatabaseManagementSystems, SeondEdition; MGraw-
Hill,2000,ISBN:0-07-232206-3
[3℄ A. Silbershatz, H.F. Korth et S. Sudarshan, Database System Conepts, 4th Edition,
MGraw-Hill,2002,ISBN:0-07-228363-7
[4℄ C.Soutou,DeUMLàSQL -Coneptiondebasesde données,Eyrolles,2002,ISBN:2-212-
11098-7