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

Sybase Discussion :

Notation d'un voyage : procédure stockée + trigger


Sujet :

Sybase

  1. #1
    Membre actif
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    311
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 311
    Points : 257
    Points
    257
    Par défaut Notation d'un voyage : procédure stockée + trigger
    Bonjour,

    dans le cadre d'un petit projet sous sybase, je n'arrive pas à réaliser proprement une requête.
    Soit une table NOTATION (id_client, id_voyage, note1, note2, note3)
    avec note1 est indice de satisfaction globale du client sur le circuit
    note2 indice de satisfaction sur le confort des hôtels
    etc.

    Ces notes sont des structures = « EXCELLENT », « TB », « BIEN », « MOYEN », « INSUFFISANT »...

    Je voudrais exprimer à l'aide d'une procédure stockée et d'un trigger qui vérifie la cohérence des réponses d’un client sur un circuit et qui correspond au fait suivant « l’indice de satisfaction global ne peut pas être très bon ou excellent si les autres indices sont négatifs : insuffisant ou très insuffisant».

    Je voudrais ne pas avoir à essayer chaque cas dans des if...
    Mais aussi pour la procédure stockée, comment dois je parcourir chaque choix ?
    Je ne vois pas trop comment me lancer dans cette requête.

    J'espère que vous pourrez m'aider.
    Merci par avance.

    Cordialement,
    Tid.

  2. #2
    Membre habitué
    Inscrit en
    Août 2007
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 134
    Points : 168
    Points
    168
    Par défaut
    Il vous faudra utiliser un trigger.
    Je vous conseille de lire _toute_ la documentation "Transact-SQL User's Guide", plus particulièrement la section sur les triggers ici (pour la version 12.5 dans ce lien):

    http://infocenter.sybase.com/help/in...lug/X79145.htm

    Dans un trigger, on travaille avec des tables virtuelles inserted, deleted qui contiennent respectivement les lignes insérées et supprimées.
    Attention, ces tables peuvent contenir plusieurs lignes, les développeurs novices ont tendance à l'oublier.
    DBA sybase confirmé
    Cherche un poste sur Paris

  3. #3
    Membre actif
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    311
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 311
    Points : 257
    Points
    257
    Par défaut
    Bonjour,

    merci pour le lien :-)!

    @+,
    Tid.

  4. #4
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Vous pouvez aussi utiliser les contraintes (constraint check ...)

    Bon courage
    Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)

  5. #5
    Membre habitué
    Inscrit en
    Août 2007
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 134
    Points : 168
    Points
    168
    Par défaut
    Je ne suis pas sûr que ce type de cas puisse se résoudre avec une contrainte.
    Pouvez-vous m'expliquer comment vous feriez?
    DBA sybase confirmé
    Cherche un poste sur Paris

  6. #6
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    @Roller

    Premierement j'aurai legerement modifié le modele de donnée et créé une table de notes afin de ne gérer que des identifiants entiers ce qui a le double avantage :

    - Gestion des langues par exemples (et ne pas faire des requetes sur des libéllés)
    - Amélioration des performances de requetes

    puis apres, j'aurai défini ma contrainte sur la table de notation

    Exemple
    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
     
    /* Creation de la table de notes avec les libéllés externalisés */
    create table #notes (id_note int, libelle char(20), code_langue varchar(3))
    insert into #notes values (1, 'Insuffisant','FR')
    insert into #notes values (2, 'Moyen','FR')
    insert into #notes values (3, 'Bien','FR')
    insert into #notes values (4, 'TB','FR')
    insert into #notes values (5, 'Excellent','FR')
    go
     
    /* Creation de la table des notations, avec references vers la table des notes */
    create table #notations (id_client int, id_voyage int, id_note1 int, id_note2 int, id_note3 int)
    go
    /* Creation de ma contrainte */
    alter table #notations add constraint macontrainte check (id_note1 <= id_note2 or id_note1<=id_note3)
    /* La regle fonctionnelle est a l'appreciation de l'utilisateur */
    go
     
    /* Insertion des données dans la table */
    insert into #notations values (1,1,3 /* Note global Bien */, 4 /*Note satisfaction TB */, 3 /* Notes 3 a Bien*/)
    /* Insertion OK car le postulat de départ est respecté a savoir la note globale est <= note 2 ou note 3 */
    insert into #notations values (1,2,4 /* Note global TB */, 4 /*Note satisfaction TB */, 3 /* Notes 3 a Bien*/)
    /* Insertion OK car le postulat de départ est respecté a savoir la note globale est <= note 2 ou note 3 */
    insert into #notations values (1,3,5 /* Note global Excellent */, 4 /*Note satisfaction TB */, 3 /* Notes 3 a Bien*/)
    /* Insertion NOK car le postulat de départ n'est pas respecté a savoir la note globale > note3*/
    Reste au client de capturer l'erreur de contrainte

    C'est un exemple simplifié de ce qui peut se faire par les contraintes sur des choses simples sans avoir a passer par les triggers (qui alourdissent tres souvent une appli si le code interne n'est pas optimisé).

    Le plus compliqué est de définir clairement la règle fonctionnelle et de la codée par une contrainte... Mais c'est aussi tres interessant

    J'espere avoir répondu a votre curiosité
    Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)

  7. #7
    Membre habitué
    Inscrit en
    Août 2007
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 134
    Points : 168
    Points
    168
    Par défaut
    Je suis tout à fait d'accord sur l'utilisation d'un identifiant pour la notation.
    En revanche, d'après le post original, note globale > note3 est possible, tant que note 3 est différent de insuffisant ou très insuffisant.

    C'est toujours possible de le mettre dans la contrainte, mais plus comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ALTER TABLE #notations 
    add constraint macontrainte check (id_note1 not in (4,5) or ( id_note2 not in (1,2) and id_note3 not in (1,2) ) )
    DBA sybase confirmé
    Cherche un poste sur Paris

  8. #8
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    C'est pour cela que j'avais indiqué que la contrainte fonctionnelle est a la charge de l'utilisateur...

    Mon post etait juste de vous montrer que la gestion des contraintes sur une table peut aussi etre une solution, avant de passer aux solutions "a la hache" par les gestion de triggers. Cela implique cependant d'avoir un modele relativement propre.
    Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)

  9. #9
    Membre habitué
    Inscrit en
    Août 2007
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 134
    Points : 168
    Points
    168
    Par défaut
    Citation Envoyé par Yanika_bzh Voir le message
    Mon post etait juste de vous montrer que la gestion des contraintes sur une table peut aussi etre une solution, avant de passer aux solutions "a la hache" par les gestion de triggers. Cela implique cependant d'avoir un modele relativement propre.
    Je parlais de ce cas précis, je n'étais pas sur que l'on pouvais formaliser cette contrainte fonctionnelle là avec une simple contrainte check.

    Ceci étant dit, en tant que DBA, j'ai toujours trouvé les triggers plus simples à manipuler, souples dans l'utilisation que les contraintes check ou les contraintes d'intégrité référentielles (modification/livraison/désactivation pour bcp/extraction du ddl/rebuild des indexes...) même s'ils rendent plus délicat le reverse engeneering de la base.
    Après c'est une question de préférences...
    DBA sybase confirmé
    Cherche un poste sur Paris

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/11/2008, 15h39
  2. Procédures stockées, Trigger et variables internes
    Par lio33 dans le forum InterBase
    Réponses: 1
    Dernier message: 01/09/2005, 10h28
  3. Réponses: 3
    Dernier message: 09/11/2004, 14h43
  4. Procédures stockées et triggers
    Par benji17c dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 27/04/2004, 10h54
  5. [Comparatif] Procédures stockées, triggers, etc.
    Par MCZz dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/08/2002, 12h27

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