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

Décisions SGBD Discussion :

Que peut-on faire avec une vue ?


Sujet :

Décisions SGBD

  1. #1
    Invité
    Invité(e)
    Par défaut Que peut-on faire avec une vue ?
    Je sais qu'on peut sélectionner et c'est pour cela que je les utilise, mais peut-on faire un INSERT ? un DELETE ?

  2. #2
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Oui, sous certaines conditions (dont je ne serais pas étonné qu'elles dépendent du SGBDR).
    Par exemple pour une vue comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT IdClient, SUM(Montant) AS Total
    FROM Client c INNER JOIN Facture f USING (IdClient)
    GROUP BY IdClient
    on voit mal ce que pourrait vouloir dire un INSERT ou un DELETE.

    Alors que pour la Vue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT IdClient
    FROM Client
    WHERE Departement = '75'
    on voit bien ce que pourrait être un DELETE, par contre un INSERT n'est sans doute pas possible (il y a sans doute des colonnes NOT NULL autre que IdClient dans la table Client)

  3. #3
    Invité
    Invité(e)
    Par défaut
    Heu comment dire...bon c'est MS-SQL Server, mais le mécanisme de la vue, je ne le comprends pas très bien. J'imaginais que c'était une sélection de données, sur laquelle je pouvais "requetter".
    Si j'insère dans la vue : ça insère dans la base ?

    <edit : message édité donc réponse à la question qui se trouvait là>

  4. #4
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par mere-teresa
    Si j'insère dans la vue : ça insère dans la base ?
    Oui, sous certaines conditions, regarde la doc de MS SqlServer et la syntaxe du CREATE VIEW, tu devrais y trouver les fameuses conditions...

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 854
    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 854
    Points : 52 989
    Points
    52 989
    Billets dans le blog
    6
    Par défaut
    Sur les INSERT / UPDATE / DELETE dans les vues, la norme précise que :

    *** Etrait de mon livre SQL Synthex ***
    "
    3.7.1 Mise à jour des données à travers les vues
    Comme lorsqu'il s'agit d'une table, on peut mettre à jour les données des vues (insertion, suppression, modification), mais à condition que certaines règles soient respectées :
    • ne porter que sur un ensemble de tables ou de vues modifiables (pas de sous requête sauf dans la clause WHERE, ni de requête ensembliste EXCEPT ou INTERSECT). Les vues contenant des tables jointes ou l'opérateur ensembliste UNION ALL peuvent être mise à jour dans certains cas;
    • ne pas contenir de dédoublonnage (pas de mot clef DISTINCT) ;
    • ne pas contenir de données transformées (pas de concaténation, addition de colonne, fonction...);
    • ne pas contenir de clause de groupage ou de calcul d'agrégat (pas de clause GROUP BY, HAVING, ni de fonction COUNT, SUM, AVG, MIN, MAX);
    Cependant, et comme l'indique la première condition, une vue peut porter sur une autre vue et pour que la nouvelle vue construite à partir d'une autre vue puisse être modifiée, il faut qu'à chaque niveau d'imbrication des vues l'ensemble de ces règles soient respectées.

    Les contraintes de la table étant respectées lors des mises à jour de vue, on ne peut insérer des données à travers une vue que si ces dernières respectent les contraintes. En particulier une vue qui ne contiendrait pas une colonne rendue obligatoire par une contrainte NOT NULL ne pourrait faire l'objet d'une insertion, alors qu'elle peut faire l'objet d'une modification ou d'une suppression de ligne.

    En fait on peut dire que seules les vues encapsulant un sous ensemble des lignes d'une unique table peuvent être mises à jour.

    "

    A +

  6. #6
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    A noter que certains SGBD comme Oracle et SQL Server (si je ne m'abuse ) permettent de coder des triggers sur la vue pour pouvoir ventiler les mises à jour dans les tables utilisées par la vue

    Néanmoins, je n'apprécie pas l'utilisation de tels triggers

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Fred_D
    A noter que certains SGBD comme Oracle et SQL Server (si je ne m'abuse) permettent de coder des triggers sur la vue pour pouvoir ventiler les mises à jour dans les tables utilisées par la vue
    Là ça me dépasse

  8. #8
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 224
    Points : 19 566
    Points
    19 566
    Billets dans le blog
    25
    Par défaut
    Citation Envoyé par Fred_D
    A noter que certains SGBD comme Oracle et SQL Server (si je ne m'abuse ) permettent de coder des triggers sur la vue pour pouvoir ventiler les mises à jour dans les tables utilisées par la vue

    Néanmoins, je n'apprécie pas l'utilisation de tels triggers
    Pour MS, c'est bien spécifié dans la doc, mais en pratique, je n'en ai jamais vu ET le create trigger sur vue semble planter !

  9. #9
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    Citation Envoyé par mere-teresa
    Citation Envoyé par Fred_D
    A noter que certains SGBD comme Oracle et SQL Server (si je ne m'abuse) permettent de coder des triggers sur la vue pour pouvoir ventiler les mises à jour dans les tables utilisées par la vue
    Là ça me dépasse

    Une vue exécute une requête donc tu as une vue éventuellement de plusieurs tables. Imaginons une table employé et une table salaire avec une vue qui joint les deux pour voir le salaire de chaque employé (ne prétez pas attention à la bétise de ce modèle ). Si on veut mettre à jour en une fois le nom de l'employé et son salaire on peut être tenté de mettre à jour la vue. Mais lorsque la requête est complexe, le SGBD ne saura pas dans quel table il doit modifier le nom et laquelle modifier le salaire. Donc on crée un trigger qui va modifier les données où il faut. Ce trigger remplace l'ordre d'update envoyé à la vue.

    Est-ce plus clair ?

    Fadace merci pour l'info

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Que peut-on faire avec la bibliothèque standard du C ?
    Par baccali dans le forum Bibliothèque standard
    Réponses: 38
    Dernier message: 06/01/2012, 12h43
  2. Que peut-on faire avec internet ?
    Par Invité dans le forum C++Builder
    Réponses: 2
    Dernier message: 23/03/2008, 14h48
  3. Utiliser un pointeur IntPtr d'une BitmapSource WPF - que peut-on faire avec ça ?
    Par BruceWayne dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 01/06/2007, 18h24
  4. Que peut on faire avec SOAP?
    Par feed_our_vision dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 19/05/2006, 18h11

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