Cours 4 : Langage SQL & Algèbre relationnelle Nguyen TuanLoc
Rappel sur l’algèbre relationnel Normalisation Forme conjonctive (p11 ν p12 v…v p1n) Λ (pm1 ν pm2 v…v pmn) Forme disjonctive (p11 Λ p12Λ … Λp1n) v (pm1 Λ pm2Λ…Λ pmn) (souvent disjonctive)
Exemple: schéma de la base de données pour les étudiants de la MIAGE Paris 12
Conjonctive SELECT ENSEIGNANTS.nom, ENSEIGNANTS.prenom, MATIERES.nommat FROM MATIERES INNER JOIN (ENSEIGNANTS INNER JOIN ENSEIGN_MAT ON ENSEIGNANTS.codens = ENSEIGN_MAT.codens) ON MATIERES.codemat = ENSEIGN_MAT.codemat WHERE (((ENSEIGNANTS.nom)="NGUYEN") AND ((MATIERES.nommat)="ACCESS" Or (MATIERES.nommat)="BASE DE DONNEES"));
Disjonctive SELECT ENSEIGNANTS.nom, ENSEIGNANTS.prenom, MATIERES.nommat FROM MATIERES INNER JOIN (ENSEIGNANTS INNER JOIN ENSEIGN_MAT ON ENSEIGNANTS.codens = ENSEIGN_MAT.codens) ON MATIERES.codemat = ENSEIGN_MAT.codemat WHERE ( ( (ENSEIGNANTS.nom)="NGUYEN" AND (MATIERES.nommat)="BASE DE DONNEES") OR ( (MATIERES.nommat)="ACCESS" AND (MATIERES.nommat)="BASE DE DONNEES"));
Normalisation de requête p1 Λ p2 < => p2 Λ p1 p1 v p2 < => p2 v p1 (commutativité) p1Λ(p2 Λ p3) < => p1Λp2Λp3 p1v(p2 v p3) < => p1vp2vp3 (associativité) p1Λ(p2vp3) < =>(p1Λp2)v(p1Λp3) p1v(p2Λp3) < =>(p1vp2) Λ(p1vp3) !(p1 Λ p2) < =>!p1 v !p2 !!(p) < => p
Exercice SELECT Title FROM Emp WHERE (Not (Title=’’linux’’) AND (Title=’’linux’’ OR Title=’’windows’’) AND Not (Title = ’’unix’’)) OR Ename = ’’Toward Linus’’; On suppose: p1 = Title=’’linux’’ p2 = Title=’’windows’’ p3 = Ename = ’’Toward Linus’’
Forme normale (!p1 Λ (p1 v p2) Λ !p2) v p3 Disjonctive: [(!p1 Λ p1) v (!p1 Λp2)] Λ !p2) v p3< => (!p2 Λ [(!p1 Λ p1) v (!p1 Λp2)]) v p3< => (!p2Λ(!p1 Λ p1))v(!p2Λ(!p1Λp2)) v p3 < =>(!p2Λ!p1Λp1)v(!p2Λ!p1Λp2) v p3 < =>(!p2 Λfalse) v (!p1 Λ false) v p3 < => false v false v p3 < => p3
Requête finale SELECT Title From Emp WHERE Ename =’’Toward Linus’’;
Règle de transformation Commutativité: R x S Ξ S x R R |x| S Ξ S |x| R R U S Ξ S U R Associativité ( R x S ) x T = R x ( S x T) ( R |x| S ) |x| T = R |x| ( S |x| T) Idempotence ΠA’ (ΠA’’(R) ) = ΠA’(R) (avec A’’ dans A’) …
Analyse Mise de la requête en forme normale Analyse lexical et syntaxique Type incorrect ou inexistant (schéma de la relation)
Simplification p Λ p < => p p v p < => p p Λ true < =>p p v false < => p p Λ false < => false p v true < => true p Λ !p < => false p v !p < => true p1 Λ (p1 v p2) < => p1 P1 v (p1 Λ p2) < => p1