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 :
idSMALLINT(5) PK AI,
projet_idSMALLINT(5) NOT NULL,
utilisateur_idSMALLINT(5) NOT NULL,
codificationINT(5) INDEX UZ NOT NULL,
montantDEC(10,2) NOT NULL,
creationDATETIME NOT NULL,
acceptationDATETIME NOT NULL,
prestationDATETIME DEFAULT NULL,
facturationDATETIME DEFAULT NULL,
refusDATETIME 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
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 ...
× 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.