Était-ce utile?

La solution

Faire respecter les contraintes, mais ne comptez pas sur eux dans votre logique métier

  • Non logique métier sur la base de données: Je suis d'accord avec le principe. Et si votre non-SQL Code entreprise repose sur les contraintes de base de données pour vérifier la régularité de votre base de données, vous devez repenser votre logique métier.
  • Il n'y a rien de mal d'avoir des contraintes de base de données en plus à votre logique métier. Surtout parce que les choses comme l'intégrité référentielle avec foreign keys et d'autres contraintes uniques sont faciles à faire et SGBDR font ce travail pour vous de façon très efficace, sans beaucoup d'entretien.
  • raisonnez-vous pas indices sur la base de données aussi, parce que ce n'est pas uniquement liés persistance?
  • Recherche et de corriger le bogue du logiciel peut prendre un certain temps, mais vous définitivement ne veulent pas dépenser encore plus de temps à nettoyer ou (pire) de perdre des données, juste parce que vous vous avez enregistré une peine de l'écriture script d'une ligne pour une FK. Vraiment: quelque chose de votre get gratuitement ici et votre rejettent
  • ?
  • [EDIT-1]: pouvez-vous garantir que les données dans votre base de données sera gérée uniquement via votre application? Il semble toujours y avoir des exceptions, la plupart du temps par les utilisateurs de puissance, qui font parfois (faire très rarement :-) erreurs et exécuter des instructions SQL à votre code de nettoyage, les statuts de mise à jour (à des valeurs non valides en raison de fautes de frappe) etc.
  • [EDIT-2]: Bâtiment domaine conduit modèle ne constitue pas une excuse pour ne pas embaucher un bon DB admin. L'utilisation ORM est pas une excuse pour ne pas embaucher un bon développeur de DB.

Mais si vous et votre équipe êtes capable d'écrire logiciel sans bug et gérer tous les scénarios d'exception possibles dans votre code (y compris le matériel / réseau / factice utilisateur / échecs programmeur-erreur), puis "Hei, pourquoi embêter avec redondants contraintes FK ...." - -teaser -

Autres conseils

Je pense que oui, je considère qu'il est pas autant quelque chose pour la logique métier, mais empêchant les données « mauvais » d'être entré dans la base de données. Une fois la base de données devient très importante ces contraintes empêcheront des maux de tête à l'avenir.

Ce sera tout particulièrement entrera en vigueur lorsque plusieurs développeurs en développement des applications contre les mêmes données. Cela permettra d'assurer qu'ils ne peuvent ainsi entrer des données valides. Ayant des contraintes contrôlées 1 place au lieu de x applications est certainement bénéfique.

Je me sens comme ignorant vraiment des outils utiles (base de données de niveau d'intégrité des données) dans l'intérêt d'une méthodologie de développement pur est contre-productif. Les bases de données sont vraiment bons à ce genre de chose ... laissez-les faire.

À un certain point chaque méthode commence à se décomposer et il vous suffit d'être pratique.

Je pensais que oui, mais mon opinion a changé depuis que je commencé à écrire beaucoup de systèmes axés sur les ressources. En règle générale, beaucoup plus que les contraintes que la clé étrangère sont nécessaires pour valider une donnée - par exemple, un billet qui est en état « attribué » doit avoir une validité « assigned_to » valeur, et ainsi de suite. Toutes ces règles doivent être placées dans une routine de validation de quelque sorte, et en théorie, il pourrait ne pas mal pour avoir une validation supplémentaire au niveau de la base de données, si votre validation au niveau de l'application fonctionne, vérifier l'étranger contrainte de clé est juste cycles gaspillée. Bien pire, cependant, vous avez maintenant la logique de votre modèle de données répétées en deux endroits - le code de validation et les contraintes de base de données.

Pensez-y de cette façon: voudriez-vous déplacer toute autre logique d'application dans la base de données (par exemple, via des procédures stockées) si vous ne deviez pas? Si vous n'êtes pas obligé de le faire par des considérations de performance, je pense que la réponse devrait généralement être « non ».

"Ma première réaction a été que l'utilisation même d'une base de données relationnelle implique l'application de ces contraintes, mais certains ont fait valoir que la base de données doit être considérée comme rien d'autre qu'un mécanisme de persistance et donc nous devons éviter de placer toute la logique métier en elle. nous avons fini par ne pas utiliser des contraintes de clés étrangères ».

Oui, eh bien, la majorité médiocre gagne toujours ce genre de débat par simple force du nombre, hélas.

Si vous voulez continuer à combattre cette bataille, vous pourriez demander à vos adversaires comment ils ont l'intention de garder quiconque d'utiliser « éditeurs de base de données directe » (ala db2- aide, SPUFI, ...) et comment ils ont l'intention de garder tout le monde de corrompt la base de données à l'aide de ces outils (qui contournent les contraintes commerciales programmées par définition).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top