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 :

Besoin d'explications sur les Vues


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 91
    Points : 70
    Points
    70
    Par défaut Besoin d'explications sur les Vues
    Bonjour,

    je n'ai jamais poussé le SQL vraiment loin, j'ai lu pas mal de trucs et comprend certains principe, aujourd'hui j'aimerai surement en mettre un en application : Le concept de vues.

    Si j'ai bien saisie une vue n'est qu'un affichage de certaines colonnes de table, voir des calculs. Jusque la je pense avoir bon.

    Question 1 : Comment ça marche au niveau des mises à jour ? Cela doit se faire manuellement ? Le SGBD (ici MySql) le rafraîchie à chaque demande d'affichage ? Gagne t-on ou perd on en performance en utilisant cette méthode ?

    Question 2 : J'ai pas mal d'informations répartie dans plusieurs tables, je pense que les vues peuvent simplifier grandement la tache, plutôt que faire des tonnes de jointures ? Ai-je tord ?

    Question 3 : J'ai vu, en me renseignant sur internet, qu'on pouvais supprimer une ligne dans une vue. Et la, c'est surement la réponse qui m’intéresse le plus. Supprimer une ligne dans une vue, la supprime uniquement dans cette dernière ? Ou le fait de supprimer la ligne de la vue ma supprimer la ligne dans les tables "d'origines" que la vue utilises pour faire son affichage ?

    Merci d'avoir pris le temps de me lire,
    Bonne journée à tous !

  2. #2
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Si on excepte le concept de vue matérialisée d'Oracle (et ses équivalents), une vue n'est jamais qu'un alias pour une instruction SELECT. Autrement dit, rien n'est sauvegardé, le SGBD ira à chaque fois faire la requête sur les "vraies" tables.

    De là découle :
    1) Pas besoin de mise à jour.
    2) Les vues ont en effet le grand mérite de factoriser des requêtes.
    3) Selon les SGBDR, si la vue permet d'identifier certaines lignes des tables interrogées, il est possible d'affecter ces lignes au travers de la vue. Il y a des conditions sur ce que fait la vue, justement (pas d'aggrégation, par exemple).

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 91
    Points : 70
    Points
    70
    Par défaut
    Je te remercie pour cet éclaircissement rapide qui va me permettre de lancer mes premiers tests en connaissance de cause.

    Je vous redit si MySql supprime les entrées dans les tables. Ce qui, il faut le dire, changerais ma vie à moi qui travaille sous WinDev (une vue qui correspond à une table et hop c'est fini a 90% pour les ajouts/modifs/suppression).

    Je vous redit ! Merci à toi Rei Ichigo

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 91
    Points : 70
    Points
    70
    Par défaut
    J'ai donc fait un test simple et bidon, un Id personne dans les deux tables. Le nom et prenom dans la premiere table, l'age et l'adresse dans la deuxieme.

    J'ai ensuite crée ma vue qui affiche le Prenom + L'adresse.

    Quand je tente une suppression j'ai l'erreur suivante (ça aurai été trop beau sinon !) : #1395 - Can not delete from join view 'test.vue_personnes'

    Forcement ça aurai changer ma vie sinon Une solution pour que lorsque l'on essai de supprimer une ligne dans la vue on supprime les lignes équivalente dans les tables concernés ? Triggers ou autres ?

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    Oui changez de sgbd (postgresql en gratuit le gere par exemple)

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 91
    Points : 70
    Points
    70
    Par défaut
    Tu va trouvé ça débile comme question mais tu es sur que ça gère vraiment les suppression et modification des vues sur les tables d'origine ? Je prefere etre sur avant de tenter un transfert complet :o

  7. #7
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 081
    Points : 30 827
    Points
    30 827
    Par défaut
    Les mises à jour des vues se font au travers de l'usage de triggers INSTEAD OF, qu'il faut avoir définis.
    Je ne suis pas certain que MySQL prenne en charge ce mécanisme...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 91
    Points : 70
    Points
    70
    Par défaut
    Je vais installer postgre et faire des tests avant de voir si je transfère tout ou pas. Sinon je continuerai avec des requetes si une migration n'apporte pas tant d'amélioration que ça. A savoir qu'il y a max 3 utilisateur à la fois sur l'application en simultané, PostGreSql est peu être un peu un "Tank" pour de si faible quantité de données et d'accés.

    Je reviens plus tard vers vous pour vous faire part de ce que je trouve

    Cordialement,

    Sanna


    ps : En effet meme avec le moteur InnoDB je ne trouve pas d'INSTEAD OF, mais peut être cela porte un autre nom dans MySql

  9. #9
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Citation Envoyé par Sannazzarotiti Voir le message
    Tu va trouvé ça débile comme question mais tu es sur que ça gère vraiment les suppression et modification des vues sur les tables d'origine ? Je prefere etre sur avant de tenter un transfert complet :o
    Pour postgres tu as 2 solutions :
    - trigger déjà évoqué
    - les rule : http://www.postgresql.org/docs/9.2/s...reaterule.html


    ps : En effet meme avec le moteur InnoDB je ne trouve pas d'INSTEAD OF, mais peut être cela porte un autre nom dans MySql
    Non :
    http://dev.mysql.com/doc/refman/5.6/...e-trigger.html

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 786
    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 786
    Points : 52 793
    Points
    52 793
    Billets dans le blog
    5
    Par défaut
    1) les vues peuvent mettre à jour directement les tables sous-jacentes si :
    1.1 - la mise à jour ne porte que sur une seule des tables de le vue, et
    1.2 - il n'y a pas de transformation de données.
    2) les vues peuvent être mise à jour sur toutes tables indirectement par des déclencheurs INSTEAD OF

    Seul Oracle, IBM DB2 et SQL Server implémente des déclencheurs INSTEAD OF....

    Pour plus d'information, lisez l'article que j'ai écrit sur les règles de Codd, et notamment la règle n°6 (Règle de mise à jour des vues : Toutes les vues qui sont théoriquement modifiables peuvent être mises à jour par le système.)
    Il y a plusieurs exemples démonstratifs traitant tous ces cas....

    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/ * * * * *

  11. #11
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Seul Oracle, IBM DB2 et SQL Server implémente des déclencheurs INSTEAD OF....

    PostGreSql aussi il me semble : http://www.postgresql.org/docs/9.1/s...tetrigger.html

  12. #12
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 008
    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 008
    Points : 30 947
    Points
    30 947
    Billets dans le blog
    16
    Par défaut
    Dans le cas de l'utilisation d'un SGBD permettant de mettre à jour les vues par trigger (INSTEAD OF), on peut s'inspirer de l'exemple ici (MS SQL Server).
    (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. besoins d'explication sur les génériques
    Par lao.patrick dans le forum C#
    Réponses: 6
    Dernier message: 03/06/2010, 10h51
  2. Besoin d'explication sur les fonctions
    Par amateurc dans le forum Général Java
    Réponses: 7
    Dernier message: 05/01/2010, 14h32
  3. Besoin d'explication sur les imports
    Par Chicard dans le forum Langage
    Réponses: 13
    Dernier message: 14/08/2007, 16h24
  4. [Tableaux] Besoin d'explications sur les tableaux imbriqués
    Par gateaubasque dans le forum Langage
    Réponses: 5
    Dernier message: 23/03/2007, 09h12
  5. Besoin d'explications sur les charset
    Par EGPMS dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 03/02/2006, 15h38

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