1. Introduction
1.1 Langage
Un langage de manipulation de données (LMD) se compose:
- d’un ensemble de commandes permettant d’interroger une
base de données et,
-d’un ensemble de commandes permettant de la modifier
(insertion, suppression, et mise à jour).
- Un LMD doit être intégré à un langage de programmation
classique pour réaliser des transactions programmées.
11/26/21 10:00:29 AM Bases de données avancées 2 1
Le modèle relationnel définit de manière
rigoureuse des langages de requêtes simples et
puissants. On peut les classer en deux grandes
classes :
2.1 Définition
Une requête dans ce langage est composée de deux
parties : une partie déclarative et une expression de calcul.
La partie déclarative associe des variables aux relations de
la base données qui sont utilisées dans la requête :
x є R : x désignera les tuples de la relation R ; (x porte sur R)
y є RUT : y désignera indifféremment les tuples des relations
R et T, pourvu qu’il existe dans R et T des attributs
compatibles deux à deux ( même nom même domaine) ;
11/26/21 10:00:31 AM 19
Bases de données avancées 2
Si f est une formule, alors la formule :
(∃t)(f) est vraie si f est vraie pour certains(au
moins un) tuples affectés aux occurrences libres de
t dans f; sinon (∃t)(f) est fausse
11/26/21 10:00:31 AM 20
Bases de données avancées 2
2.5 Exemples de requêtes
2.5.1 Requêtes avec quantificateur existentiel
Requête1
« Noms et adresses de tous les employés qui
travaillent dans le département de recherche »
11/26/21 10:00:31 AM 21
Bases de données avancées 2
Requête2
« Pour chaque projet localisé à Oran donnez le
numéro de projet, numéro du département, nom
du directeur, sa date de naissance et son adresse »
11/26/21 10:00:32 AM 22
Bases de données avancées 2
Requête3
« Donnez pour chaque employé son nom et prénom
ainsi que le nom et prénom de son supérieur »
{ e.nom, e.prenom, s.nom, s.prenom/ Employe(e)⋀
Employe(s) ⋀ s.NE=e.superieur }
Requête4
« Donnez le nom de chaque employé qui travaille sur
certains projets du département 5 »
{e.nom/ Employe(e)⋀ ((∃x) (∃w)(projet(x) ⋀
travaille-sur(w) ⋀ x.Ndept=5 ⋀ w.NE=e.NE ⋀
x.NP=w.NP))}
11/26/21 10:00:32 AM 23
Bases de données avancées 2
Requête5
« Donnez les n° de projets qui nécessitent un
employé de nom Amine en tant que travailleur ou
directeur du département du projet »
{p.NP / Project(p) ⋀ ( ( (∃e)(∃ w)(Employe(e) ⋀
Travaille-sur(w) ⋀ w.NP=p.NP ⋀ e.nom=‘Amine' ⋀
e.NE=w.NE) )
⋁
( (∃ m)(∃ d)(Employe(m) ⋀ Department(d) ⋀
p.Ndept=d.Ndept ⋀ d.directeur=m.NE ⋀
m.nom=‘Amine') ) ) }
11/26/21 10:00:32 AM 24
Bases de données avancées 2
2.5.2 Transformation des quantificateurs universels
et existentiels
11/26/21 10:00:32 AM 25
Bases de données avancées 2
(∃ x) (P(x)⋁ Q(x)) ≡∀(ךx) (( ךP(x)) ⋀ ( ךQ(x)))
(∃ x) (P(x)⋀ Q(x)) ≡∀(ךx) (( ךP(x)) ⋁ ( ךQ(x)))
11/26/21 10:00:32 AM 26
Bases de données avancées 2
2.5.3 Requêtes avec quantificateur universel
Requête6
« Noms et prénoms des employés qui travaillent
dans tous les projets du département 5 »
11/26/21 10:00:32 AM 28
Bases de données avancées 2
Autre formulation de requête 6
Par transformation on obtient:
Requete6’:
{e.nom, e.prenom / Employe(e) ⋀( ∃( ךx)(Projet(x) ⋀
(x. Ndept=5) ⋀
( ∃(ךw)(Travaille-sur(w) ⋀ w.NE=e.NE ⋀
x.NP=w.NP))))}
11/26/21 10:00:32 AM 29
Bases de données avancées 2
Requête7
« noms des employés qui n’ont pas de dépendant »
11/26/21 10:00:32 AM 30
Bases de données avancées 2
Requête8
« noms des directeurs qui ont au moins un
dépendant »
{e. nom/Employe(e) ⋀ ((∃d) (∃p) (Departement(d)
⋀(Dependent(p)⋀ e. NE=d.directeur ⋀ p.NE=e.NE))}
11/26/21 10:00:33 AM 31
Bases de données avancées 2
2.6 Expressions sûres
En calcul relationnel à chaque fois qu’on utilise les
quantificateurs ∀,∃, ךon doit être sûre que
l’expression résultante a un sens.
Une expression sûre dans un calcul relationnel est
celle qui garantit un nombre fini de tuples en
résultat. Sinon, elle est dite non sûre
Ex. {t / ( ךEmployee(t))}
11/26/21 10:00:33 AM 32
Bases de données avancées 2
En introduisant le concept de domaine dans une
expression de calcul on peut définir une expression
sûre. C’est l’ ensemble de toutes les valeurs qui
apparaissent soit comme constantes dans
l’expression ou qui existent dans les relations
indiquées dans l’expression.
Une expression est dite, alors, sûre si toutes les
valeurs de ses résultats sont à partir de son
domaine
11/26/21 10:00:33 AM 33
Bases de données avancées 2
3. Le calcul relationnel de domaines (CRD)
Dans le CRD les variables sont déclarées sur des
valeurs distinctes des domaines des attributs
11/26/21 10:00:33 AM 34
Bases de données avancées 2
Une formule est construite d’atomes:
1. Un atome peut être de la forme R(Xl X2 ... Xj) R nom de
relation de degré j et chaque Xi , avec 1≤i≤j est une
variable de domaine. Cet atome signifie qu’une liste de
valeurs Xl X2 ... Xj doit être un tuple de la relation R.
2. Un atome peut être de la forme Xi op xj
où op∊ {=, <, ≤, >, ≥,≠}, et Xi et xj sont des
variables de domaines.
3. Un atome peut être de la forme Xi op c ou c op xj
op∊ {=, <, ≤, >, ≥,≠}, et Xi et xj sont des
variables de domaines et c est une constante.
11/26/21 10:00:33 AM 35
Bases de données avancées 2
De même que le CRT les formules sont construites en
utilisant des atomes, des variables et des
quantificateurs.
Requête1
« dates de naissances et adresse des employés de
nom Amine »
{uv / (∃ q) (∃ r) (∃ s) (∃ r) (∃ w) (∃ X) (∃ y)
(Employe(qrstuvwxy) ⋀ r=' Amine’)}
Simplification
{uv / (Employe(q, ' Amine’, s, t,u,v,w,x,y)}
11/26/21 10:00:33 AM 36
Bases de données avancées 2
Requête2
11/26/21 10:00:33 AM 37
Bases de données avancées 2
Requête3
« pour chaque projet localisé à Oran, lister les n° de
projets, de département ainsi que le nom ,
adresse, date de naissance du directeur du
département »
11/26/21 10:00:33 AM 38
Bases de données avancées 2
Requête4
« Noms des employés qui n’ont pas de dépendant »
{r / (∃ q) (Employe(qrstuvwxy) ⋀ ( ∃(ךI)
(Dependant(lmnop) ⋀ q=l)))}
Ou
{r / (∃ q) (Employe(qrstuvwxy) ⋀ ((∀ I)
((ךDependant(lmnop)) ⋁ ( ךq=l))))}
11/26/21 10:00:34 AM 39
Bases de données avancées 2
Requête5
11/26/21 10:00:34 AM 40
Bases de données avancées 2
4. Les langages relationnels complets
4.1 Définition
La complétude relationnelle d'un langage de base de
données signifie qu'on doit pouvoir exprimer les
opérateurs de l'algèbre relationnelle (ou les
opérateurs équivalents du calcul relationnel) dans
un tel langage.
Par exemple, le langage SQL (Structured Query
Language) est considéré comme un mélange de
l'algèbre relationnelle et du calcul relationnel.
Le langage QUEL (Query Language) illustre
l'approche du calcul relationnel de tuples .
11/26/21 10:00:34 AM 41
Bases de données avancées 2
Langage graphique QBE (Query by Example) est
un langage qui permet de formuler des requêtes
et d'effectuer des manipulations de données à
l'aide d’une interface graphique . QBE s'appuie sur
le calcul relationnel de domaines tout en offrant
aux utilisateurs la convivialité de l'approche
graphique pour travailler avec les tables.
SQL, QUEL et QBE sont des langages dont la
puissance d’expression est fondée sur l'algèbre
relationnelle et le calcul relationnel. Ils sont donc
considérés à ce titre comme langages relationnels
complets.
11/26/21 10:00:34 AM Bases de données avancées 2 42
4.2 Critère de complétude