IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Schéma Discussion :

Exercices Algebre relationnelle (préparation a l'exam)


Sujet :

Schéma

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Exercices Algebre relationnelle (préparation a l'exam)
    Voila tout est a peu pres dans le titre, j'ai un exam apres le week-end qui va contenir des questions sur l'algebre relationnelle, pour me preparer j'ai récupéré trois exos sur le sujet, apres avoir fait ceux dans le CD du livre SQL 2ed de SQLpro parceque cetait pas suffisant, enfin voila les exos avec mes solution si quelqu'un voudrai bien y jetais un coup d'œil ca me donnerai vraiment un bon coup de main, a moi mais aussi a ceux qui voudraient s'exercer

    surtout la 8 eme requette du premier exercice... j'en ai fait une affaire personnelle...

    j'ai essayé de simplifier les opérations pour simplifier la lecture.

    Exrecice 1

    Film (titre, Nomréalisateur, durée)
    Séance (NomSalle, titre, HeureDeb, Version)
    Joue (Nomacteur, titre)
    Produit (NomProducteur, titre )
    Vu ( NomSpectateur, titre, note )

    Requêtes:

    *Quel est le nom du réalisateur de ‘’WaterWorld’’
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    R=Projection[Selection(Film,titre='water world'),Nomréalisateur]
    *Où (nom de salle) peut on voir jouer ‘’Kevin Kostner’’ en version originale.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    R1=Selection(Joue,Nomacteur='Kevin Kostner')
    	R2=Jointure(R1,Séance,R1.titre=Séance.titre)
    	R3=Selection(R2,Version='originale')
    	R=Projection(R3,NomSalle)
    *Quels sont les titres des films réalisés par le réalisateur de ‘’WaterWorld’’
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    R1=Projection[Selection(Film,NomRéalisateur='Water World'),titre)
    	R2=Jointure(R1,Film,R1.NomRéalisateur=Film.NomRéalisateur)
    	R=Projection(R2,titre)
    *Où (nom de salle) peut on voir un film dans lequel jouent ‘’Tom Cruse’’ et ‘’Nicole Kidman’’.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    R1=Selection(Joue,NomActeur='Tom Cruse')
    	R2=Selection(Joue,NomActeur='Nicole Kidman')
    	R3=Jointure(R1,R2,R1.titre=R2.titre)
    	R4=Projection(R3,titre)
    	R5=Jointure(R4,Séance,R4.titre=Séance.titre)
    	R=Projection(R5;NomSalle)
    *Quels les acteurs qui ont joué dans un film, qu’ils ont réalisé et produit.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    R1=Projection(Film,Titre,NomRéalisateur)
    	R2=Jointure(Joue,Produit,Joue.Nomacteur=Produit.NomProducteur)
    	R3=Jointure(R1,R2,R1.NomRéalisateur =R2. NomProducteur)
    	R=Projection(R3,Nomacteur)
    PS : Peut-on faire une jointure entre 3 relation ? Ce qui serait plus pratique dans ce cas

    *Dans quels films joue ‘’Tom Cruse’’ sans ‘’Nicole Kidman’’.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    R1=Selection(Joue,Nomacteur='Tom Cruse')
    	R2=Selection(Joue,Nomacteur='Nicole Kidman')
    	R3=Difference(R1,R2)
    	R=Projection(R3,titre)
    *Quels sont les acteurs qui ont joué dans tous les films réalisés par ‘’Steven Spielberg’’
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    R1=Selection(Film,NomRéalisateur='Steven Spielberg')
    	R2=Projection(R1,titre)
    	R=Division(Joue,R2)
    *Quels les acteurs qui n’ont joué que dans des films réalisés par ‘’Steven Spielberg’’
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	R1=Jointure(Joue,Film,Joue.titre=Film.titre)
    	R2=Projection(R1,Nomacteur,NomRéalisateur)
    	R3=Projection[Selection(R2,NomRéalisateur = 'Steven Spielberg'),Nomacteur]
    	R4=Projection[Selection(R2,NomRéalisateur != 'Steven Spielberg'),Nomacteur]
    	R=Difference(R3,R4)
    PS:celle-la particulièrement m'a prise la tete pendant une demi journée, j'aimerai vraiment savoir si elle est juste (et celle d'apres qui est presque pareille)
    *Quels sont les producteurs qui n’ont jamais travaillé avec ‘’Steven Spielberg’’.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    R1=Jointure(Produit,Film,Produit.titre=Film.titre)
    	R2=Projection(R1,NomProducteur,NomRéalisateur)
    	R3=Projection[Selection(R2,NomRéalisateur != 'Steven Spielberg'),NomProducteur]
    	R4=Projection[Selection(R2,NomRéalisateur = 'Steven Spielberg'),NomProducteur]
    	R=Difference(R3,R4)
    *Où (nom de salle) peut on voir un film dans lequel jouent ‘’Tom Cruse’’ ou ‘’Nicole Kidman’’.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	R1=Selection(Joue,Nomacteur='Tom Cruse' ou Nomacteur='Nicole Kidman')
    	R2=Jointure(R1,Séance,R1.titre=Séance.titre)
    	R3=Projection(R2,NomSalle)



    Exercice 2

    Liaison (NumL, VilleA, VilleB)
    Pilote (NumP, NomPilote, NbHeureVol)
    Vol (NumVol, NumL, date, heure)
    Assure (NumP,NumVol, Principal)

    *Quels sont les pilotes (NomPilote) ayant assuré des vols sur ‘’Alger’’-‘’Paris’’.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    R1=Selection(Liaison,VilleA='Alger' et VilleB='Paris'/*eventuellement*/ ou VilleA='Paris' et VilleB='Alger'/*si la requette gére les aller/retour*/)
    	R2=Jointure(R1,Vol,R1.NumL=Vol.NumL)
    	R3=Jointure(R2,Assure,R2.NumVol=Assure.NumVol)
    	R4=Jointure(R3,Pilote,R3.NumP=Pilote.NumP)
    	R=Projection(R4,NomPilote)
    *Quelles sont les liaisons assurées par le pilote N°10
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    R1=Selection(Pilote,NumP=10)
    	R2=Jointure(R1,Assure,R1.NumP=Assure.NumP)	
    	R3=Jointure(R2,Vol,Vol.NumVol=Vol.NumVol)
    	R=Projection(R3,NumL)
    *Quels sont les pilotes (NomPilote) n’ayant assuré que des vols sur ‘’Alger’’-‘’Paris’’.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	R1=Selection(Liaison,VilleA='Alger' et VilleB='Paris')
    	R2=Jointure(R1,Vol,R1.NumL=Vol.NumL)
    	R3=Jointure(R2,Assure,R2.NumVol=Assure.NumVol)
    	R4=Projection(Jointure(R3,Pilote,R3.NumP=Pilote.NumP),NomPilote) /*nom des pilote ayant assuré des vols sur alger-paris*/
    	R5=Selection(Liaison,VilleA != 'Alger' et VilleB != 'Paris') 
    	R6=Jointure(R1,Vol,R1.NumL=Vol.NumL)
    	R7=Jointure(R2,Assure,R2.NumVol=Assure.NumVol)
    	R8=Projection(Jointure(R3,Pilote,R3.NumP=Pilote.NumP),NomPilote)/*nom des pilote ayant assuré des vols autres que sur alger-paris*/
    	R=Difference(R4,R8) /*enleve de R4 les pilote qui ont assuré d'autres vols*/
    *Quels sont les pilotes (NomPilote) ayant assuré toutes les liaisons.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	R1=Projection(Liaison,NumL)
    	R2=Jointure(R1,Vol,R1.NumL=Vol.NumL)
    	R3=Jointure(R2,Assure,R2.NumVol=Assure.NumVol)
    	R4=Projection[ Jointure(R3,Pilote,R3.NumP=Pilote.NumP) , NomPilote,NumL ]
    	R=Division [ R4 , R1 ]
    Exercice 3

    Médecin (Numed , Nom, Prénom, Grade)
    Patient (Numpatient , Nom, Prénom, Age)
    Médicament (Code , Libellé, Type)
    Prescrit (Numed, Code, Numpatient, Date )

    *Quels sont les médicaments (libellé) prescrits par des médecins généralistes ?
    R1=Projection(Médecin,Numed,Grade)
    R2=Jointure(Prescrit,R1,Prescrit.Numed=R1.Numed)
    R=Projection[ Jointure(R2,Médicament,R2.Code=Médicament.Code) , Libellé ]

    *Quels sont les Patients traités par des médecins généralistes et des médecins spécailistes?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    R1=Selection [ Projection(Médecin,Numed,Grade) , Grade = 'généraliste' ou Grade ='spécialiste' ]
    	R2=Jointure(Prescrit,R1,Prescrit.Numed=R1.Numed)
             R=Projection[ Jointure(R2,Patient,R2.Numpatient=Patient.Numpatient) ,Numpatient ]
    *Quels sont les médicaments qui n’ont jamais été prescrits?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    R1=Projection(Médicament,Code)
    	R2=Projection(Prescrit,Code)
    	R=Difference(R1,R2)
    *Quels sont les médecins (Numed, Nom) qui ne prescrivent jamais d’antibiotiques?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    R1=Jointure(Prescrit,Médicament,Prescrit.Code=Médicament.Code) 
    	R2=Jointure(R1,Médecin,R1.Numed= Médecin.Numed)
    	R3=Selection(R2,Type='antibiothique')
    	R=Difference[ Projection(Médecin,Numed,Nom) , Projection(R3,Numed,Nom) ]
    Je remercie tout le monde a l'avance...

  2. #2
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 002
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut En avant avec Tutorial D
    Bonsoir,


    Je ne connais pas la grammaire que vous employez. Quoi qu’il en soit, les opérations peuvent être effectuées dans le style impératif de Tutorial D (Je vous renvoie à l’annexe B de l’article Bases de données relationnelles et normalisation dans lequel je rappelle la notation des opérateurs relationnels selon Tutorial D).

    *Quels sont les producteurs qui n’ont jamais travaillé avec Steven Spielberg

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    WITH  Film WHERE NomRealisateur = 'Steven Spielberg' AS T1
          T1 JOIN Produit AS T2
          T2 {NomProducteur} AS T3
          Produit {NomProducteur} AS T4
          T4 MINUS T3 AS T5 :
          T5

    Explication :

    T1 = Restriction appliquée à Film avec le prédicat NomRealisateur = 'Steven Spielberg' (on obtient tous les films réalisés par Spielberg).
    T2 = Jointure naturelle de T1 et Produit (on obtient les productions des films réalisés par Spielberg).
    T3 = Projection de T2 sur l’attribut NomProducteur (on obtient les producteurs ayant travaillé au moins une fois avec Spielberg).
    T4 = Projection de Produit sur l’attribut NomProducteur (on obtient tous les producteurs).
    Résultat = Différence entre T4 et T3 (producteurs, sauf ceux qui ont travaillé avec Spielberg).

    N.B. T2 peut être obtenue par semi-jointure : Produit SEMIJOIN T1 AS T2 (mais pas T1 SEMIJOIN Produit AS T2).


    *Quels les acteurs qui n’ont joué que dans des films réalisés par Steven Spielberg

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    WITH  Film WHERE NOT NomRealisateur = 'Steven Spielberg' AS T1
          T1 JOIN Joue AS T2
          T2 {NomActeur} AS T3
          Joue {NomActeur} AS T4 
          T4 MINUS T3 AS T5 :
          T5
    Explication :

    T1 = Restriction appliquée à Film avec le prédicat « NOT NomRealisateur = 'Steven Spielberg' » (on obtient les films non réalisés par Spielberg).
    T2 = jointure naturelle de T1 et Joue (on obtient les acteurs des films non réalisés par Spielberg).
    T3 = Projection de T2 sur l’attribut NomActeur (acteurs des films non réalisés par Spielberg).
    T4 = Projection de Joue sur l’attribut NomActeur (on obtient tous les acteurs).
    T5 = Tous les acteurs sauf ceux qui ont joué dans des films non réalisés par Spielberg.

    N.B. T2 peut être obtenue par semi-jointure : Joue SEMIJOIN T1 AS T2.

    J'epère ne pas m'être trompé dans mes copiés/collés.

    Bon courage à vous...

    P.S. Vous posez la question "Peut-on faire une jointure entre 3 relations ?"
    Par construction la jointure est une opération binaire, donc réponse négative, il faut procéder en 2 temps.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

Discussions similaires

  1. [Modèle Relationnel] base de donnees ALGEBRE RELATIONNELLE
    Par johndoc dans le forum Schéma
    Réponses: 18
    Dernier message: 04/02/2010, 10h37
  2. algebre relationnelle db2
    Par johndoc dans le forum DB2
    Réponses: 2
    Dernier message: 04/02/2010, 09h39
  3. Algebre relationnel et sql
    Par charrynsasi dans le forum Langage SQL
    Réponses: 1
    Dernier message: 14/10/2009, 18h44
  4. exercices algebre relationnel
    Par kohan95 dans le forum Langage SQL
    Réponses: 0
    Dernier message: 14/12/2008, 12h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo