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éveloppement SQL Server Discussion :

Vue paramétrée


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    729
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 729
    Par défaut Vue paramétrée
    Bonjour,
    Je développe une application en Java/J2ee avec JPA/HIBERNATE comme framework de persistence
    j'ai les 3 tables suivantes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    User
    -userId
    -.........
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Gouts
    -id
    -userId
    -prop1
    -prop2
    -Prop3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Category
    -id
    -userId
    -prop4
    -prop5
    -Prop6
    Pour les besoins d'une future requête, dès que j'ai déterminé un User (donc dès que userId est connu), j'aurais besoin de créer 2 vues, la vue VueGouts extraite de la table Gouts pour un userId déterminé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    VueUserGouts
    -prop1
    -prop2
    -Prop3
    et la vue VueCategory extraite de la table Category pour un userId déterminé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    VueUserCategory
    -prop4
    -prop5
    -Prop6
    Ma première question est : est-ce possible ? notamment avec Hibernate
    Ma deuxième question est : est-ce que ça a un intérêt ? Mon idée est de créer ces vues dès que je connais le User (donc le userId) de manière à gagner en performance dans ma future requête (et d'éviter des jointure supplémentaire avec la table User) ?
    Ma troisième question est : je pense qu'il faudrait une vue paramétrisée (le paramètre étant userId) ? est-ce possible avec SQL server et est ce possible de l'utiliser avec Hibernate (et si possible comment) ?

    Si vous pouviez joindre des liens utiles, merci

  2. #2
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Le plus simple et le plus performant, c'est de ne pas utiliser NHibernate…

    Sinon, oui, tu peux utiliser des vues : elles seront à priori vues comme une table.
    Et une vue paramétrée n'existe pas.

    Tu peux utiliser une procédure stockée qui exécute une requête paramétrée, ou une fonction de type table qui retourne le résultat d'une telle requête.
    Ceci dit, une simple sélection dans la vue avec un filtre sur le userid sera aussi performante et plus simple à utiliser (si demain du veux filtrer sur autre-chose ça évite de tout réécrire)

  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
    Citation Envoyé par StringBuilder Voir le message
    Et une vue paramétrée n'existe pas.
    Si tu as la possibilité de faire cela avec une fonction table online qui joue exactement ce rôle.

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

  4. #4
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    C'est effectivement ce que j'ai proposé, mais ce n'est pas à proprement parler une "vue paramétrée".

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    729
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 729
    Par défaut
    Merci pour ta réponse StringBuilder,

    le problème est que je veux utiliser une vue qui doit être prête à l'emploi pour les besoins d'une future requête.

    Et le contenu de cette vue dépend par exemple de la table

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Gouts
    -id
    -userId
    -prop1
    -prop2
    -Prop3
    filtrée par userId

    J'ai l'impression qu'une vue paramétrée ne ferait pas l'affaire car elle n'existe pas comme tu le dis. Peux tu me donner un exemple pour résoudre un tel problème ?

  6. #6
    Membre éclairé Avatar de Monstros Velu
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 619
    Par défaut
    Bonjour,

    Je pense qu'une simple procédure stockée répondra à ton besoin :
    Elle prendra en paramètre le userId
    Elle renverra le résultat de la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE PROC GoutPourUtilisateur
    @UserId int
    AS
    SELECT Id, UserId, prop1, prop2, prop3 
    FROM Gouts
    WHERE UserId = @UserId;
    GO
    En option, si tu as un index sur la table Gout, colonne UserId incluant les autres colonnes de résultat de la requête, la réponse devrait être rapide.

    Si, pour une future requête, tu veux faire une vue : Sache que si ta requête fait une jointure sur la table goût, tu as toutes les chances que ce soit plus performant que de calculer le goût et de le ramener dans ton autre requête, car SQL Server est fait pour ça. Cependant, sans connaitre la future requête, on ne peut pas savoir...

  7. #7
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    Il faudrait donner plus de détail sur ce que vous voulez faire, car il y a de multiples façons de faire.
    Par ailleurs, je ne vois pas pourquoi les solutions proposées ne conviennent pas.

    Pour ce qui est des "vues paramétrées"... une fonction table en ligne en est l'équivalent... mais avec les éléments que vous avez fournis, je ne vois pas non plus pourquoi cela est nécessaire : une simple vue, filtrée par la suite, fera parfaitement le boulot...

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    729
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 729
    Par défaut
    Bonjour Monstros velu et aieeeuuuuu et merci pour vos réponses.

    Sache que si ta requête fait une jointure sur la table goût, tu as toutes les chances que ce soit plus performant que de calculer le goût et de le ramener dans ton autre requête
    Si une jointure dans ma requête finale sur userId est plus performante que de passer par une vue intermédiaire effectivement mon idée n'a pas d'intérêt.
    Je vais avancer sur cette requête et reviendrai vers vous plus tard

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    729
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 729
    Par défaut
    Bonjour à tous, et merci pour vos réponses. J'ai fait mon poc sans utiliser de vues paramétrées dans ma requête finales mais simplement en faisant les jointures nécessaires et j'obtiens de bon résultats.

    comme l'a dit Monstros velu

    Sache que si ta requête fait une jointure sur la table goût, tu as toutes les chances que ce soit plus performant que de calculer le goût et de le ramener dans ton autre requête
    Merci à tous encore

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

Discussions similaires

  1. Création vue paramétrée
    Par Fred 57220 dans le forum SQL
    Réponses: 4
    Dernier message: 30/06/2011, 14h35
  2. Une vue paramétrée
    Par thesoprano69 dans le forum Débuter
    Réponses: 3
    Dernier message: 26/05/2010, 11h31
  3. Vue paramétrée !
    Par guizaniseifislam dans le forum PL/SQL
    Réponses: 4
    Dernier message: 06/04/2009, 11h14
  4. Vue paramétrée en PostgresSQL ?
    Par fabboy dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 11/07/2007, 21h44
  5. [SQL2K] Créer une vue paramétrée ?
    Par andlio dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 29/06/2007, 16h51

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