Chapitre 2. Les Langages de requêtes 1. Introduction 1.1 Langage Un langage de
Chapitre 2. Les Langages de requêtes 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. Bases de données avancées 2 1 11/26/21 10:00:29 AM 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 : les langages relationnels algébriques et les langages prédicatifs. Bases de données avancées 2 2 11/26/21 10:00:29 AM Les LMD relationnels algébriques Basés sur l’algèbre relationnelle de Codd Permettent de spécifier quelles sont les opérations à exécuter pour calculer le résultat de la requête. (le langage SQL). Bases de données avancées 2 3 11/26/21 10:00:29 AM SQL est une version orientée utilisateur de l’algèbre relationnelle. Par exemple la requête suivante : Π(σ(depot ⋈ livraison; adresse= « Sidi-bel-Abbès ») ; code) est exprimée en SQL par : SELECT code FROM depot, livraison WHERE (depot.no_depot=livraison.no_depot) AND (adresse=« Sidi-bel-Abbès ») ; Bases de données avancées 2 4 11/26/21 10:00:29 AM Les LMD relationnels prédicatifs Un langage prédicatif permet de ne spécifier que le résultat cherché (pas comment le calculer). Ceci par la spécification des prédicats qui doivent être vérifiées par les données pour former le résultat. Ce sont des langages déclaratifs. Ces langages sont basés sur le calcul de prédicats (logique de premier ordre). Ce type de langage est donc plus simple qu’une algèbre Bases de données avancées 2 5 11/26/21 10:00:29 AM Il existe deux types de langages prédicatifs : Le calcul relationnel de tuples (CRT): les variables dans les expressions logiques portent sur les tuples des relations (Le langage QUEL se base sur CRT). Exemple : x є Etudiant Le calcul relationnel de domaines (CRD) : les variables dans les expressions logiques portent sur les valeurs des attributs des tuples (Le langage QBE se base sur CRD). Exemple : x є Etudiant.nom Bases de données avancées 2 6 11/26/21 10:00:29 AM 1.2 Requête Une requête est appliquée à des instances de relations ; Le résultat d’une requête est une instance de relation ; Le schéma de la relation résultat est déterminé par la définition des constructeurs du langage de requête utilisé. Bases de données avancées 2 7 11/26/21 10:00:30 AM 2. Le calcul relationnel de tuples 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) ; Bases de données avancées 2 8 11/26/21 10:00:30 AM L’expression a la forme : {x.A, y.B, …, z.D/ fx,y,…,z,t,u,v…,w} Où x,y,…,z,t,u,v…,w sont des variables dont la portée a été déclarée auparavant : x є R1, y є R2, …, z є Ri, t є Rj, …, w є Rn, A, B, C, …,D sont des attributs des relations correspondantes, fx,y,...,z,t,…,w est une formule valide ayant pour variables libres x, y,...z, et pour variables liées t, u, …,w. La valeur de cette expression est une projection sur les attributs A,B,...,D du produit cartésien des relations correspondantes aux variables libres R1x R2x... xRi, produit réduit aux tuples pour lesquels la formule fx,y,...,z,t,…,w est vraie. Bases de données avancées 2 9 11/26/21 10:00:30 AM Exemples : soit une base de données avec les trois relations suivantes: Etudiant (nom, prénom, année de naissance, n°étudiant) Inscription (n°étudiant, nom cours, note1, note2) Enseignant (nom, prénom, statut) Requête : nom et prénom des étudiants nés après 1990 e єEtudiant {e.nom, e.prénom / e.année de naissance > 1990} Requête : numéro, prénom et notes des étudiants de nom Amine inscrits au cours BD e є Etudiant, i є Inscription {e.n°étudiant, e.prénom, i.note1, i.note2 / e.nom = 'Amine' ⋀ e.n°étudiant = i.n°étudiant ⋀ i.nom cours = 'BD'} Bases de données avancées 2 10 11/26/21 10:00:30 AM 2.2 Formules valides Les formules valides sont construites à partir des quatre règles suivantes : 1/ Une condition de la forme x.A θ a ou x.A θ y.B est une formule valide (θ désigne l'un des opérateurs de comparaison, =,≠,<,<=,>,>=, et a une constante); 2/ Si f, f1 et f2 sont des formules valides, alors (f), ╗f, f1 ⋀ f2, f1vf2 sont aussi des formules valides; 3/ Si fx est une formule valide où x est une variable libre, alors ∃x(fx) et ∀x(fx) sont des formules valides où x est une variable liée; 4/ Rien d'autre n'est une formule valide. Bases de données avancées 2 11 11/26/21 10:00:30 AM Définition: Une variable est dite liée (quantifiée) dans une formule si elle est associée au quantificateur existentiel ∃, ou au quantificateur universel ∀. Elle est dite libre sinon. Exemples de formules valides: e.année de naissance > 1990 (condition du type x.A θ a, e est une variable libre) e.n°étudiant=i.n°étudiant (condition du type x.A θ y.B, e et i sont des variables libres) i.note1=16 v i.note2=16 (formule du type f1v f2, i est une variable libre) Bases de données avancées 2 12 11/26/21 10:00:30 AM ∃i (i.note1 = 16 ⋀ i.note2 = 16) (formule du type ∃x(fx), i est une variable liée). La dernière formule peut être utilisée, par exemple, pour retrouver les étudiants ayant brillamment réussi dans un cours (les notes pour ce cours sont égales à 16): e∊Etudiant, i∊Inscription; {e.nom,e.prénom / ∃i (e.n°étudiant = i.n°étudiant ⋀ i.note1 = 16 ⋀ i.note2 = 16)} Pour connaître les étudiants qui ont brillamment réussi tous leurs cours, on utilisera l'expression: {e.nom,e.prénom / ∀i (e.n°étudiant ≠ i.n°étudiant v ╗(i.note1 = 16 ⋀ i.note2 = 16)) v ∃i (e.n°étudiant = i.n°étudiant)} Bases de données avancées 2 13 11/26/21 10:00:30 AM 2.3 Rappels sur la logique du premier ordre On peut toujours mettre une formule valide sous forme prénexe (tous les quantificateurs en préfixe): Q1x1,Q2x2,...,Qnxn (fx1,x2,...xn) où Qi ∊{∃,∀} et fx1,x2,...xn est une formule valide sans quantificateur. L'ensemble ⋀,⋁,╗ est redondant, dans la mesure où: f1 ⋀ f2 ≡ ╗ (╗f1 ⋁ ╗f2) Bases de données avancées 2 14 11/26/21 10:00:31 AM • De même, on peut se passer du quantificateur universel, ∀ dans la mesure où: • ∀x (f) ≡ ╗ (∃x(╗f)) • L'implication (qui ne fait pas partie des opérateurs de comparaison des calculs relationnels) peut s'écrire de la façon suivante: • f1⇒f2 ≡ ╗f1 ⋁ f2 • Les formules avec quantificateurs qui portent sur un ensemble vide se traitent de la façon suivante: • ∀x (fx) où x porte sur un ensemble vide ≡ Vrai Bases de données avancées 2 15 11/26/21 10:00:31 AM ∃x (fx) où x porte sur un ensemble vide ≡ Faux et ceci quelle que soit la formule fx . On peut montrer que le calcul de tuples peut exprimer tous les opérateurs de l'algèbre et vice- versa. Ces deux langages ont la même puissance d'expression. Bases de données avancées 2 16 11/26/21 10:00:31 AM 2.4 Quantificateurs universels et existentiels 2.4.1 Variable libre, variable liée Une occurrence d’une variable de tuple dans une formule f qui est un atome est libre dans f; Une occurrence d’une variable de tuple t dans une formule de le forme f1 ⋀ f2, f1vf2, ╗f1, ╗f2, est libre ou liée dépend du fait qu’elle soit libre ou liée dans f1 ou f2; Bases de données avancées 2 17 11/26/21 10:00:31 AM Toutes les occurrences libres d’une variable de tuple t dans f sont liées dans f’ de la forme: f’=∃t(f)ou f’=∀t(f) Exemples: Soit la base de données suivante: Employe(NE, nom, prenom, grade, date-nais, adresse, salaire, supérieur, ndept) Departement(ndept, nomdept, directeur, date) Projet(Np, nomp, local, ndept) Travaille-sur(NE, Np, heure) Dépendant(NE, nomdependant, date-nais, relation) Bases de données avancées 2 18 11/26/21 10:00:31 AM Soient les formules: f1: d.nomdept= ‘recherche’ f2: ( t)(d.ndept= t.ndept) ∃ f3: (∀d)(d.directeur=100) d est libre dans f1 et f2 et liée dans f3 t est liée dans f2; Bases de données avancées 2 19 11/26/21 10:00:31 AM 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 (∀t)(f) est vraie si f est vraie pour tous tuple(dans le domaine) affecté aux occurrences libres de t dans f; sinon (∀t)(f) est fausse Bases de données avancées 2 20 11/26/21 10:00:31 AM 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 » {t.nom, t.adresse/ Employe(t) ( d)(departement(d) ⋀∃ d.nomdept= ‘recherche’ d.Ndept=t.Ndept)} ⋀ ⋀ Bases de données avancées 2 21 11/26/21 10:00:31 AM Requête2 « Pour chaque uploads/Industriel/ chapitre2-master1718.pdf
Documents similaires










-
30
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Oct 15, 2021
- Catégorie Industry / Industr...
- Langue French
- Taille du fichier 7.3603MB