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

Langage SQL Discussion :

Autre vue souhaitable ?


Sujet :

Langage SQL

  1. #1
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut Autre vue souhaitable ?
    Bonjour.

    J'ai une question technique sur l'utilisation des vues par le SGBD. Si la réponse dépend du SGBD, prendre en compte le fait que j'utilise MySQL.

    Je suis en train de créer des vues sur une nouvelle BDD en cours de création et je me demande si le SGBD peut prendre l'initiative de simplifier la vue selon l'interrogation qui est faite dessus ou s'il va systématiquement exécuter toute la vue à chaque fois qu'elle sera utilisée.

    Voici une vue un peu peu complexe qui va donner un paquet d'informations sur les étudiants inscrits à un stage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    CREATE VIEW stamas.v_etudiant AS
    SELECT e.etu_id_utilisateur AS id_etudiant,
        u.uti_login AS login_etudiant,
        u.uti_mot_passe AS mot_passe_etudiant,
        p.prs_nom AS nom_etudiant,
        p.prs_prenom AS prenom_etudiant,
        p.prs_adrel AS adrel_etudiant,
        p.prs_telephone AS tel_etudiant,
        e.etu_adresse AS adresse_etudiant,
        e.etu_id_concours AS id_concours_etudiant,
        c.ccr_libelle AS libelle_concours,
        e.etu_id_etablissement_origine AS id_etab_orig_etudiant,
        e1.etb_nom AS nom_etablissement_origine,
        s.stg_id AS id_stage,
        s.stg_id_etablissement AS id_etablissement_stage,
        e2.etb_nom AS nom_etablissement_stage,
        s.stg_date_debut AS date_debut_stage,
        s.stg_date_fin AS date_fin_stage
    FROM t_etudiant_etu AS e
    INNER JOIN t_utilisateur_uti AS u ON u.uti_id_personne = e.etu_id_utilisteur
        INNER JOIN t_personne_prs AS p.prs_id = u.uti_id_personne
    INNER JOIN t_concours_ccr AS c ON c.ccr_id = e.etu_id_concours
    INNER JOIN t_etablissement_etb AS e1 ON e1.etb_id = e.etu_id_etablissement_origine
    LEFT OUTER JOIN t_etu_inscrire_stg_eis AS i ON i.eis_id_etudiant = e.etu_id_utilisteur
        LEFT OUTER JOIN t_stage_stg AS s ON s.stg_id = i.eis_id_stage
            LEFT OUTER JOIN t_etablissement_etb AS e2 ON e2.etb_id = s.stg_id_etablissement
    Mais l'application peut avoir besoin d'informations partielles sur l'étudiant, par exemple avant qu'il soit inscrit à un stage, ce qui fait que des jointures seraient inutiles dans la vue. Ainsi, si je fais ensuite la requête ci-dessous, les jointures externes sont inutiles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT id_etudiant, login_etudiant, nom_etudiant, prenom_etudiant, libelle_concours, nom_etablissement_origine
    FROM v_etudiant
    Vaut-il mieux dans ce cas créer une vue plus simple ou le SGBD est-il capable de détecter que des jointures de la vue sont inutiles et ainsi simplifier le script de la vue ?

    Comme je n'ai pas encore de données dans la BDD, je ne peux pas tester en réel mais un EXPLAIN de la requête dans MySQL semble considérer tous les index de toutes les tables.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  2. #2
    Expert éminent
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 209
    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 209
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Vaut-il mieux dans ce cas créer une vue plus simple ou le SGBD est-il capable de détecter que des jointures de la vue sont inutiles et ainsi simplifier le script de la vue ?

    Comme je n'ai pas encore de données dans la BDD, je ne peux pas tester en réel mais un EXPLAIN de la requête dans MySQL semble considérer tous les index de toutes les tables.
    Un SGBD comme DB2 for z/OS élimine les jointures inutiles, mais d’après votre EXPLAIN, concernant MySQL, ça n’a pas l’air d’être le cas. Autant alors utiliser une vue débarrassée des jointures inutiles.
    (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
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    MySQL est très bourrin sur les vues. Il ne sait pas en faire la synthèse...

    Lisez ce que j'ai écrit sur cet ersatz de SGBDR :
    http://blog.developpez.com/sqlpro/p9...udre-aux-yeux/

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/10/2008, 15h18
  2. appel d'une autre vue dans une vue d'un modèle different
    Par Fiyorden dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 09/07/2008, 16h22
  3. vue à partir d'une autre vue probleme MIN()
    Par toubal_99 dans le forum MySQL
    Réponses: 0
    Dernier message: 02/08/2007, 23h37
  4. créer une vue à partir de 3 autres vue
    Par alliance dans le forum Langage SQL
    Réponses: 1
    Dernier message: 15/05/2007, 17h03
  5. [PDE] Creation de vues a partir d'une autre vue
    Par indoloic dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 13/03/2006, 14h34

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