Dans un schéma relationnel, des champs d’une table A
peuvent référencer l’enregistrement d’une table B
grâce à la définition d’une clé étrangère, qui consiste en une référence de la valeur de A
vers l’un des champs de B
. Ces informations sont stockées au niveau du schéma de la base de données, qui agit comme un métamodèle. Celui-ci spécifie quels champs constituent des clés étrangères, et quel autre champ en est la cible.
Et pour ne rien gâcher, ce métamodèle peut également être interrogé en SQL. Il est donc tout à fait possible d’interroger les contraintes associées aux tables du schéma, au travers d’une requête SQL, afin d’obtenir les relations inverses (ie. quels sont les tables qui référencent telle autre table?).
Parmi les types de contraintes, on a ceux-ci:
- C : Vérification d’une contrainte sur la table, par exemple que tel champ n’est pas nul.
- P : Clé primaire
- U : Clé unique
- R : Clé étrangère
- V : Vérification sur une vue
- O : Lecture seule, sur une vue
La requête de base sur Oracle ressemble à ceci:
Select
a.table_name "Referenced Table",
b.table_name "Referenced By",
a.*,
b.*
From all_constraints a
Left Outer Join all_constraints b
on a.constraint_name = b.r_constraint_name
Order By a.table_name
- Le champ “Referenced Table” indique la table sur laquelle les contraintes s’applique
- Le champ “Referenced By” indique la table référençant la première lorsqu’elle existe.
a.constraint_type
indiquera le type de contrainte sur la table référencéeb.constraint_type
sera d’office de typeR
Comme on ne fixe aucune condition, cette requête listera toutes les contraintes associées à l’ensemble des tables du schéma.