Je pense que la question porte sur la responsabilité de la qualité des données.
La réponse dépend de la façon dont vous voyez le système.
Si vous voyez la base de données comme un service indépendant, distinct et autonome distinct de l'application, alors la base de données est chargée d'assurer la cohérence et la qualité des données qu'elle contient. Essentiellement parce que cette base de données pourrait être utilisée par une autre application, elle ne peut donc pas compter sur cette deuxième application ayant les mêmes comportements de cohérence et de qualité. Dans ces circonstances, la base de données doit être conçue pour exposer une API et un comportement autonome. Dans cette vue, il existe au moins deux applications, l'une d'entre elles est la base de données et l'autre est l'application qui l'utilise.
Inversement, la base de données pourrait être considérée comme une forme compliquée de fichier qui est sous le contrôle direct et total de l'application. En ce sens, la base de données devient un pur outil de sérialisation et de navigation dans les documents. Il peut fournir certains comportements avancés pour prendre en charge les requêtes et la maintenance des documents (comme le font les outils JSON ou XML), mais il n'est pas nécessaire de le faire (comme la plupart des flux de fichiers). Dans ce cas, il incombe uniquement aux programmes de conserver le format et le contenu corrects dans le fichier. Dans cette vue, il y a une application.
Dans les deux vues, la question suivante est de savoir comment prendre en charge l'utilisation de la base de données en tant que fichier de fantaisie ou service distinct. Vous pouvez y parvenir en:
- en utilisant les outils que la plateforme de base de données fournit sous forme de tables / vues / procédures stockées / déclencheurs / etc ...
- encapsuler la base de données elle-même dans un service que tous les clients doivent utiliser pour accéder à la base de données
- encapsuler la base de données dans une bibliothèque qui doit être utilisée par tous les clients pour accéder aux données.
Chacun a ses avantages et ses inconvénients et dépendra des contraintes architecturales de l'environnement dans lequel le système fonctionne.
Quelle que soit la vue que vous adoptez, il est toujours avantageux de valider les données aux limites.
- Valider les champs d'une interface utilisateur saisis par un utilisateur
- Valider la demande de réseau / API avant qu'elle ne quitte le client
- Validez la requête réseau / API sur le serveur avant de faire quoi que ce soit
- Valider les données transmises dans les règles métier
- Valider les données avant de persister
- Valider les données après avoir été récupérées de la persistance
- ainsi de suite et ainsi de suite
La quantité de validation garantie à chaque frontière dépend du risque de ne pas la valider.
- multiplier deux nombres ensemble?
- vous obtenez le mauvais numéro est-ce un problème?
- invoquer une procédure sur un emplacement mémoire donné?
- Qu'y a-t-il dans cet emplacement mémoire?
- Que se passe-t-il si l'objet n'existe pas ou est en mauvais état?
- à l'aide d'une expression régulière sur une chaîne contenant des kanji?
- Le module regex peut-il gérer unicode?
- Le regex peut-il gérer unicode?
However, why not perform validation of data on the application side before storing them into the database?
eh bien, ces deux-là ne s'excluent pas mutuellement. Il est probable que vous validerez différentes choses des deux côtés. Alors que les validations côté application sont centrées sur l'entreprise, les validations sur la base de données sont plus centrées sur les données. Pensez dans une base de données alimentée par plusieurs applications différentes.