Citation:
mon souhait serait simplement de donner le moyen au logiciel de récupérer les contraintes imposées par la bdd sans avoir à en refaire la liste dans du code applicatif et en prime que les changements de contraintes (de type NULL/NOT NULL et CHECK par expl) soient appliquées automatiquement par l'appli.
N'empêche qu'il faudra bien associer du code à ces contraintes !
Remarque au passage :
A des contraintes (NOT) NULL sont associées généralement des valeurs par défaut qui, si elles ne sont pas spécifiées dans la description de la table, sont automatiques (chaîne vide, zéro... à voir avec le SGBD utilisé).
==> L'application n'a donc potentiellement rien à faire.
A des contraintes CHECK peuvent être associés (au moins grâce à PGAdmin, je ne sais pas autrement) des messages d'erreur explicites définis par celui qui implémente la BDD.
==> L'application n'a qu'à récupérer les messages explicites pour les afficher si besoin quand ils surviennent.
Dans les deux cas, la contrainte n'a pas besoin d'être réimplémentée dans l'application. Par contre, si la description du processus mis en oeuvre à l'aide du logiciel interdit que telle colonne ne soit pas renseignée, alors il s'agit d'une contrainte fonctionnelle (par exemple sur un formulaire de saisie) qui doit être ajoutée dans le logiciel en plus de la contrainte NOT NULL dans la BDD et qui vérifiera qu'on a bien saisit du texte, éventuellement formaté d'une certaine façon, et pas une chaîne vide ou non conforme au standard.
Citation:
On veut bien sûr faire confiance à notre SGBD sur la cohérence des données stockées et ne pas se contenter de laisser ce travail à un quelconque applicatif (d'autant plus que si on le fait via INSERT -> pas d'applicatif) c'est aussi son boulot non ?
Je suis bien d'accord avec ça et dans un précédent message, j'avais parlé des contraintes logiques sur les données.
Citation:
- Poids entre 500 et 2500 kg (belle bête)
- Hauteur garrot entre 80 et 250 cm
- oreilles entre 10 et 50 cm
Ce sont effectivement des contraintes sur les données à mettre en BDD car il serait illogique de voir un bovin avec des oreilles de 300 cm.
Mais j'ai dit dans mon précédent message de prendre du recul sur les données. Un veau tout juste né ne fait probablement pas 500 kg mais ça reste un bovin qui aura très rapidement un numéro d'identification dans la base de données nationale d'identification des bovins (la BDNI).
Alors peut-être que l'applicatif que tu es chargé de développer à l'instant T ne traite que les bovins adultes supposant un poids logiquement minimal mais ce poids minimal est alors une contrainte imposée par la nature de l'applicatif et non pas par la nature de la donnée.
Je vais prendre un autre exemple que je connais bien. J'ai commencé à développer une appli associée à une BDD pour ma documentation cinématographique.
J'ai mis une contrainte sur la date de sortie du film > 1895-12-27 puisque la première projection publique d'un film eut lieu le 28 décembre 1895.
Si dans mon appli je prévois un formulaire pour enregistrer les nouveaux films, j'ajouterai une contrainte logicielle pour m'interdire la soumission au SGBD d'une date inférieure à aujourd'hui, laquelle serait acceptée par le SGBD (car supérieure à 1895-12-27) mais fausse.
Citation:
Pour moi le fait de mettre des contraintes de colonnes sur la table présente l'avantage de contrôler la cohérence qlq soit le moyen d'insertion et ces contraintes sont celles que je juge "véritables" car définies pas expertise cliente.
OK mais en prenant du recul sur les valeurs.
Citation:
Alors que faire pour les contrôle formulaire ou contrôle fichiers d'upload, ou doit on stocker le détail de nos contraintes ?
Le principe que je viens de décrire. En résumé :
- contraintes de type, de nullité, de clés étrangères, d'intégrité référentielle, logiques dans la BDD ;
- contraintes fonctionnelles liées à l'application dans l'application.
Citation:
on peut le refaire dans le code de l'applicatif mais je trouve ça dommage voir dangereux car on n'a pas l'assurance qu'une modif faire côté SQL sera bien reprise par l'applicatif
Bien d'accord avec ça.
Citation:
faire en sorte que l'applicatif puisse retrouver ces contraintes en les demandant sur la base avant l'insertion
Donc faire deux requêtes dans presque tous les cas :
- requête pour interroger les contraintes et les prendre en compte dans l'applicatif ;
- requête d'insertion ou de mise à jour avec des valeurs que le SGBD n'aura a priori même plus à contrôler alors que c'est une partie de son boulot et qu'il le fera quand même.
Avec ma méthode, on gère les erreurs (en principe rares) retournées par le SGBD et on n'a à renvoyer une seconde requête que s'il y a rejet (donc rarement).
==> Moins de transcation avec le SGBD ==> plus de performance.
Citation:
Hélas ou pas on parvient à cloner de nouveaux animaux avec une girafe (on sait jamais :mouarf:) conséquence on aura besoin d'augmenter les limites max par expl, alors OK on augment la taille limite max à 400 cm et le reste aussi dans nos contraintes de colonnes,
Cet événement, s'il arrive un jour, ce que je ne souhaite pas, entraînera probablement de nouveaux besoins pour l'applicatif. Par exemple l'ajout d'une case à cocher indiquant qu'il s'agit d'un hybride obtenu par clonage.
Il faut se méfier énormément des logiciels anciens pour traiter des données ayant des paramètres totalement nouveaux. L'histoire du vol 501 d'Ariane en est un bon exemple !