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

PostgreSQL Discussion :

Contrôle d'accès simultanés


Sujet :

PostgreSQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2005
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 68
    Points : 38
    Points
    38
    Par défaut Contrôle d'accès simultanés
    Bonjour,

    Je voudrais contrôler l'accès sur une table de la façon suivante :
    J'ai une table enchere qui à pour champs num_utilisateur, num_objet, montant_enchere ; soit tel utilisateur enchérit sur tel objet avec tel montant.
    Seulement si deux utilisateurs souhaitent enchérir en même temps, l'un doit attendre l'autre sinon je vais avoir deux enchères égales pour le même objet.
    Je souhaite donc bloquer l'enregistrement d'une enchère selon le numéro de l'objet concerné.
    J'ai pensé à mettre num_objet et montant_objet en clef primaire.
    Est-ce une bonne idée ?
    Quelqu'un a t'il quelque chose à me proposer ?

    Merci d'avance
    Tom

  2. #2
    Nouveau membre du Club
    Inscrit en
    Juin 2005
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 68
    Points : 38
    Points
    38
    Par défaut
    Pour répondre à ma question, l'idée de la clef primaire est tout à fait mauvaise dans ce cas.
    La seule solution que j'ai pour le moment, c'est de faire un lock sur la table puis d'attendre qu'un insert ait été fait pour gérer les suivants. Seulement.....dans ce cas je ne bloque l'accès simultané pour l'enchere d'un seul objet, mais je bloque toutes les enchères, ce qui est médiocre concernant les performances.
    J'attends toujours des idées...

  3. #3
    Membre averti Avatar de icer
    Inscrit en
    Janvier 2006
    Messages
    332
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 332
    Points : 363
    Points
    363
    Par défaut
    Bonjour,

    Avec ta clé primaire, en effet, deux utilisateurs ne pourront pas enchérir le même montant. Je ne sais pas comment fonctionne ton sytème d'enchére, mais si l'utilisateur à le choix du montant, ça risque de poser problème...

    Une solution serait de poser une contrainte check sur le montant pour vérifier qu'il est toujours supérieure aux autres montants proposés pour l'objet concerné.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juin 2005
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 68
    Points : 38
    Points
    38
    Par défaut
    Bonjour icer,

    D'abord merci pour ta réponse.
    Alors en ce qui concerne la clef primaire, je n'ai pas autorisé une même enchère sur un même objet donc je ne m'inquiète pas pour ca ; c'est plutôt que si j'utilise cette méthode je pourrais tout à fait poser une enchère inférieure à une enchère précédente sans problème, ce qui ne va pas du tout.

    Pour la check, j'y avais songé mais je ne suis pas parvenu à mes fins :
    En effet je ne peux pas me servir d'agrégats dans une clause check donc comment trouver le max !? Et aussi, comment poser cette contrainte d'une enchère toujours supérieure au max selon le num_objet_enchere concerné ???
    Je crois que je ne sais pas trop me servir de cette clause check

    Donc si tu as une proposition à ce propos je suis preneur !

    Merci

  5. #5
    Membre averti Avatar de icer
    Inscrit en
    Janvier 2006
    Messages
    332
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 332
    Points : 363
    Points
    363
    Par défaut
    C'est vrai que la contrainte check est un non sens puisque tout les montants devraient être supérieurs à tout les montants...

    Une autre possiblité serait de créer un trigger avant insertion sur la table qui vérifierait qu'il n'y a pas de montant supérieur pour l'objet concerné, et de faire l'insertion uniquement dans ce cas.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juin 2005
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 68
    Points : 38
    Points
    38
    Par défaut
    Rebonjour,

    Alors en fait, j'ai ajouté un champ max_enchere_objet à ma table objet et je le consulte toujours avant d'insérer une nouvelle enchère.
    Du coup je peux poser un verrou avec select for update.
    Cependant, ca engendre de la redondance en le sens où le max des enchères est déjà accessible avec la fonction max sur la table enchère...

  7. #7
    Membre averti Avatar de icer
    Inscrit en
    Janvier 2006
    Messages
    332
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 332
    Points : 363
    Points
    363
    Par défaut
    Tu peux faire un select for update sans avoir à ajouter un nouveau champ, non?
    Du coup, tu n'aurais plus de problème de redondance.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Juin 2005
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 68
    Points : 38
    Points
    38
    Par défaut
    Oui c'est vrai ! En fait je pensais qu'il fallait absolument faire un update sur le champ concerné pour libérer le verrou.....mais non.
    Donc oui je vais juste faire un select for update sur le num_objet concerné.

    Merci encore

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

Discussions similaires

  1. Accès simultanés : bloquer la lecture d'une table
    Par rohstev dans le forum Access
    Réponses: 12
    Dernier message: 01/02/2008, 20h04
  2. [Axis][WebService]accès simultanés à un Webservice
    Par olivierda dans le forum Services Web
    Réponses: 6
    Dernier message: 08/12/2006, 18h36
  3. Accès simultané au même fichier pour modification
    Par Dominique_78 dans le forum Langage
    Réponses: 5
    Dernier message: 21/02/2006, 18h53
  4. [SQLServer] Acces simultanés a une BD via ADO dans un dll
    Par corwin_d_ambre dans le forum Bases de données
    Réponses: 4
    Dernier message: 05/11/2004, 15h52
  5. Réponses: 7
    Dernier message: 08/03/2004, 15h30

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