Académique Documents
Professionnel Documents
Culture Documents
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 .
Notre périmètre : Une agence de location nationale ayant des agences dans
plusieurs villes.
Exercice 4 : Gestion de Stock
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.
Exercice 6 :
Exercice 7 :
2.
TD2 MODÈLE RELATIONNEL
Exercice 1 :
2. Déduire le Modèle EA
Exercice 2 :
//A refaire by me
Exercice 3 :
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 :
4. La liste des clients qui ont passé des commandes pour le produit ayant le code 102
Exercice 2 : Requête en AR
1. Extraire la liste des cours( Code UE ) qui ont des crédits supérieurs à 3
3. Extraire la liste des noms et prénoms des enseignants ayant enseigné le cours ayant
pour code UC2 mais jamais BD
R1 =
π𝑁𝑢𝑚𝐸𝑛𝑠 ( σ 𝐶𝑜𝑑𝑒 𝑈𝐸 = '𝑈𝐶2' ( 𝐸𝑛𝑠𝑒𝑖𝑔𝑛𝑒𝑟 ) ) − π𝑁𝑢𝑚𝐸𝑛𝑠 ( σ 𝐶𝑜𝑑𝑒 𝑈𝐸 = '𝐵𝐷' ( 𝐸𝑛𝑠𝑒𝑖𝑔𝑛𝑒𝑟 ) )
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' (𝐸𝑛𝑠𝑒𝑖𝑔𝑛𝑒𝑟) )
8. Extraire la liste ( numéro enseignant) des enseignants ayant enseigné soit UC2 soit
BD mais pas les deux
( R1 - R2 ) U ( R2 - R1 )
9. Extraire la liste des cours ( Code UE ) qui n’ont pas été enseignés.
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
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
Department
Dept Name Manager
Finance George
Sales Harriet
Production Charles
E1
Name EmpID Dept Name
E2
Name EmpID Dept Name
Harry 3415 Finance
Juste que c’est la même chose juste le tableau qui est orienté soit NAME-DEPT
ou DEPT - NAME .
Que l’on va avoir que la projection du nom pour E7 et le nom et le Département pour la E6
Exercice 5 :
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
1. Julien est plus grand que Marc mais Marc est plus maigre que Julien
Voir(x,y)
Voir(Julien,Marc) ∧ 7 Voir(Marc,Julien)
7 Est Maigre(Julien)
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
6. Tous les enfants qui n’aiment pas les bonbons aiment le chocolat
Aime(x,y) : x aime y
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
Aime ( x, y) : x aime y
Différent ( x , y ) : x est différent de y
10. Si tous les enfants aime le chocolat , alors Julien aime le chocolat
∀ à l’envers : Universel
∃ existentiel
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
p ↔ q ≡ (p → q) ∧ (q → p)
p → q ≡ ¬𝑃 ∨ 𝑄
1.∀𝑥(𝐸(𝑥) ⇒ 𝐴 (𝑥, 𝑦) )
∀𝑥( (𝑃 → 𝑄 ) ∧ (𝑄 → 𝑃 )
5.∀𝑥(𝐷(𝑥, 𝑐) ⇒ 𝐴(𝑥, 𝑏)
4. Trouver le NSS et les dates début des employés participant au projet numéro 2 ou au
projet numéro 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 )
3. {NomDep |
∃𝑑(𝐸𝑚𝑝𝑙𝑜𝑦é(−, 𝑁𝑜𝑚 𝐸 = 𝐵𝑖𝑒𝑛𝑡ô𝑡 , 𝑃𝑟𝑒𝑛𝑜𝑚 𝐸 = 𝐻𝑒𝑛𝑟𝑖 , −, −, −, 𝐷𝑒𝑝𝑡𝐼𝑑 = 𝑑) ∧
Department (Dept ID = d, NomD : NomDep ,-)}
4.
5.
Exercice 6 : AR, CRT et CRD
Pour chacune des questions suivantes , formuler une requête en AR et son équivalent en
CRT et CRD
3. Les noms et prénoms des étudiants ayant déjà emprunté des livres
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)
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%”;
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;
SELECT nom , prenom , embauche , salaire FROM Emp WHERE nodept = 31 AND
YEAR(embauche ) = 2010;
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 ?
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 :
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’;
OU
4. Trouver le NSS et les dates de début des employés participant au projet numéro 2 ou
11.
5. Le nom du département pour lequel est affecté le projet ayant le budget le plus élevé
OU
OU
AVEC LIMIT :
SANS LIMIT :
OU
Exercice 3 :
3. Les noms et prénoms des étudiants ayant déjà emprunté des livres.
4. Les noms et prénoms des étudiants ayant déjà emprunté des livres
5. Les titres des livres dont l’un des auteurs est Andrew Tanenbaum
OU
OU
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%”;
2. Les jours de semaine correspondant aux prêts effectués par l’étudiant numéro
20109870001
SELECT Livre.Titre
FROM Livre, Emprunter
WHERE Livre.Cote = Emprunter.Cote AND MONTH(Date_Emprunt) = 3;
SELECT Livre.Titre
FROM Livre, Emprunter
WHERE Livre.Cote = Emprunter.Cote AND YEAR(Date_Emprunt) = 2015 AND
QUARTER(Date_Emprunt) = 1;
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.
10. La liste des étudiants ayant emprunté des livres sans les restituer après la date
réglementaire.
11. Former les mails des étudiants sachant qu’ils sont de la forme
prenom_nom@ens.univ-artois.fr
12. Les noms et prénoms des étudiants habitant rue Jule Verne à Arras
OU
RAPPEL :
AVG → Moyenne
UPPER → Majuscule ex : ‘ t ‘ → ‘T’
LOWER → Minuscule ex : ‘T’ → ‘t’
CONCAT → Permet de concaténer des phrases ex : “Hello” “World” → “Hello World”
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.
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.
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.
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.
2. Accorder le droit d’insérer sur la table Country à l’utilisateur tycoon depuis la machine
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
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
6. Retirer le privilège de redistribuer les privilèges sur la table CIty à l’utilisateur alpha
9. Proposer pour la question précédente une deuxième solution pour une vue.
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.
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;
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é :
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.
X → Y => XZ → YZ
Transitivité :
X→ Y et Y → Z => X → Z
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.
X → Y et X → Z => X → YZ
X → Y et X → Z => X → XX et XX → XY et YX → YZ => X → YZ
DECOMPOSITION
X → YZ => X → Z et X → Y
X → YZ => X → YZ et YZ → Z => X → Z
PSEUDO-TRANSITIVITÉ
X → Y et WY → Z => WX → Z
X → Y et WY → Z => WX → WY et WY → Z => WX → Z
Exercice 2 : Dépendances fonctionnelles et clés des relations
A B C D
a1 b1 c1 d1
a1 b2 c1 d2
a2 b2 c2 d3
a3 b1 c1 d2
a4 b4 c3 d2
👍
( en gros :
😡
b1 et c1 , b2 et c2 , b3 et c3 , b4 et c4
b1 et c2 , b3 et c1, ... )
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.
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.
{A}
{A, B}
{A, C}
{A, B, C}
{A, D}
{A, B, D}
{A, C, D}
{A, B, C, D}
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
Questions :
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 :
Non car j’ai fait en sorte que la relation R répond aux 3FN donc pas de redondance BISOUS
Soit une gestion simplifiée d’une clinique privée. pour les besoins de cette gestion, les
informations suivantes sont utilisées :
-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 :
Questions :
1ère Itération :
2ème Itération :
3ème Itération :
AB → E , AB n’est pas dans { AE } + , donc { AE } + reste inchangée.
Donc { AE } + = { A, E, D, C, I }.
1ère Itération :
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.
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
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 )
ABCD
AC → D
ABC
A→C
AB
Le calcul de la couverture minimale F min d’un ensemble de DFs F se fait en trois étapes :
Initialiser F min à F
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 :
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
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 }
Donc F = { A → B ; A → C ; CE → H ; A → H }
Exercice 5 :
F = { A → BC ; CE → H ; C → E ; C → B }
{A} + = {A}
{A}+ = {A,B,C}
{A}+ = { A, B , C , E }
{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 }
A→B
A→C→E
C→B
CE → H => C → H
Exercice 6 :
F = { AB → D, B → C , AE → B ,A → D , D → EF }
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}+.
{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.