Bases de donn©es relationnelles - hec.unil.ch .BDA 8.3 LMD pr©dicatifs nUn langage pr©dicatif

  • View
    224

  • Download
    2

Embed Size (px)

Text of Bases de donn©es relationnelles - hec.unil.ch .BDA 8.3 LMD pr©dicatifs nUn langage...

  • Bases de donnes relationnelles

    Calculs relationnels

  • BDA 8.2

    LMD relationnels algbriques (rappel)

    n Lalgbre relationnelle permet de spcifier quelles sont les oprations excuter pour calculer le rsultat de la requteu Limplantation des oprateurs algbriques dfinit un moteur algbrique pour lexcution des requtes.u Ce composant "moteur algbrique" constitue le noyau des SGBD relationnelsu SQL est une version oriente utilisateur de lalgbre relationnelle

  • BDA 8.3

    LMD prdicatifs

    n Un langage prdicatif permet de ne spcifier que le rsultat cherch (pas comment le calculer)u spcification des prdicats qui doivent tre vrifis par les donnes pour former le rsultat

    n Ces langages sont dits prdicatifs car il sont bass sur le calcul de prdicats (logique 1er ordre)

    n Un langage prdicatif est donc plus simple quune algbre

  • BDA 8.4

    LMD relationnels prdicatifs

    n Il existe deux types de langages prdicatifs relationnels

    n Calcul de tuples : les variables dans les expressions logiques portent sur les tuples des relations (QUEL)

    x Etudiant

    n Calcul de domaines : les variables dans les expressions logiques portent sur les valeurs des attributs des tuples (QBE)

    x Etudiant.nom

  • Calcul de tuples

  • BDA 8.6

    Exemple de requten Etudiant (n, nom, prnom, anne)

    n Requte : nom et prnom des tudiants ns aprs 1980

    [nom, prnom] [anne > 1980] Etudiant

    spcification du format du rsultat

    prdicat satisfaire par les tuples dsigns par e

    dclaration de variable

    e Etudiant{ e.nom, e.prnom | e.anne > 1980 }

  • BDA 8.7

    Requte multi-relation

    Etudiant (n, nom, prnom, anne)

    Inscription (not, nomC, note1, note2)

    n Requte : no, prnom, notes des tudiants de nom "Rochat" inscrits au cours "BD"

    e Etudiant , i Inscription{ e.no, e.prnom, i.note1, i.note2 |e.nom = "Rochat" i.nomC = "BD" e.no = i.not }

    : ET : OU : NON

  • BDA 8.8

    Algbre / calcul

    [no, prnom, note1, note2] (( [nom = "Rochat"] Etudiant)*[no = not] ( [nomC ="BD"] Inscription))ou

    [no, prnom, note1, note2] [nom = "Rochat" nomC = "BD"]

    ( Etudiant *[no = not] Inscription )

    e Etudiant , i Inscription{ e.no, e.prnom, i.note1, i.note2 |

    e.nom = "Rochat" i.nomC = "BD" e.no = i.not }

    Mme puissance d'expression

  • BDA 8.9

    Format d'une requte

    x1 R1 , x2 R2 , xi Ri Rj , .. xn Rndclaration des variables (tuples)sur des relations ou des unions de relations compatibles

    { x1.A, x1.B, xi.D / fx1,x2,xn }spcification du format du rsultat /spcification du prdicat

    fx1,x2,xn est une formule logique valide ayant pour variables libres exactement x1 ... xi(Les autres variables xi+1 ... xn doivent tre lies)

    xi.D reprsente la valeur de l'attribut D dans le tuple xi

  • BDA 8.10

    Formule valide

    n Formule lmentaire : u x.A oper-comparaison constanteu x.A oper-comparaison y.Boper-comparaison : =, ? , , =, =u x et y sont des variables libres

    n Exemplesu x.nom="Rochat"u x.nom = y.nom

    n Une formule avec variables libres ne peut pas tre value

  • BDA 8.11

    Formule valide (suite)

    n Formule valide :uformule lmentaireuformule formuleuformule formuleu formuleu (formule)u Si fx est une formule valide o x est une variable libre, alors :x fx est une formule valide o x est lie"il existe au moins un tuple x tel que fx soit vrai"

    x fx est une formule valide o x est lie"pour tous les tuples x, fx est vrai"

  • BDA 8.12

    Formules valides - Exemples

    Etudiant (n, nom, prnom, anne)

    x Etudiant

    n x.nom = "Rochat" ???u x est une variable libre

    n x (x.nom="Rochat")est vrai s'il y a un Rochat dans Etudiantu x est une variable lie

    n x (x.anne>1980)est vrai si tous les tudiants sont ns aprs 1980u x est une variable lie

  • BDA 8.13

    Quantificateur "il existe"

    n Etudiant (n, nom, prnom, anne)

    n Inscription (nt, nomC, note1, note2)

    n Requte : nom, prnom des tudiants ayant russi brillamment un cours

    e Etudiant, i Inscription{ e.nom, e.prnom | i (e.no = i.not i.note1 = 6 i.note2 = 6) }

  • BDA 8.14

    Quantificateur "pour tous"n Requte : nom, prnom des tudiants

    ayant russi brillamment tous les cours

    e Etudiant , i Inscription{ e.nom, e.prnom | i (e.no ? i.not (i.note1 = 6 i.note2 = 6)) i (e.no = i.not) }

    x ( A B) x (A B)

    eiEtudiant Inscription

  • BDA 8.15

    Logique du 1er ordre - Rappels

    n L'oprateur logique => (implique) ne fait pas partie des oprateurs du calculf1 => f2 est quivalent : f1 f2

    n x fx est quivalent : x (fx )

    n Quantificateurs sur un ensemble vide Soit xR si R est vide , alors u x fx = Vraiu x fx = Faux

  • BDA 8.16

    Rappels (suite)

    n Pour mieux comprendreu La structure du prdicat (variables libres et lies, occurrences de relations)u La smantique du prdicat

    on peut crire les formules sous forme prenexe(tous les quantificateurs en dbut de la formule)

    n Formule sous forme prenexe :Q1x1, Q2x2, ...Qnxn (x1, ..., xn)

    pas de quantificateur dans x1, ..., xnet Q : ou

    Toute formule peut se mettre sous forme prenexe

  • BDA 8.17

    Smantique d'une requte (1)

    n xR, yS, zT { x.A, y.B | fx,y,z }

    n Faire le produit des relations variables libresR x S

    n Slectionner les tuples du produit qui satisfont la formule fx,y,z

  • BDA 8.18

    Smantique d'une requte (2)

    n xR, yS, zT { x.A, y.B | fx,y,z }

    n Pour tout tuple, x, de R faire :Pour tout tuple, y, de S faire :

    Si fx,y,z est vrai alors ajouter aursultat

    fin pour tout y de Sfin pour tout x de R

    NB Le test de fx,y,z implique pour chaque variable lie (ici z) le parcours de la relation correspondante (ici T)

  • BDA 8.19

    Equivalence algbre / calcul

    n Toute expression d'algbre peut s'crire en calculu chaque oprateur peut se traduireu dmonstration par rcurrence

    n Toute requte de calcul peut s'crire en algbreR (A, B, C)S (D, E, F)u xR, ySu { x.A, x.B } [A, B]Ru { x.A, y.E } [A, E] (RxS) u { x.A | y (y.E=x.B)} } [A] (R*[B=E]S)u . . .

  • BDA 8.20

    Exemples - Bars bires

    n Bire (bire, degr, couleur, pays, got)

    n Bar (bar, quartier)

    n Personne (nom, quartier, age, sexe)

    n Sert (bar, bire)tel bar sert telle bire

    n Abu (buveur, bire, bar, jour, mois, anne, qt)tel jour, tel buveur a bu telle bire dans tel bar en telle quantit (qt)

  • BDA 8.21

    Exemples (1)

    n Noms des bars frquents par Philippe ce mois ci

    u Abu { u.bar / u.buveur="Philippe" u.mois=12 u.anne=2003 }

    n Noms des bars frquents par Philippe ce mois ci avec les bires bues et leur pays

    u Abu , i Bire { u.bar, u.bire, i.pays / u.buveur="Philippe" u.mois=12 u.anne=2003 u.bire=i.bire }

  • BDA 8.22

    Exemples (2)

    n Nom, ge et quartier des personnes qui ont frquent au moins un bar

    p Personne , u Abu { p.nom, p.age, p.quartier / u (p.nom=u.buveur)}

    n Nom, ge et quartier des personnes qui ont frquent tous les bars

    p Personne , a Bar , u Abu { p.nom, p.age, p.quartier / a u (p.nom=u.buveur u.bar=a.bar) }

  • BDA 8.23

    Exemples (3)

    n Nom des personnes qui n'ont jamais frquent un bar

    p Personne , u Abu { p.nom / u (p.nom=u.buveur) }

    n Nom, ge et quartier des personnes qui ont frquent au moins un bar du quartier de la gare

    p Personne , u Abu , a Bar { p.nom, p.age, p.quartier / a u ( a.quartier="gare" u.bar=a.bar p.nom=u.buveur) }

  • BDA 8.24

    Exemples (4)

    n Nom, ge et quartier des personnes qui ont frquent tous les bars du quartier de la gare

    p Personne , u Abu , a Bar { p.nom, p.age, p.quartier / a (a.quartier? "gare" u (u.bar=a.bar p.nom=u.buveur) ) }

    OU

    p Personne , u Abu , a Bar { p.nom, p.age, p.quartier / a (a.quartier="gare" u (u.bar=a.bar p.nom=u.buveur) ) }

  • BDA 8.25

    Exemples (5)

    n Nom des personnes qui ont bu une brune et une blonde le mme jour dans le mme bar

    u1 Abu , u2 Abu , b1 Bire, b2 Bire { u1.buveur / u2 (u1.bar=u2.bar u1.jour=u2.jour u1.mois=u2.mois u1.anne=u2.anne u1.buveur=u2.buveur b1 (u1.bire=b1.bire b1.couleur="blonde") b2 (u2.bire=b2.bire b2.couleur="brune")

    ) }