Vous suggérez évidemment que les CONSTRAINT
s dans une base de données devraient être appliqués par les applications qui accèdent à cette base de données?
Il y a plusieurs raisons pour lesquelles c'est une mauvaise (mauvaise, mauvaise ...) idée.
1) Si vous construisez un moteur de contrainte "roll-your-own" (c'est-à-dire dans votre code d'application), vous émulez simplement ce qu'Oracle / SQL Server / MySQL / PostgreSQL / <. Quiconque ...> a dépensé années d' écriture. Leur code CONSTRAINT a été testé au cours de ces années par des millions d'utilisateurs finaux.
2) Avec tout le respect que je vous dois ainsi qu'à votre équipe, vous n'allez pas faire les choses correctement, même dans quelques années - à partir d' ici , le code MySQL coûte à lui seul 40 millions de dollars. Et MySQL est le moins cher des 3 serveurs ci-dessus, et ils n'implémentent même pas CHECK CONSTRAINTs. De toute évidence, obtenir RI (Referential Integrity) complètement à droite est difficile.
J'avais l'habitude de fréquenter les forums Oracle et je ne peux pas vous dire le nombre de fois où un pauvre gestionnaire / programmeur s'est vu imposer un projet où le génie qui avait son travail avant a eu l'idée "brillante" de faire ce que vous suggérez .
Jonathan Lewis (il a écrit un livre de 550 pages sur les principes fondamentaux de l' optimiseur Oracle ) donne non. 2 de ses désastres de conception dans un autre livre (" Tales of the Oak Table " - la Oak Table est un groupe d'experts Oracle) est
- Nous vérifierons l'intégrité des données au niveau de l'application au lieu de profiter des capacités de vérification des contraintes d'Oracle.
3) Même si, par miracle, vous pouvez correctement implémenter RI, vous devrez le réimplémenter complètement maintes et maintes fois pour chaque application qui touche cette base de données - et si vos données sont importantes, alors de nouvelles applications le feront. Choisir cela comme paradigme vous mènera, vous et vos collègues programmeurs (sans parler du personnel de soutien et des ventes), à une vie de lutte contre les incendies et de misère.
Vous pouvez en savoir plus sur la raison pour laquelle la mise en œuvre de CONTRAINTES de données au niveau de l'application n'est rien de moins que de la folie ici , ici et ici .
Pour répondre spécifiquement à votre question:
Pourquoi sont-ils déclarés? Cela semble très utile, mais est-il vraiment nécessaire d'avoir une base de données qui fonctionne
La raison pour laquelle KEY
s (soit PRIMARY
, FOREIGN
, UNIQUE
ou tout simplement ordinaires INDEX
es) sont déclarées est que, alors qu'il est pas strictement nécessaire à une base de données pour les avoir pour elle fonctionne, il est absolument nécessaire qu'ils soient déclarés pour qu'il fonctionne bien .