Quelle est la véritable responsabilité d'une base de données?
Une base de données à la base est un système pour stocker et récupérer des données. Un fichier CSV sur disque + outils appropriés (par exemple Excel) en est un exemple simple. En outre, une base de données peut fournir des fonctionnalités supplémentaires, telles que le contrôle des transactions, l'intégrité des données et la sécurité.
Devrions-nous ajouter des procédures et des fonctions de stockage à la base de données ou simplement le laisser comme référentiel de données sans logique?
Que voulez-vous de la base de données? Si tout ce que vous voulez est un "bit bucket", alors par tous les moyens, stockez-le dans un fichier simple sur le disque et appelez-le "la base de données". Si vous voulez un peu plus, utilisez un produit qui répond à vos besoins. Si vous voulez être en mesure de l'interroger en utilisant un SQL 4GL, utilisez MySQL. Si vous souhaitez contrôler les transactions, la sécurité, les fonctions de requête avancées, etc., utilisez un autre SGBD si nécessaire. Cependant, quel que soit le produit que vous choisissez, tire parti de ce produit. Sinon, vous perdez votre temps et votre argent. Bien sûr, vous n'utiliserez jamais toutes les fonctionnalités (seul un sous-ensemble vous sera utile), mais si vous en utilisez très peu, vous pouvez aussi rétrograder vers un produit plus simple.
Si vous utilisez Oracle, vous pouvez stocker des procédures et des fonctions (mieux encore, des packages complets) directement dans la base de données à côté des données. La vraie question est, qu'est-ce que vous avez besoin d'écrire dans ces procédures et fonctions - la logique métier ou la logique de présentation?
Personnellement, je préfère généralement garder la logique métier proche des données, alors que la logique de présentation est personnalisée pour chaque interface.
Il est possible de créer une couche API sur vos données de sorte que, quelle que soit la manière dont vos applications accèdent à votre base de données, elles auront une vue cohérente et elles le modifieront en utilisant un mécanisme cohérent. En d'autres termes, au lieu d'écrire la logique métier plusieurs fois (une fois pour chaque interface), vous l'écrivez une fois et une seule fois, puis vous la réutilisez partout.
Il y a deux raisons pour lesquelles je l'ai entendu pourquoi la logique métier ne doit pas être stocké dans la base de données:
1. maintenabilité: il est difficile de changer. Je n'ai jamais vraiment compris celui-ci. Est-ce difficile de taper CREATE OR REPLACE PACKAGE
? Je suppose que c'est juste le fardeau de devoir apprendre «encore une autre langue».
2. Indépendance de la base de données: ce qui fonctionne dans Oracle ne fonctionnera pas ailleurs. Ceci est un biggie, et better minds than I ont written about celui-ci. Fondamentalement, si vous avez vraiment besoin d'être "agnostique de base de données", vous ne pourrez utiliser aucune des fonctionnalités avancées de la base de données que vous avez achetée, donc vous pouvez aussi utiliser le plus simple/le moins cher que vous pouvez trouver; Dans ce cas, vous n'avez pas besoin de travailler sur toutes les bases de données!
Connexes: http://stackoverflow.com/questions/119540/business-logic-database-or-application-layer, http://stackoverflow.com/questions/1473624/business-logic-in-database-versus -code –