J'ai lu le livre "l'Entreprise Rails" par Dan Chak et ça m'a fait penser: pensez-vous que vous devriez avoir les contraintes de données à la fois le niveau de base de données et le niveau d'application? Ou vous sentez-vous de la même façon aux opinions des cadres comme Ruby on Rails - la base de données est une "bête référentiel" pour les données, et tous les chèques doivent être faits dans votre application (je ne cherche pas à RoR ici - je suis un grand fan de Rails de moi, mais je suis en désaccord avec son approche à la base de données)?
Personnellement, je pense que vous devriez avoir à la fois afin de vous assurer que votre base de données et l'application sont bien sécurisées. Ce que je veux dire, c'est que vous devriez faire usage de non-null de contraintes, donner à vos champs d'une longueur si elle est connue ( par opposition à la laissant tout à nvarchar(255) ), ont des choses telles que les Clés Étrangères, les Contraintes de Vérification et de Déclencheurs sur votre base de données, puis appliquer ceci à travers la logique métier des règles dans votre application. De l'OMI, ce qui rend votre application robuste grâce à son interface utilisateur, et aussi sécurisé contre quelqu'un qui pourrait avoir un accès direct à la base de données.
Le contre-argument que j'ai le plus souvent de voir, c'est qu'il exige que les montants à double logique, une fois que le niveau de base de données, et une fois au niveau de l'application -- disons que vous avez une contrainte de vérification pour vérifier qu'un produit SKU est entré (c'est à dire que la taille est plus grande que zéro).
Vous aurez besoin d'inclure également les méthodes de validation dans une logique d'entreprise à assurez-vous que la valeur que l'utilisateur a entré a une longueur supérieure à zéro, et aussi éventuellement un peu de Javascript côté client pour intercepter l'erreur que l'utilisateur des données de types.
Pour ma part, je ne vois pas cela comme une mauvaise chose - oui, vous avez quelques dupliquer la logique, mais le résultat final est la "base de données en tant que forteresse" état d'esprit, car si vous pensez à ce sujet de vos données est la partie la plus importante de votre application; après tout, à quoi bon votre brillante nouvelle application Web 2.0 si les données peuvent être facilement endommagé et compromis?
Quelles sont vos pensées sur cette question? Si la base de données d'être une forteresse imprenable comme Fort Knox, ou un coffre ouvert, qui est gardé par des lasers? En d'autres mots, vous devez sacrifier une partie de la duplication de la logique afin d'assurer une sécurité modèle de données, ou de tout quitter pour votre application et de l'utilisation de la base de données simplement pour stocker des données?