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 :

intérogation sur l'algèbre relationnelle


Sujet :

Schéma

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 6
    Points : 10
    Points
    10
    Par défaut intérogation sur l'algèbre relationnelle
    Bonjour,
    je débute l'algèbre relationnelle et je me pose les question suivante.
    Soit les relations :
    LESFILMS(TITRE, PAYS, ANNEE, REALISATEUR, DUREE)
    LESACTEURS(TITRE,ACTEUR)

    la question :
    Q3: Trouver les acteurs qui ont tourné avec TRUFFAUT comme réalisateur.

    et la réponse :
    projection(acteur, jointure(LESFILMS.titre=LESACTEURS.titre; LESACTEURS;
    sélection(réalisateur='Truffaut'; LESFILMS)))

    est-ce que une autre réponse possible serait :
    1acteur(2réalisateur='TRUFFAUT'(LESFILMS|x|LESACTEURS))
    (avec 1=projection, 2=restriction, |x|=jointure (naturelle dans ce cas-ci))

    et si oui pourquoi les 2 réponses sont bonnes?

    une autre question, soit les tables :
    SALLE (Nom,Horaire,Titre)
    FILM (Titre, Realisateur, Acteur)
    PRODUIT (Producteur,Titre)
    VU (Spectateur,Titre)
    AIME (Spectateur,Titre)
    quelle est la différence entre les 2 requêtes suivante :
    1Nom(SALLE |x| (2Acteur='Signoret' (FILM)))
    et
    1Nom(2acteur='Signoret'(SALLE|x|FILM))
    (toujours avec 1=projection, 2=restriction, |x|=jointure (naturelle))
    Merci d'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 906
    Points
    30 906
    Billets dans le blog
    16
    Par défaut
    Bonsoir,


    Le style de vos requêtes, rappelle un de ceux qui était utilisés dans les années quatre-vingts, nécessitant surtout d’avoir un tube d’aspirine à portée de main...

    Il faudrait que vous fournissiez la syntaxe précise du langage que vous utilisez. Par exemple, quel rôle joue le point-virgule ? En général il marque la fin du paquet des opérations et c’est la virgule qui sert à délimiter celles-ci.

    Évitez de remplacer le nom des opérateurs par des numéros, vos requêtes sont déjà assez hermétiques comme cela.

    En attendant, dans le style impératif et de façon informelle, c'est-à-dire si l’on décompose calmement les opérations, celles-ci sont à exécuter dans l’ordre suivant (je donne un nom à chaque résultat intermédiaire : T1, T2) :
    1) RESTRICTION : LESFILMS WHERE REALISATEUR = 'Truffaut' AS T1
    2) JOINTURE : T1 JOIN LESACTEURS AS T2
    3) PROJECTION : T2 {ACTEUR}
    Plus précisément, dans le style de Tutorial D (cf. Databases, Types and the Relational Model) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WITH (LESFILMS WHERE REALISATEUR = 'Truffaut' AS T1,
          T1 JOIN LESACTEURS AS T2) :
          T2 {ACTEUR}
    Les opérations peuvent évidemment être exécutées dans un ordre différent, mais avec un rendement beaucoup plus faible sous le capot :
    1) JOINTURE : LESFILMS JOIN LESACTEURS AS T1
    2) RESTRICTION : T1 WHERE REALISATEUR = 'Truffaut' AS T2
    3) PROJECTION : T2 {ACTEUR}
    Pour une démonstration de l’équivalence des deux requêtes, reportez-vous aux ouvrages ad-hoc, par exemple Principles of Database Systems de Jeffrey D. Ullman où est effectivement traitée la commutation de la jointure et de la restriction.

    Il va sans dire que dans le cas de Tutorial D, c’est au système de juger de l’ordre dans lequel il effectuera les opérations. Si l’on écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WITH (LESFILMS JOIN LESACTEURS AS T1,
          T1 JOIN LESACTEURS AS T2) :
          T2 {ACTEUR}
    Il s’ensuit qu’après consultation des statistiques fournies par le catalogue relationnel, il est très probable — performance oblige — que le système optimisera la requête en la réécrivant ainsi (restriction avant jointure, comme plus haut) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WITH (LESFILMS WHERE REALISATEUR = 'Truffaut' AS T1,
          T1 JOIN LESACTEURS AS T2) :
          T2 {ACTEUR}

    N.B. La variable LESFILMS a pour en-tête {TITRE, PAYS, ANNEE, REALISATEUR, DUREE} et dans vos requêtes vous changez les noms des attributs, par exemple REALISATEUR devient réalisateur : ceci n’est possible que si vous disposez d’un opérateur permettant de renommer les attributs.

    =>

    De la rigueur, toujours de la rigueur, encore de la rigueur...
    (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.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 6
    Points : 10
    Points
    10
    Par défaut
    Le style de vos requêtes, rappelle un de ceux qui était utilisés dans les années quatre-vingts, nécessitant surtout d’avoir un tube d’aspirine à portée de main...

    Il faudrait que vous fournissiez la syntaxe précise du langage que vous utilisez. Par exemple, quel rôle joue le point-virgule ? En général il marque la fin du paquet des opérations et c’est la virgule qui sert à délimiter celles-ci.

    Évitez de remplacer le nom des opérateurs par des numéros, vos requêtes sont déjà assez hermétiques comme cela.
    Il ne faut pas blâmer l'apprenti! Je me suis basé sur ce que mon tuteur a voulu m'apprendre (dans le cadre d'un cours par correspondance) et les réponses types OPERATEUR(?;?,?) sont de lui. Quand à celles avec des 1 et des 2, ma seule intention était de pouvoir substituer aux traditionnels "pi" et "sigma" qui sont d'habitude de mise pour représenter respectivement projection et restriction, et non de vous endormir. Ceci est un langage que je ne connais pas bien et mon but est d'apprendre pour y remédier : )
    Néanmoins, merci pour cette réponse qui apportera une lumière supplémentaire sur l'obscurité que représente l'algèbre relationnel pour moi a ce jour.

Discussions similaires

  1. cours ou tuto sur le mapping relationnel-objet
    Par bogizo dans le forum Persistance des données
    Réponses: 1
    Dernier message: 28/04/2007, 20h35
  2. Règles d'algèbre relationnelle
    Par Ralfman68 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/12/2006, 15h53
  3. [Algèbre relationnelle]Expression algébrique
    Par yoshï dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 07/04/2006, 15h10

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