Oracle
 sql >> Base de données >  >> RDS >> Oracle

Quelle est la meilleure façon d'appliquer une relation de « sous-ensemble » avec des contraintes d'intégrité ?

L'un des problèmes de SQL est son faible niveau de prise en charge des contraintes d'intégrité, en particulier les contraintes référentielles.

À toutes fins pratiques, votre problème ne peut pas être résolu à l'aide de contraintes SQL, sauf si vous désactivez les contraintes lorsque vous souhaitez insérer une ligne dans une table. La raison en est que SQL exige que les tables soient mises à jour une à la fois et que la contrainte doit donc être violée chaque fois que de nouvelles lignes sont insérées. Il s'agit d'une limitation fondamentale de SQL et tous les principaux SGBD en souffrent.

Il existe des solutions de contournement, mais aucune d'entre elles n'est parfaite. Vous pouvez utiliser les contraintes DEFERRABLE si votre SGBD en a (Oracle par exemple). Une contrainte DEFERRABLE n'est en réalité qu'un moyen simple de désactiver une contrainte. Ou vous pouvez utiliser des déclencheurs, ce qui signifie que la règle est appliquée de manière procédurale plutôt que via une contrainte de base de données appropriée.