Vous êtes sur la page 1sur 64

SOMMAIRE :

TD1: Modélisation Entités-Association 4


Exercice 1 : 4
Exercice 2 : 5
Exercice 3 : Location de voitures 7
Exercice 4 : Gestion de Stock 9
Exercice 5 : Parc Immobilier 11
Exercice 6 : 11
Exercice 7 : 12
TD2 MODÈLE RELATIONNEL 13
Exercice 1 : 13
Exercice 2 : 13
Exercice 3 : 15
Exercice 4 : 16
Exercice 5 17
Exercice 6 : 17
TD3 : ALGÈBRE RELATIONNEL 18
Exercice 1 : 18
Exercice 2 : Requête en AR 18
Exercice 3 : Propriétés des opérateurs de l’AR 20
Exercice 4 : 22
Exercice 5 : 23
TD4 : CALCUL RELATIONNEL 25
Exercice 1 : Traduction d’énoncés en langage naturel vers la logique de premier
ordre 25
Exercice 2 : Interprétation et compréhension de formules en langage des prédicats
27
Exercice 3 : Evaluation de formules en langage des prédicats 28
Exercice 4 : Calcul relationnel de tuples(CRT) 29
Exercice 5 : Calcul relationnel de domaines (CRD) 29
Exercice 6 : AR, CRT et CRD 30
TD4 SQL1 31
Exercice 1 : 31
Exercice 2 : 33
Exercice 3 : 35
TD5 SQL2 37
Exercice 1 : Interrogation d’une base de donnée 37
Exercice 2 : Traitements sur les chaînes de caractères et dates 39
Exercice 3 : Mise à jour d’une base de données 42
TD6 : LDD & LCD 44
Exercices 1 : Vue et Index 44
Exercice 2 : Gestion des privilèges 45
Exercice 3 : Déclencheurs 48
Exercice 4: Transactions 49
TD7 : Dépendances fonctionnelles et normalisation 50
Exercice 1 : Axiomes d’Armstrong 51
Exercice 2 : Dépendances fonctionnelles et clés des relations 52
Exercice 3 : DFs et relation universelle 54
Exercice 4 : DFs et décomposition de relations universelle 56
TD7 ( Suite ) 57
Exercice 1 : Clôture d’un ensemble d’attributs et clés 57
Exercice 3 : DFs et formes normales 57
Exercice 4 : 58
Exercice 5 : 59
Exercice 6 : 60
TD1: Modélisation Entités-Association
Exercice 1 :
Soit le schéma EA suivant :

1.Par combien de réalisateurs au minimum et au maximum un film est réalisé ?


> On a un réalisateur au minimum et au maximum

2. Un acteur peut-il ne pas être réalisateur ?


> Oui

3. Un acteur peut-il être en même temps acteur et réalisateur d’un film ?


> Oui

4. Un cinéma projette-t-il plusieurs films aux mêmes dates ?


> Oui

5. Un cinéma peut-il n'avoir projeter aucun film ?


> Oui

6. On se propose d’ajouter les informations suivantes pour améliorer notre Schéma EA :


- Un cinéma est composé d’au moins une salle. Chacune de ces dernières est
caractérisée par sa capacité. Un film est projeté à une date donnée à un horaire
donné. On voudrait inclure le nombre de spectateurs ayant vu le film lors d'une
projection donnée.
- La durée d’un film et la meilleure distinction qu’il a reçue
- Le rôle d’un acteur dans un film
- Le cachet touché par un acteur dans un film
- Certains films sont adaptés à partir de romans. Dans ce cas, on aimerait enregistrer
son titre, son auteur , son ISBN et son année de parution.
Exercice 2 :
1. Ajoutez les cardinalités de chaque association
2. Ajoutez les informations suivantes au schéma ci dessus:
- le numéro porté par un joueur dans un match
- le salaire d’un joueur
- le salaire d’un entraîneur
- le stade où sont joués les matchs ( on voudrait enregistrer le nom du stage,
son adresse et sa capacité)
- Le statut d’un arbitre dans un match ( principal, de touche )
- Le montant de la prime touchée par les joueurs d’une équipe pour un match
- La durée jouée par un joueur dans un match
- La sanction ( carton rouge, jaune) reçu par un joueur dans un match
Exercice 3 : Location de voitures

Soit le système d’information d’une agence de location de voitures. Cette dernière met au
service de ses clients deux types de véhicules : les véhicules utilitaires et les véhicules de
tourisme.
Dans cette agence , le prix de location dépend uniquement de la catégorie du véhicule (
utilitaire ou de tourisme ). Chaque véhicule est identifié par son numéro d’immatriculation,
son modèle, sa marque, sa couleur et sa puissance. Pour chaque location , il est nécessaire
d’enregistrer le numéro du permis de conduire, du client , son nom , prénom et son numéro
de téléphone ainsi que la date, l'heure et la durée de location .

1. Donnez le schéma EA de cette agence

Notre périmètre : Une seule agence


3. Soit maintenant une agence de location nationale ayant des agences dans plusieurs
villes. Chaque agence est basée dans une ville et gérée par un responsable. Les
contrats de location sont établis par les agences locales . Modifiez le schéma de la
question 1 pour intégrer cette nouvelle information.

Notre périmètre : Une agence de location nationale ayant des agences dans
plusieurs villes.
Exercice 4 : Gestion de Stock

Soit la gestion de stock d’un magasin décrite comme suit :


- Le magasin vend des produits à des clients caractérisés par un nom, prénom et une
adresse
- Chaque produit est caractérisé par un libellé et un prix unitaire
- Un produit appartient à une catégorie caractérisée par un libellé
- Les clients passent des commandes concernant un ou plusieurs produits
- Une commande est passée par un client à une date donnée et concerne un
ensemble de produits ou chaque produit est commandé en un certain nombre d’unité
- Une commande est livrée à une adresse de livraison précisée lors de cette
commande par le client.

1. Donnez le schéma EA de ce magasin


2. Supposons maintenant qu’une commande peut être livrée à plusieurs adresses.
Modifiez le schéma de la question 1 pour tenir compte de cette nouvelle information.
Exercice 5 : Parc Immobilier

Dans cet exercice , on s’intéresse à la modélisation d ‘une société immobilière qui assure la
gestion d’un ensemble de logement :
- Chaque logement est identifié par une adresse ( numéro de logement , numéro dans
la rue, code postal et ville )
- Chaque logement peut être loué par un contrat ( bail ) qui précise le logement , le
locataire ( n°Sécurité Sociale, Nom , prénom ), la durée du bail , la date du début
- Le loyer et certaines charges sont imputables à chaque locataire , et sont identifiés
par un numéro et possèdent un libellé , un montant et une date de règlement.

Donnez le schéma EA de cet énoncé :

Exercice 6 :
Exercice 7 :

1. Proposez, à l’aide du formalisme EA, un schéma conceptuel pour modéliser la


gestion de ressources du système.

2.
TD2 MODÈLE RELATIONNEL

Exercice 1 :

1. Donner le schéma relationnel de cette base en précisant le domaine de chaque


attribut.

Pays( Code : Numérique , Name Pays : Alphabétique, Surface Area : Numérique,


independence year : Numérique , population : Numérique )
Capital ( ID : Numérique, Name Cap : Alphabétique, Country Code* : Alphabétique,
District Alphabétique, Population : Numérique )
Langue( Country Code : Alphabétique , Language : Alphanumérique , Is Official :
Boolean , Percentage ; Numérique )

2. Déduire le Modèle EA

Exercice 2 :
//A refaire by me
Exercice 3 :

1) Sans clé étrangère :

Processus ( PID , Temps Début, Temps Fin )


Ressource ( id ressource, Nom Ressource)
Utilisateur ( login, Nom_user, prenom user)
Programme ( id_prod ,Nom , chemin )
Exécuter ( Login , PID , ID prog)
Utiliser ( PID, id ressource)
2)
Avec Clé étrangère :
3.Schéma relationnel :
Processus ( PID , Temps Début, Temps Fin , id_prod*, login*)
Ressource ( id ressource, Nom Ressource)
Utilisateur ( login, Nom_user, prenom user)
Programme ( id_prod ,Nom , chemin )
Utiliser ( PID, id ressource)
Exercice 4 :

1)
Médecin ( NSS médecin , Nom Medecin , Prenom Médecin , Adresse Medecin)
Patient ( NSS_pateint, Nom Patient , Prenom Patient ,Date Nais Patient, Adressé
Patient)
Ordonnance ( Num_ord, Prescription , Date _ord)
Test ( Numtest, Libellé , Résultat, Nss Patient*, Num_ord*)
Diagnostic ( NSS médecin , Nss Patient , Num Ord)
Etablir ( NSS_medecin , Num_test, Num_diag )
3)
Medecin ( NSS medecin , Nom Medecin , Prénom Médecin , Adresse Medecin)
Patient ( NSS_pateint, Nom Patient , Prenom Patient ,Date Nais Patient, Adresse
Patient)
Ordonnance ( Num_ord, Prescription , Date _ord , NSS_patient*, Num_ord*)
Test ( Numtest, Libellé , Résultat, Nss Patient*, Num_ord*)
Diagnostic ( NSS médecin , Nss Patient , Num Ord)

Exercice 5

2.
Employé ( Numéro employé , Nom Employé , Prénom _ employé , salaire employé
Commission employé, Date Embauche, ID Département*, IDFonction*, N°Chef *)
Departement ( ID Departement, Nom Département )
Ville ( ID Ville , Code postal , N°Rue, Nom_fonction)
Fonction ( ID Fonction , Rôle )

Exercice 6 :
TD3 : ALGÈBRE RELATIONNEL

Exercice 1 :

Client (NumClient, Nom, Prenom, Date Naiss, Adresse, Tel, Fax)


Produit (CodeProd, Désignation, Prix Unitaire, Stock Actuel, DStockMax, Stock Min)
Commande (Num Commande, NumClient*, Date)
Concerner (Num Commande, CodeProd, Qté Commandée)

1. La liste ( code et désignation ) des produits en rupture de stock :

π 𝐶𝑜𝑑𝑒𝑃𝑟𝑜𝑑, 𝐷𝑒𝑠𝑖𝑔𝑛𝑎𝑡𝑖𝑜𝑛 ( σ 𝑆𝑡𝑜𝑐𝑘 𝐴𝑐𝑡𝑢𝑒𝑙 < 𝑆𝑡𝑜𝑐𝑘 𝑀𝑖𝑛 ( 𝑃𝑟𝑜𝑑𝑢𝑖𝑡 ) )

2. La liste des produits commandés par le client n°10 :

π 𝐷é𝑠𝑖𝑔𝑛𝑎𝑡𝑖𝑜𝑛 ( ( σ 𝑁𝑢𝑚𝐶𝑙𝑖𝑒𝑛𝑡 = 10 ( 𝐶𝑜𝑚𝑚𝑎𝑛𝑑𝑒 )) ⨝ 𝐶𝑜𝑛𝑐𝑒𝑟𝑛𝑒𝑟 ⨝ 𝑃𝑟𝑜𝑑𝑢𝑖𝑡 )

3. La liste des produits commandés par le client n°10 depuis le 01/01/2010 :

π𝐶𝑜𝑑𝑒𝑃𝑟𝑜𝑑, 𝐷é𝑠𝑖𝑔𝑛𝑎𝑡𝑖𝑜𝑛((σ𝑁𝑢𝑚𝐶𝑙𝑖𝑒𝑛𝑡 = 10 ∧ 𝐷𝑎𝑡𝑒 > '01/01/2010')(𝐶𝑜𝑚𝑚𝑎𝑛𝑑𝑒))⨝ 𝐶𝑜𝑛𝑐𝑒𝑟𝑛𝑒𝑟 ⨝ 𝑃𝑟𝑜𝑑𝑢𝑖𝑡 )

4. La liste des clients qui ont passé des commandes pour le produit ayant le code 102

π𝑁𝑢𝑚𝐶𝑙𝑖𝑒𝑛𝑡, 𝑁𝑜𝑚, 𝑃𝑟𝑒𝑛𝑜𝑚 ( σ 𝐶𝑜𝑑𝑒𝑃𝑟𝑜𝑑 = 102 ( 𝐶𝑜𝑛𝑐𝑒𝑟𝑛𝑒𝑟 ) )⨝ 𝐶𝑜𝑚𝑚𝑎𝑛𝑑𝑒 ⨝ 𝐶𝑙𝑖𝑒𝑛𝑡

Exercice 2 : Requête en AR

Soit le schéma relationnel suivant :

Enseignant ( NumEns, Nom_ens, Prenom_ens , Status_ens, Salaire)


Cours ( Code UE, Désignation, Crédits )
Enseigner ( Code UE, NumEns, Semestre )

1. Extraire la liste des cours( Code UE ) qui ont des crédits supérieurs à 3

π𝐶𝑜𝑑𝑒 𝑈𝐸 ( σ 𝐶𝑟é𝑑𝑖𝑡 > 3 (𝐶𝑜𝑢𝑟𝑠) )


2. Extraire la liste des numéros des enseignants ayant enseigné le cours ayant pour
code UC2 mais jamais BD

π𝑁𝑢𝑚𝐸𝑛𝑠 (π𝑁𝑢𝑚𝐸𝑛𝑠( σ 𝐶𝑜𝑑𝑒 𝑈𝐸 = '𝑈𝐶2' ( 𝐸𝑛𝑠𝑒𝑖𝑔𝑛𝑒𝑟 ) ) − π𝑁𝑢𝑚𝐸𝑛𝑠 ( σ 𝐶𝑜𝑑𝑒 𝑈𝐸 = '𝐵𝐷' ( 𝐸𝑛𝑠𝑒𝑖𝑔𝑛𝑒𝑟 ) ) )

3. Extraire la liste des noms et prénoms des enseignants ayant enseigné le cours ayant
pour code UC2 mais jamais BD

R1 =
π𝑁𝑢𝑚𝐸𝑛𝑠 ( σ 𝐶𝑜𝑑𝑒 𝑈𝐸 = '𝑈𝐶2' ( 𝐸𝑛𝑠𝑒𝑖𝑔𝑛𝑒𝑟 ) ) − π𝑁𝑢𝑚𝐸𝑛𝑠 ( σ 𝐶𝑜𝑑𝑒 𝑈𝐸 = '𝐵𝐷' ( 𝐸𝑛𝑠𝑒𝑖𝑔𝑛𝑒𝑟 ) )

π𝑁𝑜𝑚 𝐸𝑛𝑠, 𝑃𝑟é𝑛𝑜𝑚 𝐸𝑛𝑠 ((𝑅1)⨝𝐸𝑛𝑠𝑒𝑖𝑔𝑛𝑎𝑛𝑡)

4. Extraire la liste ( nom et prénom) des enseignants ayant le statut de MCF

π𝑁𝑜𝑚 𝐸𝑛𝑠, 𝑃𝑟é𝑛𝑜𝑚 𝐸𝑛𝑠( σ 𝑠𝑡𝑎𝑡𝑢𝑠 𝑒𝑛𝑠 = 𝑀𝐶𝐹(𝐸𝑛𝑠𝑒𝑖𝑔𝑛𝑎𝑛𝑡) )

5. Extraire la liste des enseignants ayant le statut de MCF et ayant un salaire inférieur à
2500
π𝑁𝑜𝑚 𝐸𝑛𝑠, 𝑃𝑟é𝑛𝑜𝑚 𝐸𝑛𝑠( σ𝑠𝑡𝑎𝑡𝑢𝑠 𝑒𝑛𝑠 = 𝑀𝐶𝐹 ∧ 𝑆𝑎𝑙𝑎𝑖𝑟𝑒 < 2500 ( 𝐸𝑛𝑠𝑒𝑖𝑔𝑛𝑎𝑛𝑡 ) )

6. Extraire la liste ( numéro enseignant ) des enseignants ayant enseigné le cours UC2
et BD
π𝑁𝑢𝑚𝐸𝑛𝑠( σ 𝐶𝑜𝑑𝑒 𝑈𝑒 = '𝐵𝐷' (𝐸𝑛𝑠𝑒𝑖𝑔𝑛𝑒𝑟) ) ∩ π𝑁𝑢𝑚𝐸𝑛𝑠( σ 𝐶𝑜𝑑𝑒 𝑈𝑒 = '𝑈𝐶2' (𝐸𝑛𝑠𝑒𝑖𝑔𝑛𝑒𝑟) )

7. Extraire la liste ( numéro enseignant ) des enseignants n’ayant jamais enseigné le


cours UC2

π𝑁𝑢𝑚𝐸𝑛𝑠(𝐸𝑛𝑠𝑒𝑖𝑔𝑛𝑎𝑛𝑡) − π𝑁𝑢𝑚𝐸𝑛𝑠( σ𝐶𝑜𝑑𝑒 𝑈𝐸 = 𝑈𝐶2 (𝐸𝑛𝑠𝑒𝑖𝑔𝑛𝑒𝑟)

8. Extraire la liste ( numéro enseignant) des enseignants ayant enseigné soit UC2 soit
BD mais pas les deux

R1 = π𝑁𝑢𝑚𝐸𝑛𝑠(σ𝐶𝑜𝑑𝑒 𝑈𝐸 = 𝑈𝐶2 (𝐸𝑛𝑠𝑒𝑖𝑔𝑛𝑒𝑟 ) )


R2 = π𝑁𝑢𝑚𝐸𝑛𝑠( σ𝐶𝑜𝑑𝑒 𝑈𝐸 = 𝐵𝐷 ( 𝐸𝑛𝑠𝑒𝑖𝑔𝑛𝑒𝑟 ) )

( R1 - R2 ) U ( R2 - R1 )

9. Extraire la liste des cours ( Code UE ) qui n’ont pas été enseignés.

π𝐶𝑜𝑑𝑒 𝑈𝐸 ( 𝐸𝑛𝑠𝑒𝑖𝑔𝑛𝑒𝑟 ) − π𝐶𝑜𝑑𝑒 𝑈𝐸 (𝐶𝑜𝑢𝑟𝑠)


Exercice 3 : Propriétés des opérateurs de l’AR

Exemple de diviser :

Auto
Marque

Renault

Voiture
Marque Modèle

Renault Clio

Renault Megane

Opel Corsa

Renault Twingo

Voiture / Auto
Modèle
Clio

Megane

Twingo

1. Calculer R4 = R1 ÷ R2

R4
S

s1

s2

s3

s4

2. Calculer R5 = π𝑆(𝑅1) et R6 = R5 x R2
R6
S P

s1 p2

s2 p2

s3 p2

s4 p2

3. Calculer R7 = π𝑆(𝑅6 − 𝑅1)


R7
S

4. Calculer R8 = R5 - R7

R8
S

s1

s2
s3

s4

5. Conclure 🙂
Exercice 4 :

Soit deux relations E pour Employé et D pour Department ayant les extensions suivantes

Employee
Name EmpID Dept Name

Harry 3415 Finance

Sally 2241 Sales

George 3401 Finance

Harriet 2202 Sales

Department
Dept Name Manager

Finance George

Sales Harriet

Production Charles

E1
Name EmpID Dept Name

Harry 3415 Finance

Sally 2241 Sales

George 3401 Finance

Harriet 2202 Sales

E2
Name EmpID Dept Name
Harry 3415 Finance

Sally 2241 Sales

George 3401 Finance

Harriet 2202 Sales

On remarque que E1 et E2 forment les mêmes résultats.

Juste que c’est la même chose juste le tableau qui est orienté soit NAME-DEPT
ou DEPT - NAME .

Que c’est la même 🙂

Que l’on va avoir que la projection du nom pour E7 et le nom et le Département pour la E6

J’ai pas compris…

Exercice 5 :

Soit le schéma relationnel suivant :

Vol(NumV, Provenance, Destination,Distance)


Avion( IdA, NomA,RayonAction, IdC* )
Constructeur ( IdC, NomC)
Certifier (IdP, IdA, DateCertification )
Pilote ( IdP, NomP ,PrenomP, DateNaisP ,Salaire)

Exprimer en algèbre relationnelle les requêtes suivantes :


a) Les noms et prénoms des pilotes certifiés pour des avions du constructeur Airbus
mais non certifiés pour des avions du constructeur Boeing.

b) Les noms et prénoms des pilotes certifiés pour tous les avions du constructeur
Airbus

c) Les noms et prénoms des pilotes certifiés à la fois pour des avions du constructeur
Airbus et des avions du constructeur Boeing.
d) Les noms et prénoms des pilotes qui ne sont pas certifiés pour des avions airbus.
TD4 : CALCUL RELATIONNEL

^ ET
v OU
7 NOT
-> Multiplication
<-> Equivalence

∀ à l’envers : Universel
∃ existentiel

Exercice 1 : Traduction d’énoncés en langage naturel vers la logique de premier ordre

1. Julien est plus grand que Marc mais Marc est plus maigre que Julien

Plus Grand(x,y) : x est plus grand que y


Plus Maigre(x,y) : x est plus maigre que y

Plus Grand(Julien,Marc) ∧ Plus Maigre( Marc, Julien)

2. Julien a vue Marc mais Marc n’a pas vue Julien

Voir(x,y)

Voir(Julien,Marc) ∧ 7 Voir(Marc,Julien)

3. Julien n’est pas maigre

Est Maigre(x) : x est maigre

7 Est Maigre(Julien)

4. Julien n’aime pas les bonbons

Aime Bonbon(x) : x aime les bonbons

7Aime Bonbon(Julien)

Correction Tableau :
aime(x,y) : x aime y
7 Aime ( Julien , Bonbon)
5. Il existe des enfants qui n’aiment pas les bonbons

Aime(x,y) : x aime y

∃x ( Enfants(x) ) 7Aime(x , bonbon)

6. Tous les enfants qui n’aiment pas les bonbons aiment le chocolat

Aime(x,y) : x aime y

∀x ( Enfants(x)) ∧ 7Aime(enfants,bonbon) ⇒ Aime(enfants,chocolat)

7. Si un enfant n’aime pas les bonbons alors il aime le chocolat et si un enfant n’aime
pas le chocolat alors il aime les bonbons

Aime (x , y ) : x aime y

∀𝑥 𝐸𝑛𝑓𝑎𝑛𝑡𝑠(𝑥) 7Aime(enfant, bonbon) → Aime(enfants,chocolat) ∧ ∀𝑥 𝐸𝑛𝑓𝑎𝑛𝑡𝑠(𝑥)


7Aime (enfant,chocolat) → Aime(enfants,bonbon)

8. Tous les enfants aiment le chocolat sauf Julien

Aime ( x, y) : x aime y
Différent ( x , y ) : x est différent de y

∀x ( Enfants(x) ) ∧ Different(x,Julien) -> aime(x, Chocolat) ∧ 7𝑎𝑖𝑚𝑒(𝐽𝑢𝑙𝑖𝑒𝑛, 𝐶ℎ𝑜𝑐𝑜𝑙𝑎𝑡)

9. Julien déteste tout ce que Marc aime

Un truc(x) : x est un truc

∀𝑥 ( 𝑈𝑛 𝑡𝑟𝑢𝑐(𝑥) ∧ 𝑎𝑖𝑚𝑒 (𝑀𝑎𝑟𝑐 , 𝑥)) −> 7 𝑎𝑖𝑚𝑒(𝐽𝑢𝑙𝑖𝑒𝑛, 𝑥)

10. Si tous les enfants aime le chocolat , alors Julien aime le chocolat

∀𝑥 ( 𝑒𝑛𝑓𝑎𝑛𝑡𝑠(𝑥) ∧ 𝑎𝑖𝑚𝑒𝑟(𝑥, 𝑐ℎ𝑜𝑐𝑜𝑙𝑎𝑡) −> 𝑎𝑖𝑚𝑒𝑟 (𝐽𝑢𝑙𝑖𝑒𝑛 , 𝑐ℎ𝑜𝑐𝑜𝑙𝑎𝑡)


Exercice 2 : Interprétation et compréhension de formules en langage des prédicats

Soient les formules logiques suivantes :


^ ET
v OU
¬ NOT
⇒ Multiplication
⇔ Equivalence

∀ à l’envers : Universel
∃ existentiel

grippe(x) : x à la grippe fièvre ( x) : x a de la fièvre


tousse(x) : x tousse temps(x,y) : x a la température y
sup(x,y) : x est supérieur à y prendre ( x, m) : x prend un médicaments

1. ∀𝑥(𝑔𝑟𝑖𝑝𝑝𝑒( 𝑥) ⇒ 𝑝𝑟𝑒𝑛𝑑𝑟𝑒(𝑥, 𝑇𝑎𝑚𝑖𝑓𝑙𝑢 ) )


Tous les x qui ont la grippe doivent prendre le médicaments Tamiflu

2. ∀𝑥((𝑓𝑖𝑒𝑣𝑟𝑒(𝑥) ∧ 𝑡𝑜𝑢𝑠𝑠𝑒 (𝑥) ) ⇒ 𝑔𝑟𝑖𝑝𝑝𝑒(𝑥) )


Tous les x qui ont de la fièvre et tousse ont la grippe
3. ∀𝑥∀𝑡((𝑡𝑒𝑚𝑝(𝑥, 𝑡) ∧ 𝑠𝑢𝑝(𝑡, 38) ⇒ 𝑓𝑖𝑒𝑣𝑟𝑒(𝑥) )

Tous les x ont un t , x à une température de t et t est supérieur à 38 du coup ils ont de la
fièvre.
4. 𝑡𝑜𝑢𝑠𝑠𝑒(𝐽𝑢𝑙𝑖𝑒𝑛) ∧ ∃𝑡 (𝑡𝑒𝑚𝑝(𝐽𝑢𝑙𝑖𝑒𝑛, 𝑡) ∧ 𝑠𝑢𝑝( 𝑡, 38)
Julien tousse et il peut avoir une température supérieur à 38

5. 𝑝𝑟𝑒𝑛𝑑𝑟𝑒(𝐽𝑢𝑙𝑖𝑒𝑛 , 𝑇𝑎𝑚𝑖𝑓𝑙𝑢 )
Julien prend du Tamiflu
Exercice 3 : Evaluation de formules en langage des prédicats

Éliminer dans les formules suivantes les symboles d’implication et d’équivalences puis
évaluer ces formules: On utilisera

- Les symboles de prédicats : E : Enfants , A : Aimer , D : Détester


- Les symboles de constantes : C : Chocolat , Bonbons
- Les symboles de variables x,y

p ↔ q ≡ (p → q) ∧ (q → p)
p → q ≡ ¬𝑃 ∨ 𝑄

1.∀𝑥(𝐸(𝑥) ⇒ 𝐴 (𝑥, 𝑦) )

∀𝑥( ¬ 𝐸(𝑥) ∨ 𝐴(𝑥, 𝑦) )

2.∀𝑥(𝐸(𝑥) ∧ 𝐷(𝑥, 𝑐 ) ⇔ 𝐸(𝑥) ∧ 𝐷(𝑥, 𝑏)

On enlève le symbole d’équivalences :


P = 𝐸(𝑥) ∧ 𝐷(𝑥, 𝑐)
Q = 𝐸(𝑥) ∧ 𝐷(𝑥, 𝑏)

∀𝑥( (𝑃 → 𝑄 ) ∧ (𝑄 → 𝑃 )

on enlève les symboles d’implication :


∀𝑥( (¬𝑃 ∨ 𝑄) ∧ ( ¬𝑄 ∨ 𝑃)

3.∀𝑥(𝐷(𝑥, 𝑐) ⇔ 𝐸(𝑥) ∧ 𝐷(𝑥, 𝑏)

on a enlever le symbole d’équivalence :


∀𝑥((𝐷(𝑥, 𝑐) → 𝐸(𝑥) ∧ 𝐷(𝑥, 𝑏)) ∧ (𝐸(𝑥) ∧ 𝐷(𝑥, 𝑏) → 𝐷(𝑥, 𝑐))

On va enlever le symbole d’implication :


∀𝑥( ( ¬ 𝐷(𝑥, 𝑐) ∨ (𝐸(𝑥) ∧ 𝐷(𝑥, 𝑏) ) ∧ ¬(𝐸(𝑥) ∧ 𝐷(𝑥, 𝑏)) ∨ 𝐷(𝑥, 𝑐) )

4.∀𝑥(𝐷(𝑥, 𝑐) ∧ 𝐷(𝑥, 𝑏) ⇒ 𝐸(𝑥) )

On va enlever le symbole d’implication :

∀𝑥(¬(𝐷(𝑥, 𝑐) ∧ 𝐷(𝑥, 𝑏) ) ∨ 𝐸(𝑥) )

5.∀𝑥(𝐷(𝑥, 𝑐) ⇒ 𝐴(𝑥, 𝑏)

on enlève le symbole d’implication :

∀𝑥( ¬𝐷(𝑥, 𝑐) ∨ 𝐴(𝑥, 𝑏)


Exercice 4 : Calcul relationnel de tuples(CRT)

Soit une base de données Société ayant le schéma relationnel suivant :

Employé(NSS, Nom E, Prenom E, Date Naiss , Adresse, Salaire, DeptID*)


Department(Dept ID, NomD ,NSS_Chef*)
Projet ( CodeP, NomP, Budget, DeptId*)
Participer ( NSS, CodeP, DateDebut )

En calcul relationnel de tuples, formuler les requêtes suivantes :


1. Retrouver les employés ayant un salaire supérieur à 2000

{e | Employé(e) ^ Salaire > 2000 }

2. Lister les noms, prénoms et adresses des employés du département numéro 5

{e.Nom E, e.Prénom E , e.Adresse | Employé(e) ^ e.DeptId = 5 }

3. Trouver le nom du département pour lequel travaille Henri Bientôt

{d.NomD | Department(D) ^ ∃𝑒( Employé(e) ^ e.Nom E = Bientôt ^ e.Prenom E = Henri }

4. Trouver le NSS et les dates début des employés participant au projet numéro 2 ou au
projet numéro 11

{p.NSS,p.DateDebut | Participer(p) ^ p.CodeP = 2 ∨ p.CodeP = 11 }

5. Trouver les noms et prénoms des employés qui participent à tous les projets

👍
{e.Nom , e.Prenom | Employé(e) -> ∃p( Participer(p) ^ p.NSS = e.NSS }
(bon en vrai pour celui là j’en ai aucune IDÉE )

Exercice 5 : Calcul relationnel de domaines (CRD)

Les mêmes questions que ci-dessus.

1. {Nom,Prénom | Employé(-,Nom E : Nom , Prenom E : Prénom , - , - ,Salaire > 2000 ,


- )}

2. {Nom,Prenom,Adresse | Employé ( - , Nom E : Nom , Prenom E : Prénom, - ,Adresse


: Adresse,-,DepID = 5 )}

3. {NomDep |
∃𝑑(𝐸𝑚𝑝𝑙𝑜𝑦é(−, 𝑁𝑜𝑚 𝐸 = 𝐵𝑖𝑒𝑛𝑡ô𝑡 , 𝑃𝑟𝑒𝑛𝑜𝑚 𝐸 = 𝐻𝑒𝑛𝑟𝑖 , −, −, −, 𝐷𝑒𝑝𝑡𝐼𝑑 = 𝑑) ∧
Department (Dept ID = d, NomD : NomDep ,-)}
4.
5.
Exercice 6 : AR, CRT et CRD

Soit le schéma relationnel suivant :


Livre ( Cote, Titre, Editions, ISBN)
Etudiant ( Num étu, Nom , prénom , Date Nais, Adresse)
Emprunter ( Cote , Num Étu , Date Emprunt , Date restitution)

Pour chacune des questions suivantes , formuler une requête en AR et son équivalent en
CRT et CRD

1. Tous les titres des livres


AR:
CRT :
CRD :

2. Tous les titres des livres déjà empruntés


AR:
CRT :
CRD :

3. Les noms et prénoms des étudiants ayant déjà emprunté des livres
AR:
CRT :
CRD :

4. les titres des livres empruntés par tous les étudiants


AR:
CRT :
CRD :

5. Les noms et prénoms des étudiants ayant empruntés tous les livres
AR:
CRT :
CRD :

6. Les noms et prénoms des étudiants qui n’ont jamais emprunté des livres
AR:
CRT :
CRD :

7. les titres et dates d’emprunts effectués par ‘létudiant ayant le numéro 2008123456
AR:
CRT :
CRD :
TD4 SQL1
Exercice 1 :
Soient une base de données Employés contenant les deux relations suivantes :
Emp( noemp : N, nom : T , prénom :T , embauche :D,nosupr : N , titre , nodept* : N ,
salaire : N, tx_ commission : N)
Dept(nodept : N,nom : T, noregion : N)

Avec N : Numérique , T : Texte et D : Date

Ecrire les requêtes SQL permettant de :


1. Sélectionner le nom , le prénom , la date d’embauche et le salaire de tous les
employés triés selon l'ordre alphabétique du nom et du prénom.

SELECT nom , prenom , embauche , salaire FROM Emp ORDER BY nom , prenom ASC;

2. Sélectionner les employés dont le nom commence par la lettre M et le prénom par la
lettre N

SELECT nom , prenom FROM Emp WHERE nom like “M%” and prenom like “N%”;

3. Sélectionner le nom , le prénom et le numéro du supérieur hiérarchique de tous les


employés embauchés avant le premier janvier 1999.

SELECT nom , prenom , nosupr FROM Emp WHERE embauche < ‘1999-01-01’;

4. Sélectionner le nom , le prénom et le salaire de tous les employés sauf ceux qui
n’ont pas de supérieur hiérarchique trié selon l'ordre croissant du salaire.

SELECT nom , prenom , salaire FROM Emp WHERE nosupr IS NOT null ORDER BY
salaire ASC;

5. Sélectionner le nom, le prénom , la date d’embauche et le salaire de tous les


employés du département ayant le numéro 31 et embauchés durant l’année 2010.

SELECT nom , prenom , embauche , salaire FROM Emp WHERE nodept = 31 AND
YEAR(embauche ) = 2010;

6. Sélectionner le nom , le prénom , la date d’embauche et le salaire de tous les


employés de tous les départements sauf le numéro 31 et 41

SELECT nom , prenom , embauche , salaire FROM Emp WHERE nodept NOT IN (31, 41);

7. Afficher pour chaque employé, son nom , prénom , nom de son département et
numéro de région de département.

SELECT e.nom , e.prenom , d.nom , d.noregion FROM Emp e, Dept d WHERE e.nodept =
d.nodept GROUP BY e.nom , e.prenom;
8. Afficher pour chaque employé le nom et prénom de son supérieur hiérarchique.

SELECT e.nom , e.prenom FROM Emp e JOIN Emp e2 WHERE e.nosupr = e2.noemp ;

natural join ?

9. Afficher pour chaque département , le salaire moyen et le salaire maximum et


minimum ainsi que le nombre d'employés de ce département.

SELECT d.nom, COUNT(e.noemp), AVG(e.salaire) , MIN(e.salaire) , MAX(e.salaire) FROM


Emp e , Dept d WHERE d.nodept = e.nodept GROUP BY d.nom;

10. Afficher le nom et prénom de l’employé ayant le salaire le plus élevé

SELECT nom , prenom FROM Emp WHERE salaire = ( SELECT MAX(salaire) From Emp);

11. Afficher les employés ayant un salaire plus élevé que celui du président de la
société( ici , on suppose que le président est un employé qui n’a pas de supérieur
hiérarchique).

SELECT nom , prenom FROM Emp WHERE salaire > (SELECT salaire FROM emp
WHERE nosupr IS NULL);
Exercice 2 :

Soit une base de données Société ayant le schéma relationnel suivant :


Employé ( NSS , NomE, PrénomE, DateNais, Adresse, Salaire , DeptId*)
Département ( DeptID , NomD, NSS_Chef*)
Projet(CodeP, NomP , Budget, DeptId*)
Participer ( NSS , CodeP , DateDebut )

Formuler en SQL les requêtes suivantes :

1. Afficher les employés ayant un salaire supérieur à 2000 et inférieur à 3000 et nés
après le mois de mars de 1980

SELECT * FROM Employé WHERE Salaire > 2000 AND Salaire < 3000 AND
DateNais > ‘1980-03-31’;

2. Lister les noms , prénoms et adresses des employés du département numéro 5 et 6.

SELECT nomE, PrénomE, Adresse FROM Employé WHERE DeptID IN (5,6);

3. Trouver le nom du département pour lequel travaille Henri Binot

SELECT NomD FROM Employé, Département WHERE Employé.DeptID =


Département.DeptID AND Employé.NomE = “Binot” AND Employé.PrenomE
= “Henri” ;

OU

SELECT NomD FROM Département d INNER JOIN Employé e ON d.DeptID =


e.DeptID WHERE e.NomE = “Binot” AND e.PrenomE = “Henri”;

4. Trouver le NSS et les dates de début des employés participant au projet numéro 2 ou
11.

SELECT DISTINCT NSS , Datedebut FROM Participer WHERE CodeP = 2 OR


CodeP = 11;

On utilise DISTINCT au cas où des employés apparaissent en doublon.

5. Le nom du département pour lequel est affecté le projet ayant le budget le plus élevé

SELECT d.NomD FROM Département d , Projet p WHERE d.DeptID =


p.DeptID AND p.Budget = (SELECT MAX( Budget ) FROM Projet );

OU

SELECT d.NomD FROM Département d INNER JOIN Projet p ON d.DeptID =


p.DeptID WHERE p.Budget = (SELECT MAX( Budget ) FROM Projet );
6. Afficher pour chaque département le nom et prénom de son chef

SELECT d.NomD , e.NomE , e.PrenomE FROM Departement d INNER JOIN


Employé e ON d.NSS_Chef = e.NSS;

OU

SELECT d.NomD , e.NomE , e.PrenomE FROM Departement d ,Employé e


WHERE d.NSS_Chef = e.NSS;

7. Le budget moyen des projets

SELECT AVG( Budget ) AS BudgetMoyen FROM Projet ;

8. La date de début du projet le plus récent

AVEC LIMIT :

SELECT DateDebut FROM Participer


WHERE CodeP = (SELECT CodeP FROM Projet ORDER BY DateDebut DESC
LIMIT 1);

SANS LIMIT :

SELECT DateDebut FROM Participer WHERE CodeP = (SELECT CodeP FROM


Projet WHERE DateDebut =(SELECT MAX(DateDebut) FROM Projet));

9. Le nombre de projets par département

SELECT NomD, COUNT(CodeP) AS NombreProjets


FROM Département LEFT JOIN Projet ON Département.DeptID =
Projet.DeptID GROUP BY Département.DeptID;

OU

SELECT NomD, COUNT(CodeP) AS NombreProjets


FROM Département ,Projet WHERE Département.DeptID = Projet.DeptID
GROUP BY Département.DeptID;

10. Le département ayant le plus de projets

R1 = SELECT( COUNT(CodeP) FROM Projet GROUP BY DeptID) AS


ProjetDept;

SELECT NomD, COUNT(CodeP) AS NombreProjets FROM Département, Projet


WHERE Département.DeptID = Projet.DeptID GROUP BY
Département.DeptID
HAVING COUNT(CodeP) = ( SELECT MAX(NumProjets) FROM ( R1 ) );

Exercice 3 :

Soit le Schéma relationnel suivant :

Livre ( Cote , Titre , Edition , ISBN )


Etudiant ( Num_etu , Nom , Prénom , Date Nais , Adresse)
Emprunter ( Cote , Num_ Etu , Date d’emprunt , Date restitution)

Pour chacune des questions suivantes , formuler une requête SQL :

1. Tous les titres des livres

SELECT Titre FROM Livre;

2. Tous les titres des livres déjà empruntés

SELECT DISTINCT Livre.Titre FROM Livre INNER JOIN Emprunter ON


Livre.Cote = Emprunter.Cote;

SELECT DISTINCT Livre.Titre FROM Livre, Emprunter WHERE Livre.Cote


= Emprunter.Cote;

3. Les noms et prénoms des étudiants ayant déjà emprunté des livres.

SELECT DISTINCT Etudiant.Nom, Etudiant.Prénom FROM Etudiant INNER


JOIN Emprunter ON Etudiant.Num_etu = Emprunter.Num_Etu;

SELECT DISTINCT Etudiant.Nom, Etudiant.Prénom FROM Etudiant,


Emprunter WHERE Etudiant.Num_etu = Emprunter.Num_Etu;

4. Le nom de l’étudiant le plus âgé

SELECT Nom, Prénom FROM Etudiant ORDER BY DateNais ASC LIMIT 1;

SELECT Nom, Prénom FROM Etudiant WHERE DateNais = ( SELECT


MIN(DateNais) FROM Etudiant );

5. Le titre du livre le plus emprunté

SELECT Livre.Titre FROM Livre INNER JOIN Emprunter ON Livre.Cote =


Emprunter.Cote GROUP BY Livre.Titre ORDER BY COUNT(*) DESC LIMIT 1;

SELECT Livre.Titre FROM Livre, Emprunter WHERE Livre.Cote =


Emprunter.Cote GROUP BY Livre.Titre HAVING COUNT(*) = ( SELECT
MAX(NumEmprunts) FROM ( SELECT COUNT(*) AS NumEmprunts FROM
Emprunter GROUP BY Cote ));
6. Les ISBN des livres empruntés par Julien Haribo

SELECT Livre.ISBN FROM Livre INNER JOIN Emprunter ON Livre.Cote =


Emprunter.Cote INNER JOIN Etudiant ON Emprunter.Num_ Etu =
Etudiant.Num_etu WHERE Etudiant.Nom = 'Haribo' AND Etudiant.Prénom
= 'Julien';

SELECT Livre.ISBN FROM Livre, Emprunter, Etudiant WHERE Livre.Cote


= Emprunter.Cote AND Emprunter.Num_ Etu = Etudiant.Num_etu AND
Etudiant.Nom = 'Haribo' AND Etudiant.Prénom = 'Julien';

7. les titres des livres empruntés en janvier 2011

SELECT Livre.Titre FROM Livre INNER JOIN Emprunter ON Livre.Cote =


Emprunter.Cote
WHERE YEAR(Emprunter.`Date d’emprunt`) = 2011 AND
MONTH(Emprunter.`Date d’emprunt`) = 1;

8. La moyenne des durées des emprunts

SELECT AVG( DATEDIFF(`Date restitution`, `Date d’emprunt`)) FROM


Emprunter;

9. les titres des livres comportant le mots Algorithme

SELECT Titre FROM Livre WHERE Titre LIKE '%Algorithme%';

10. le nombre d’emprunts pour chaque livre.

SELECT Livre.Titre, COUNT(*) AS NombreEmprunts FROM Livre INNER


JOIN Emprunter ON Livre.Cote = Emprunter.Cote GROUP BY Livre.Titre;
TD5 SQL2

Exercice 1 : Interrogation d’une base de donnée

Soit le schéma relationnel suivant :

Livre ( Cote , Titre , Editions , ISBN , Langue )


Auteur ( Num aut , Nom aut , Prenom aut )
Ecrire ( Cote , Num Aut )
Etudiant ( Num Etu , Nom , Prenom , Date Nais , Adresse )
Emprunter ( Cote , Num Etu , Date emprunt , Date Restitution )

Pour chacune des questions suivantes , formuler une requête SQL :

1. Tous les titres des livres

SELECT Titre FROM Livre;

2. Les titres de tous les livres en langue française

SELECT Titre FROM Livre WHERE Langue = 'français';

3. Tous les titres des livres déjà empruntés

SELECT DISTINCT Livre.Titre FROM Livre, Emprunter WHERE Livre.Cote


= Emprunter.Cote;

4. Les noms et prénoms des étudiants ayant déjà emprunté des livres

SELECT DISTINCT Etudiant.Nom, Etudiant.Prenom FROM Etudiant,


Emprunter WHERE Etudiant.Num_Etu = Emprunter.Num_Etu;

5. Les titres des livres dont l’un des auteurs est Andrew Tanenbaum

SELECT Livre.Titre FROM Livre, Auteur WHERE Livre.Cote =


Auteur.Cote
AND Auteur.Nom_aut = 'Tanenbaum' AND Auteur.Prenom_aut = 'Andrew';

OU

SELECT Livre.Titre FROM Livre INNER JOIN Auteur ON Livre.Cote =


Auteur.Cote WHERE Auteur.Nom_aut = “Tanenbaum” AND
Auteur.Prenom_aut = “Andrew”;

6. Les nom de l'étudiant le plus âgé


SELECT Nom, Prenom FROM Etudiant WHERE Date_Nais =
(SELECT MAX( Date_Nais ) FROM Etudiant );

7. Les titres du livre le plus emprunté

SELECT Livre.Titre FROM Livre , Emprunter WHERE Livre.Cote =


Emprunter.Cote GROUP BY Livre.Titre ORDER BY COUNT(*) DESC LIMIT 1;

OU

SELECT Livre.Titre FROM Livre, Emprunter WHERE Livre.Cote =


Emprunter.Cote GROUP BY Livre.Titre HAVING COUNT(*) >= ALL ( SELECT
COUNT(*) FROM Emprunter GROUP BY Cote );

8. Les ISBN des livres emprunté par Julien Dallet

SELECT Livre.ISBN FROM Livre, Emprunter, Etudiant WHERE Livre.Cote


= Emprunter.Cote AND Emprunter.Num_Etu = Etudiant.Num_Etu AND
Etudiant.Nom = 'Dallet' AND Etudiant.Prenom = 'Julien';

9. Les titres des livres empruntés en janvier 2011

SELECT Livre.Titre FROM Livre, Emprunter WHERE Livre.Cote =


Emprunter.Cote AND YEAR(Emprunter.Date_emprunt) = 2011 AND
MONTH(Emprunter.Date_emprunt) = 1;

10. Les titres de livres comportant le mots Algorithme

SELECT Titre FROM Livre WHERE Titre LIKE “%Algorithme%” ;

11. les titres des livre comportant soi tle mots SQL mais pas Base de données

SELECT Titre FROM Livre WHERE Titre LIKE “%SQL%” AND LIKE NOT
“%Base de données%”;

12. Les titres des livres comportant soit le mot SQL soit Base de données

SELECT Titre FROM Livre WHERE Titre LIKE “%SQL%” OR Titre LIKE
“%Base de données%”;

13. le nombre d'emprunt pour chaque livre

SELECT Livre.Titre, COUNT(*) AS "Nombre d'emprunts" FROM Livre,


Emprunter WHERE Livre.Cote = Emprunter.Cote GROUP BY Livre.Titre;

14. le nombre de livres pour chaque auteur.


SELECT Auteur.Nom_aut, Auteur.Prenom_aut, COUNT(*) AS "Nombre de
livres" FROM Auteur GROUP BY Auteur.Nom_aut, Auteur.Prenom_aut;

Exercice 2 : Traitements sur les chaînes de caractères et dates

Soit le schéma de la base du données du précédent exercice :

Livre ( Cote , Titre , Editions , ISBN , Langue )


Auteur ( Num aut , Nom aut , Prenom aut )
Ecrire ( Cote , Num Aut )
Etudiant ( Num Etu , Nom , Prenom , Date Nais , Adresse )
Emprunter ( Cote , Num Etu , Date emprunt , Date Restitution )

Donner en SQL les requêtes suivantes :

1. La durée moyenne des prêts

SELECT AVG(DATEDIFF ( Date Restitution , Date Emprunt ) ) AS


“MoyenneEmprunt” FROM EMPRUNTER;

2. Les jours de semaine correspondant aux prêts effectués par l’étudiant numéro
20109870001

SELECT DAYNAME(Date_Emprunt) AS “Jour_Semaine” FROM Emprunter WHERE


Num_Etu = '20109870001';

3. Tous les livres empruntés un lundi

SELECT Livre.Titre FROM Livre , Emprunter WHERE Livre.Cote =


Emprunter.Cote AND DAYNAME(Date_emprunt ) = ‘Monday’;

4. Tous les livres empruntés un lundi et restitués un mardi

SELECT Livre.Titre FROM Livre , Emprunter WHERE Livre.Cote =


Emprunter.Cote AND DAYNAME(Date_emprunt) = ‘Monday’ AND
DAYNAME(Date_Restitution) = ‘Tuesday’;

5. Les titres des livres empruntés un mois de mars

SELECT Livre.Titre
FROM Livre, Emprunter
WHERE Livre.Cote = Emprunter.Cote AND MONTH(Date_Emprunt) = 3;

6. Les titres des livres empruntés durant le premier trimestre 2015

SELECT Livre.Titre
FROM Livre, Emprunter
WHERE Livre.Cote = Emprunter.Cote AND YEAR(Date_Emprunt) = 2015 AND
QUARTER(Date_Emprunt) = 1;

7. la durée moyenne des prêts par mois en 2015

SELECT MONTH(Date_Emprunt) AS “Mois”,


AVG(DATEDIFF(Date_Restitution,Date_Emprunt)) AS “Moyenne_Prets”
FROM Emprunter
WHERE YEAR(Date_Emprunt) = 2015 GROUP BY MONTH(Date_Emprunt);

8. les livres empruntés un premier mois en 2015

SELECT Titre FROM Livre WHERE Cote IN


(
SELECT Cote
FROM Emprunter
WHERE DateEmprunt BETWEEN '2015-01-01' AND '2015-01-31'
);

9. Calculer pour chaque emprunt de livre la date limite de restitution sachant que la
durée d’emprunt pour les étudiants est de 15 jours.

SELECT Cote, NumE, DateEmprunt, DATE_ADD(DateEmprunt, INTERVAL 15


DAY) AS DateLimiteRestitution FROM Emprunter;

10. La liste des étudiants ayant emprunté des livres sans les restituer après la date
réglementaire.

SELECT NumE, Nom, Prenom


FROM Etudiant
WHERE NumE IN (
SELECT NumE
FROM Emprunter
WHERE DateRestitution > DATE_ADD(DateEmprunt, INTERVAL 15 DAY)
);

11. Former les mails des étudiants sachant qu’ils sont de la forme
prenom_nom@ens.univ-artois.fr

SELECT CONCAT(LOWER(Prenom), '_', LOWER(Nom),


'@ens.univ-artois.fr') AS Email FROM Etudiant;

12. Les noms et prénoms des étudiants habitant rue Jule Verne à Arras

SELECT UPPER(Nom) AS Nom, LOWER(Prenom) AS Prenom


FROM Etudiant
WHERE Adresse LIKE '%rue Jules Verne%' AND Adresse LIKE '%Arras%'

13. Afficher les noms des étudiants en majuscules et prénoms en minuscules

SELECT UPPER( Nom ) , LOWER ( Prenom ) FROM Etudiant ;

14. Quel est le prénom des étudiants les plus fréquents.

SELECT Prenom FROM Etudiant GROUP BY Prenom ORDER BY COUNT(*)DESC


LIMIT 1

OU

SELECT Prenom FROM Etudiant GROUP BY Prenom


HAVING COUNT(*) = (
SELECT MAX(cnt)
FROM (
SELECT COUNT(*) AS cnt
FROM Etudiant
GROUP BY Prenom
) inter → ( juste un alias pour la table intermédiaire )
);

RAPPEL :

DAYNAME → Jour de la semaine : { ‘Monday’ , ‘Tuesday’ , … }


DAY -> le Jour : { 1 , 2 , … , 30/31 }
MONTH → Mois : { 1, 2, 3, … , 12 }
YEAR → Année : { 2011, …}
QUARTER → Trimestre

AVG → Moyenne
UPPER → Majuscule ex : ‘ t ‘ → ‘T’
LOWER → Minuscule ex : ‘T’ → ‘t’
CONCAT → Permet de concaténer des phrases ex : “Hello” “World” → “Hello World”

DATE_ADD → permet d’ajouter une durée à une date donnée


Ex : DATE_ADD ( date , INTERVAL valeur unité )

DATE_DIFF → Permet de calculer la différence entre deux dates en JOURS.


BETWEEN → Un intervalle entre deux dates.

INTERVAL → Permet de spécifier une durée en année , mois , jours , heures , …


Ex : INTERVAL valeur unité
Exercice 3 : Mise à jour d’une base de données

Soit le schéma relationnel de l’exercice 1 :

Livre ( Cote , Titre , Editions , ISBN , Langue )


Auteur ( Num aut , Nom aut , Prenom aut )
Ecrire ( Cote , Num Aut )
Etudiant ( Num Etu , Nom , Prenom , Date Nais , Adresse )
Emprunter ( Cote , Num Etu , Date emprunt , Date Restitution )

Donner les instructions SQL permettant de :

1. Réécrire les noms des auteurs dans la base en majuscules

UPDATE Auteur SET Nom_aut = UPPER( Nom_aut ) ,


Prenom_aut = UPPER(Prenom_aut );

2. Remplacer, dans Livre , les éditions Flèches par Arcs.

UPDATE Livre SET Editions = “Arcs” WHERE Editions = “Flèches”;

3. Supprimer tous les livres en langue espagnole

DELETE FROM Livre WHERE Langue = “espagnole”;

4. Supprimer tous les emprunts concernant le livre SQL Avancé

DELETE FROM Livre, Emprunter WHERE Livre.Cote = Emprunter.Cote AND


Livre.Titre = “SQL Avancé” ;

5. Insérer un nouveau livre avec la cote PL201

INSERT INTO Livre ( Cote , Titre , Editions , ISBN , Langue )


VALUES ( ‘PL201’, “Jesaispas” , “NouveauLivre” ,”bcp de chiffre” ,
“Langue_livre” ) ;

6. Soit à insérer un nouveau livre Au cœur des serveurs écrit par deux nouveaux
auteurs Pierre Troglodyte et Jean Caverne. La cote de ce livre est RES101, son
édition est Traces et son ISBN est 778601654320.
Écrire la commande SQL nécessaire pour réaliser cette mise à jour de la base.

INSERT INTO Livre (Cote, Titre, Editions, ISBN, Langue)


VALUES ('RES101', 'Au cœur des serveurs', 'Traces',
'778601654320', 'Langue du livre');
INSERT INTO Auteur (Num_aut, Nom_aut, Prenom_aut)
VALUES (1, 'Troglodyte', 'Pierre'), (2, 'Caverne', 'Jean');

INSERT INTO Ecrire (Cote, Num_aut)


VALUES ('RES101', 1), ('RES101', 2);

7. Soit l’étudiant ayant le numéro 200953648811 voulant effectuer un emprunt


concernant le livre ayant le code BD098. Mettre à jour la base afin de réaliser cet
emprunt.

INSERT INTO Emprunter (Cote, Num_Etu,


Date_emprunt,Date_restitution)
VALUES ('BD098', '200953648811', '2023-04-26', NULL);
TD6 : LDD & LCD

Soit le modèle relationnel de la base de données :

Country ( Code , Name , Continent , SurfaceArea, IndepYear, Population , LifeExpectancy,


Capital*)
City ( ID, Name , CountryCode* , Population)
CountryLanguage ( CountryCode, Language, IsOfficial , Percentage )

Exercices 1 : Vue et Index

1. Dans la base de données ci-dessus, on fait énormément de requêtes sur le nom des
villes ( notamment des recherches de villes par nom).
Proposer et implémenter une solution pour accélérer ces requêtes.

Nous pouvons créer un index sur la colonne Name de la table City. Cela nous permet de
rechercher des villes en utilisant l’index plutôt que de parcourir la table en entier.

CREATE INDEX idx_city_name ON City(Name);

2. Supposons que dans notre application, on a souvent besoin d’afficher des pays et
leur capitales.
Proposer et implémenter une solution pour ce genre de requête.

Nous pouvons créer une vue qui joint les tables Country et City sur la colonne Capital. Cela
nous permet d’obtenir les informations des deux tables en une seule requête.

CREATE VIEW country_capital


AS SELECT Country.Name AS CountryName , City.Name AS CapitalName
FROM Country, City WHERE Country.Capital = City.ID;
Exercice 2 : Gestion des privilèges

Dans notre application, plusieurs utilisateurs accèdent et utilisent la même base de données
sur un serveur. Les utilisateurs accèdent depuis les clients MySQL sur leurs machines.

1. Accorder à tous les utilisateurs le droit d’accéder en lecture à la vue créée dans
l’exercice 1.

GRANT SELECT ON Country_capital TO ‘username’@’localhost’;

GRANT SELECT ON Country_capital TO PUBLIC;

2. Accorder le droit d’insérer sur la table Country à l’utilisateur tycoon depuis la machine
192.168.1.12

GRANT INSERT ON Country TO ‘tycoon’@’192.168.1.12’;

3. Accorder le droit de supprimer sur la table City à tous les utilisateurs depuis les
machines du sous-réseau 192.168.1.X

GRANT DELETE ON City TO ‘username’@’192.168.1.%’;

4. Accorder à l’utilisateur alpha le droit de mettre à jour et supprimer sur les tables
Country et City avec possibilité de redistribuer ces privilèges

GRANT UPDATE, DELETE, GRANT OPTION ON Country , City TO


‘alpha’@’localhost’;

5. Retirer le privilège de suppression de la table City à l’utilisateur alpha

REVOKE DELETE ON City FROM ‘alpha’@’localhost’;

6. Retirer le privilège de redistribuer les privilèges sur la table CIty à l’utilisateur alpha

REVOKE GRANT OPTION ON City FROM ‘alpha’@’localhost’;

7. Accorder le privilège de mettre à jour la table Country à l’utilisateur alpha de


n’importe quelle machine mais avec le mot de passe ‘beta’

GRANT UPDATE ON Country TO ‘alpha’@’%’ IDENTIFIED BY ‘beta’;

8. Accorder le droit d’accéder en lecture seul à l’utilisateur gamma uniquement aux


colonnes Name et Population de la table City
GRANT SELECT ( Name , Population ) ON City TO ‘gamma’@’localhost’;

9. Proposer pour la question précédente une deuxième solution pour une vue.

CREATE VIEW city_name_population AS


SELECT Name, Population
FROM City;

GRANT SELECT ON city_name_population TO gamma;


Exercice 3 : Déclencheurs

OLD : Permet d’accéder à la valeur avant qu’il ne soit modifié par le déclencheur.
NEW : Permet d’accéder à la valeur après qu’il soit modifié par le déclencheur.

1. Créer un déclencheur nouvelle_ville qui s’exécute automatiquement après l'insertion


d’une nouvelle ville et qui ajoute la population de la ville ajoutée à la population du
pays concerné.

CREATE TRIGGER nouvelle_ville AFTER INSERT ON City


FOR EACH ROW
BEGIN
UPDATE Country
SET Population = Population + NEW.Population
WHERE Country.Code = NEW.CountryCode;
END;

2. Créer un déclencheur suppr_ville qui s’exécute automatiquement après la


suppression d’une ville et qui retourne la population de la ville supprimée de la
population du pays concerné

CREATE TRIGGER suppr_ville AFTER DELETE ON City


FOR EACH ROW
BEGIN
UPDATE Country
SET Population = Population - OLD.Population
WHERE Country.Code = OLD.CountryCode;
END;

3. Créer un déclencheur update_op_ville qui s'exécute automatiquement avant la mise


à jour de la population d'une ville et qui met à jour en conséquence la population du
pays concerné.

CREATE TRIGGER update_op_ville BEFORE UPDATE ON City


FOR EACH ROW
BEGIN
DECLARE nouv_population INT;
SET nouv_population = NEW.Population - OLD.Population;
UPDATE Country
SET Population = Population + nouv_population
WHERE Country.Code = NEW.CountryCode;
END;
Exercice 4: Transactions

Réalisons les traitements de l’exercice 3 avec des transitions :


1. Créer une transaction pour ajouter la ville (‘Ushuaïa’ , ‘ARG’ , ‘Ushuaïa’ , 56825 ) et
mettre à jour en conséquence le pays concerné ( ici , l’Argentine ).

START TRANSACTION;
INSERT INTO City (Name, CountryCode, District, Population) VALUES
('Ushuaïa', 'ARG', 'Ushuaïa', 56825);
UPDATE Country SET Population = Population + 56825 WHERE Code =
'ARG';
COMMIT;

2. Créer une transaction pour supprimer la ville d'Ushuaia et mettre à jour en


conséquence le pays concerné.

START TRANSACTION;
DELETE FROM City WHERE Name = 'Ushuaïa';
UPDATE Country SET Population = Population - 56825 WHERE Code =
'ARG';
COMMIT;

3. Créer une transaction pour mettre à jour la population de la ville de Santa Clara en
l’augmentant de 10 000 habitants et mettre à jour en conséquence le pays concerné.

START TRANSACTION;
UPDATE City SET Population = Population + 10000 WHERE Name = 'Santa
Clara';
UPDATE Country SET Population = Population + 10000 WHERE Code =
(SELECT CountryCode FROM City WHERE Name = 'Santa Clara');
COMMIT;
TD7 : Dépendances fonctionnelles et normalisation

Axiomes d'Armstrong

Réflexivité :

Tout groupe d'attributs se détermine lui-même et détermine chacun de ses attributs ( ou


sous-groupe de ses attributs ).

Soient X et Y des attributs :

XY → XY , XY → X et XY → Y

Augmentation :

Si un attribut X détermine un attribut Y, alors tout groupe composé de X enrichi avec d'autres
attributs détermine un groupe composé de Y et enrichi des mêmes attributs.

Soient X , Y et Z des attributs :

X → Y => XZ → YZ

Transitivité :

Si un attribut X détermine un attribut Y et que cet attribut Y détermine un autre Z , alors X


détermine Z.

Soit X , Y et Z des attributs :

X→ Y et Y → Z => X → Z

J’ai pas menti :’D


Exercice 1 : Axiomes d’Armstrong

Montrer que les axiomes d’Union , décomposition et pseudo-transitivité sont des axiomes
dérivés à partir des trois premiers axiomes ( réflexivité , augmentation et transitivité )

UNION

Si un attribut détermine plusieurs autres attributs, alors il détermine tout groupe composé de
ces attributs.

Soient X, Y et Z des attributs :

X → Y et X → Z => X → YZ

Elle est déduite de la réflexivité, de l’augmentation et de la transitivité :

X → Y et X → Z => X → XX et XX → XY et YX → YZ => X → YZ

DECOMPOSITION

Si un attribut détermine un groupe d’attribut, alors il détermine chacun des attributs de ce


groupe pris individuellement.

Soient X, Y et Z des attributs :

X → YZ => X → Z et X → Y

Cette propriété est déduite de la réflexivité et de la transitivité :

X → YZ => X → YZ et YZ → Z => X → Z

PSEUDO-TRANSITIVITÉ

Si un attribut X détermine un autre attribut Y , et que Y appartient à un groupe G qui


détermine un troisième attribut Z , alors le groupe G’ obtenu en substituant Y par X dans G
détermine également Z.

Soient W , X , Y et Z des attributs :

X → Y et WY → Z => WX → Z

Cette propriété est déduite de l’augmentation et de la réflexivité :

X → Y et WY → Z => WX → WY et WY → Z => WX → Z
Exercice 2 : Dépendances fonctionnelles et clés des relations

Soit une relation R( A,B,C,D ) ayant l’extension suivante :

A B C D

a1 b1 c1 d1

a1 b2 c1 d2

a2 b2 c2 d3

a3 b1 c1 d2

a4 b4 c3 d2

1. Les dépendances fonctionnelles A → B et A → C sont elles satisfaites par l’extension


de R ci-dessus.

Pour déterminer si les dépendances fonctionnelles A → B et A → C sont satisfaites par


l’extension de la Relation R , vérifions si toutes les valeurs de B et C pour une valeur donnée
s A sont les mêmes.

👍
( en gros :

😡
b1 et c1 , b2 et c2 , b3 et c3 , b4 et c4
b1 et c2 , b3 et c1, ... )

Pour A = a1 , nous avons deux cas ( a1 , b1 , c1 , d1 ) et ( a1, b2 , c1 , d2 ). Les valeurs de


B ne sont pas les mêmes donc A → B n’est pas satisfait.

Pour A = a2 , nous avons un cas ( a2 ,b2 , c2 et d3 ) , les valeurs de B et C sont les mêmes
donc les deux dépendances fonctionnelles sont satisfaites.

Pour A = a3, nous avons un cas , ( a3, b1, c1, d2 ), les valeurs de B et C sont les mêmes,
donc les deux dépendances fonctionnelles sont satisfaites.

Pour A = a4 , nous avons un seul enregistrement : ( a4 , b4 , c3 et d2 ) les valeurs B et C ne


sont pas les mêmes, les deux dépendances fonctionnelles ne sont pas satisfaites.

2. Sachant que dans une relation , la clé primaire détermine tous les autres
attributs,existe-t-il d’après l’extension ci-dessus un attribut qui peut jouer le rôle de
clé primaire.

Aucun ? Car on a pas d’attribut unique ?


3. Donner les couples d’attributs qui pourraient être des clés candidates pour la relation
R.

{A}
{A, B}
{A, C}
{A, B, C}
{A, D}
{A, B, D}
{A, C, D}
{A, B, C, D}

4. Existe-t-il d’autres clés candidates ?

Il n’y a pas d’autres clés candidates dans cette relation R, car A est le seul attribut qui
apparaît dans toutes les lignes de la table.
Exercice 3 : DFs et relation universelle

L’étude d’un petit système d’informations relatif à la gestion de certains enseignements a


recensé les informations suivantes :

- NumEtudiant ( Numéro Etudiant )


- NomEtudiant ( Nom Etudiant )
- NumUE ( Numéro de l’Unité d’Enseignement )
- NomUe ( Nom de l’Unisté d’Enseignement )
- NbHeuresUe( Nombre d’heures de l’unité d’enseignement )
- NSSEns ( Numéro de sécurité sociale de l’enseignant)
- NomEns ( Nom de l’enseignant )
- Grade ( Grade de l’enseignant )
- Indice ( Indice associé au grade de l’enseignant )
- UFR ( UFR de rattachement de l’enseignant )
- Resultat UE ( résultat d’un étudiant dans une UE )

En plus, dans ce système d’information, il s’avère que :


- Un Etudiant peut s’inscrire à plusieurs unités d’enseignement
- Une UE est assurée par un seul enseignant. Ce dernier est rattaché à une seule
UFR
- A chaque grade d’un enseignant correspond un seul indice de salaire

Questions :

1. Construire la relation universelle de ce système d’information et proposer une clé


primaire

Etudiant( NumEtudiant , NomEtudiant )


Enseignant ( NSSEns, NomEns , Grade, Indice, UFR )
UE ( NumUE, NomUE, NbHeureUE, NSSEns*, ResultatUE )

R ( NumEtudiant,
NomEtudiant,NumUE,NomUE,NbHeureUE,ResultatUE,NSSEns,NomEns,Grade,Indice,UFR
)

On peut proposer NumEtudiant et NumUE comme clé primaire de cette relation R car elle
permet d’accéder à toutes les tables.
2. Tracer le graphe des DFs présentes dans la relation universelle d’après la
description de ce système d’information.

DFs :

NumEtudiant ---> NomEtudiant

NSSEns ------> NomEns

NSSEns ------> Grade


Grade ------> Indice

NSSEns ------> UFR

NumUE -----> NomUE


NumUE -----> NbHeureUE

NumUE -----> NSSEns


NumEtudiant -----> NumUE

NumEtudiant,NumUe ----> ResultatUE

3. Existe t il DFs redondantes dans le schéma proposé

Non car j’ai fait en sorte que la relation R répond aux 3FN donc pas de redondance BISOUS

4. Déduire graphiquement la fermeture transitive de l’ensemble des DFs.

La transitivité se fait par NSSEns.


Exercice 4 : DFs et décomposition de relations universelle

Soit une gestion simplifiée d’une clinique privée. pour les besoins de cette gestion, les
informations suivantes sont utilisées :

Malade(NSS_malade , Nom_malade, Prenom_malade, DateNais malade)


Médecin( NSSmédecin , Prénom médecin)
Service ( Code_service, nom service)
Spécialité (Code_spécialité, Libellé_spécialité )
Chambre( Num_Chambre , Capacité_chambre )

En plus des DFs implicites ( ex : NSS_malade → Nom_malade) , soient les règles de


gestions suivantes :

-Un médecin peut ne pas être spécialisé, mais si’l est , il ne peut pas avoir plusieurs
spécialités
-Un médecin est rattaché à un seul service
-Un malade n’est suivi que par un seul médecin
-Un malade est affecté à une seule chambre
-Une chambre appartient à un seul service

Questions :

1. Donner la relation universelle Clinique ( attribut + DFs )


2. Proposer une clé primaire pour la relation Clinique. Justifier
3. En quelle forme normale est la relation Clinique. Justifier
4. Décomposer la relation Clinique en un schéma relationnel en 3FN
TD7 ( Suite )

Exercice 1 : Clôture d’un ensemble d’attributs et clés

Soit la relation R ( A,B,C,D,E,I) et soit F = { A → D ; AB → E ; CD → I ; E → C }.

Questions :

1. Calculer {AE}+ et {BE}+ sous F

Pour calculer {AE}+ :

Nous savons déjà que {AE}+ = { A , E }.

1ère Itération :

A → D , A est dans { AE } + donc , { AE }+ = { A , E , D }


AB → E , AB n’est pas dans {AE}+ donc , { AE } + reste inchangée.
CD → I , CD n’est pas dans {AE } + donc , { AE } + reste inchangée.
E → C, E est dans { AE } + donc , { AE } + = { A , E , D , C }

2ème Itération :

AB → E , AB n’est pas dans { AE } +, donc { AE } + reste inchangée.


CD → I , CD est dans { AE }+ , donc { AE } + = { A, E , D , C , I }

3ème Itération :
AB → E , AB n’est pas dans { AE } + , donc { AE } + reste inchangée.

Donc { AE } + = { A, E, D, C, I }.

On fait pareil pour { BE } + :

1ère Itération :

A → D, A n’est pas dans { BE } +


AB → E , AB n’est pas dans { BE }+
BI → E , BI n’est pas dans { BE } +
CD → I , CD n’est pas dans { BE } +
E → C , E est dans { BE }+ , donc {BE}+ = {B,E,C}

2ème Itération :
A→ D, {BE}+ reste inchangée
AB → E, { BE } + reste inchangée
BI → E , { BE } + reste inchangée
CD → I , { BE } + reste inchangée.

Donc {BE} + = { B, E, C }.
2. AE et BE peuvent-ils jouer le rôle de clé primaire ?

Ni AE et BE ne peuvent jouer le rôle de clé primaire car elle ne détermine pas tous les
attributs de manière unique.

3. Proposer une clé primaire de la relation R

Pour proposer une clé primaire, je propose d’utiliser une super clé formée des attributs de
gauche de nos DFs:
{ A → D ; AB → E ; CD → I ; E → C }

Soit : A B C D E

ABCDE
E→C
ABDE
AB → E
ABD
A→D
AB

On peut donc proposer comme clé primaire AB pour notre relation R.

4. En quelle forme normale est la relation R avec la clé choisie ( les attributs de R sont
tous atomiques ) ?

La relation R avec la clé AB est une 3FN, car toutes les dépendances fonctionnelles sont
triviales ou non triviales. ( je sais pas l’expliquer plus tard )

5. Soit une deuxième relation S ( A, B , C , D , E ) avec F = { A → C ; B → D ,AC → D ,


CD → E )
- Est-il nécessaire de calculer {B}+ pour trouver une clé ?

Non car on a que B → D , donc on a une super clé BD.


- Proposer une clé pour S

ABCD
AC → D
ABC
A→C
AB

On peut proposer AB pour la relation S.


- En quelle forme normale est S ( les attributs de S sont tous atomiques ) ?

Boyce Codd ( 3.5FN )

Exercice 2 : Couverture minimale

Le calcul de la couverture minimale F min d’un ensemble de DFs F se fait en trois étapes :
Initialiser F min à F

1. Réduire à droite les dépendances fonctionnelles de F sous la forme X → Ai


Substituer toute DF de la forme X → A1A2…An par les DFs X → A1 , X → A2, X →
An.
2. réduire à gauche les DFs obtenue de l’étape 1.
Pour toute X → Ai, s’il existe Y inclus dans X tel que Y → Ai , alors supprimer de
Fmin la DF X → Ai.
3. Éliminer les DF redondantes.
Pour toute X → Ai qui peut être inférée de Fmin = { X → Ai } alors supprimer X → Ai.

Soit un ensemble de dépendances fonctionnelles.


F = { A → B , BC → D, AC → BDE , D → E }.

1. Dire pourquoi F n’est pas une couverture minimale

2. En utilisant l’algorithme ci-dessus, calculer une couverture minimale pour F.

3. Soit un deuxième ensemble de DF :


F = { AB → C , C → A, BC → D , ACD → B , D → G , BE → C , CG → B , CG → D ,
CE → A, CE → G }
Trouver une couverture minimale pour F.
Trouver une deuxième couverture minimale pour F.

Exercice 3 : DFs et formes normales


Soit le domaine d’étude suivants concernant la gestion d’entretiens d’embauche.

On fait l'hypothèse que les informations données en italique sont des attributs atomiques.

Un candidat ayant un rendez vous une date données est reçu par un seul responsable, à un
horaire donné dans une salle de réunion donnée à une date et horaire donnés et dans une
salle donnée, il n’y a qu’un seul responsable avec un seul candidat à une date donnée , un
responsable passe des entretiens dans une même salle à une date et horaire donnés , un
responsable reçoit un seul candidat dans une salle donnée.

Questions :

1. Quelles sont les dépendances fonctionnelles de cet énoncé ?

C : Candidat
D : Date
R : Responsable
S : Salle
H : Horaire

C , D → S, H , R

D,H ,S → C , R

D,R→S

D , H , R → S, C

2. Proposer une clé pour la relation universelle


Entretien ( Candidat, Date , Responsable , Horaire, Salle )
-> Candidat et Date

3. En quelle forme normale est la relation Entretien. Justifier

2FN
car -> Trouver le moyen de rédiger mieux

Exercice 4 :
Soit R ( A,B,C, E , H ) une relation et F l’ensemble des dépendances fonctionnelles
suivantes :

F = { A→ B ; CE → H ; C → E ; A → C ; A → H }

1. Calculer la clôture {A}+ sous F

Nous avons A dans { A + } car A détermine A selon la dernière dépendance fonctionnelle


dans F : A → A .

Ensuite, nous avons la première dépendance fonctionnelle dans F : A → B , A détermine


également B, Donc nous avons { A , B } dans { A + }

Selon la troisième dépendance fonctionnelle dans F : C -> E , et la quatrième dépendance


dans F : A → C , nous pouvons appliquer la transitivité et dire que A détermine E . Donc
nous avons { A, B , C , E } dans { A + }

Finalement selon la deuxième dépendance fonctionnelle dans F : CE -> H , et le fait que A


détermine C et que C détermine E , nous pouvons appliquer la règle de décomposition pour
obtenir que A et E déterminent H. Donc nous avons { A , B , C , E, H } dans { A + }
2. Couverture minimale de F

Nous pouvons éliminer la dépendance fonctionnelle C → E car elle est redondante,


car elle peut être déduite de la dépendance fonctionnelle CE → H. En effet,
supposons que C détermine E. Ensuite, selon la dépendance fonctionnelle CE → H,
nous avons que CE détermine H. Mais puisque C détermine E, nous avons
également que CE détermine E. Nous avons donc CE déterminant H et E, ce qui
signifie que CE détermine H sans avoir besoin de la dépendance fonctionnelle C →
E.

Donc F = { A → B ; A → C ; CE → H ; A → H }

3. Représenter graphiquement la couverture minimale CM et décomposer le graphe


obtenu en un schéma relationnel en troisième forme normale.

Exercice 5 :

Soit R ( A, B , C E , H une relation et F l’ensemble des dépendance fonctionnelle suivante

F = { A → BC ; CE → H ; C → E ; C → B }

1. Calculer la clôture {A}+ sous F

Etape : Ajouter A à {A]+

{A} + = {A}

Etape 2 : Utilise la relation A → BC pour déterminer que B et C sont déterminés par A

{A}+ = {A,B,C}

Etape 3 : Utiliser la dépendance fonctionnelle C → E pour déterminer que E est


fonctionnellement déterminés par A , B et C

{A}+ = { A, B , C , E }

Étape 4 : Utiliser la dépendance fonctionnelle C → B pour déterminer que B est déjà


fonctionnellement déterminé par A.

{A}+ = {A,B,C,E}
Étape 5 : Utiliser la dépendance fonctionnelle CE → H pour déterminer que H est
fonctionnellement déterminé par ABC.

{A}+ = { A , B , C, E , H }

Oui, {A}+ peut jouer le rôle de clé

2. Calculer la couverture minimale CM de F

A→B
A→C→E
C→B
CE → H => C → H

3. représenter graphiquement la couverture minimale

Exercice 6 :

Soit R ( A,B,C,D,E,F) une relation et F l’ensemble des dépendances fonctionnelles


suivantes :

F = { AB → D, B → C , AE → B ,A → D , D → EF }

1. Calculer la clôture {A}+ sous F

Pour calculer la clôture de {A}+, nous devons ajouter à {A} tous les attributs qui sont
déterminés par A en utilisant les dépendances fonctionnelles de F.
A → D : Nous ajoutons D à {A}+.
AB → D : Nous ajoutons B à {A}+.
B → C : Nous ajoutons C à {A}+.
AE → B : Nous ajoutons E et B à {A}+.
D → EF : Nous ajoutons E et F à {A}+.

Ainsi, {A}+ = {A, B, C, D, E, F}.

Les propositions de clé candidates pour cette relation sont :

{A, E} : Cette proposition de clé candidate est basée sur la dépendance fonctionnelle
AE → B, qui indique que A et E ensemble déterminent B. Ainsi, A et E ensemble
peuvent être une clé candidate pour cette relation.
{A, B} : Cette proposition de clé candidate est basée sur la dépendance fonctionnelle
AB → D, qui indique que A et B ensemble déterminent D. Ainsi, A et B ensemble
peuvent être une clé candidate pour cette relation.

2. Calculer la couverture minimale CM de F

3. Représenter Graphiquement la couverture minimale CM et décomposer le graphe


obtenu en un schéma relationnel en troisième forme normale.

Vous aimerez peut-être aussi