Partage
  • Partager sur Facebook
  • Partager sur Twitter

Structurer des requêtes

    12 septembre 2017 à 23:26:32

    Bonsoir à tous.

    Je me heurte à une question sur la structure de mes requêtes dans le but de les "sécuriser". Dans mon application, je dois compter des éléments selon plusieurs critères, ça pas de problème.

    Imaginons une table 'offres' ainsi :

    • id SMALLINT(5) PK AI,
    • projet_id SMALLINT(5) NOT NULL,
    • utilisateur_id SMALLINT(5) NOT NULL,
    • codification INT(5) INDEX UZ NOT NULL,
    • montant DEC(10,2) NOT NULL,
    • creation DATETIME NOT NULL,
    • acceptation DATETIME NOT NULL,
    • prestation DATETIME DEFAULT NULL,
    • facturation DATETIME DEFAULT NULL,
    • refus DATETIME DEFAULT NULL.

    Vous l'aurez compris, je gère des offres pour une entreprise, liées à un projet. Mon workflow pour ces offres est le suivant :

    • Je crée une offre en renseignant les champs NOT NULL (projet_id, utilisateur_id, codification, montant, creation). 
    • Lorsque l'offre est acceptée (ou refusée), je bascule acceptation (ou refus) à la date du jour. 
    • Quand la prestation est effectuée, je bascule prestation à la date du jour,
    • Quand la facture est émise, je bascule facturation à la date du jour.

    Ainsi je peux compter un nombre d'offres selon plusieurs critères (acceptées, refusées, effectuées, à facturer, cloturées). La question que je me pose est la suivante :

    Pour effectuer mes requêtes, est-ce-que je me base sur la rigueur avec laquelle l'application a été développée ? Ou alors je sécurise en vérifiant à chaque fois la totalité de mes champs ? Exemple :

    --REQUÊTE POUR LES OFFRES A FACTURER (ACCEPTÉES & PRESTATIONS EFFECTUÉES & NON FACTURÉES)
    
    SELECT COUNT(*) FROM offres WHERE prestation IS NOT NULL AND facturation IS NULL
    
    --OU
    
    SELECT COUNT(*) FROM offres WHERE acceptation IS NOT NULL AND prestation IS NOT NULL AND refus IS NULL AND facturation IS NOT NULL
    

    Les deux me renvoient (théoriquement selon le workflow ci-dessus) la même valeur.

    Quelle est la meilleur façon de faire ? Si vous avez une autre façon de structurer la table et la méthode, je suis prenneur de tous conseils ;)

    Merci d'avance, 

    E

    -
    Edité par Ealon 13 septembre 2017 à 0:34:07

    • Partager sur Facebook
    • Partager sur Twitter
    Kwo:re / topic OC | Aidez les autres, indiquez un sujet résolu ! | Vous êtes bloqué ? Suivez le guide ! | N'aide pas par MP
      13 septembre 2017 à 8:46:00

      Bonjour,

      Ealon a écrit:

      est-ce-que je me base sur la rigueur avec laquelle l'application a été développée ? Ou alors je sécurise en vérifiant à chaque fois la totalité de mes champs ?

      D'expérience je laisse la gestion de l'intégrité des données au maximum du côté de la base. Donc personnellement je te dirais que oui, il est plus sage de faire des contrôle d'intégrité côté base et de ne pas faire confiance à ton application.

      Par ailleurs, tu pourrais également créer un TRIGGER BEFORE UPDATE ON offres, qui lèverait une erreur en cas d'incohérence, et de traiter cette erreur côté applicatif ...

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL

      Structurer des requêtes

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown