grimboite/articles/dev/2015-01-13 foreign-key-depe...

38 lines
1.7 KiB
Markdown
Raw Normal View History

2018-08-02 14:56:09 +02:00
---
Title: Dépendances sur une clé étrangère
Date: 2015-01-13
Slug: sql-foreign-key-dependencies
Tags: sql, oracle
---
Dans un schéma relationnel, des champs d'une table A peuvent référencer l'enregistrement d'une table B grâce à une référence vers l'un de ses champs. Grâce au schéma de la table qui spécifie quels champs sont des clés étrangères, on peut facilement interroger les contraintes associées aux tables 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](http://docs.oracle.com/cd/B19306_01/server.102/b14237/statviews_1037.htm#i1576022):
* 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:
```sql
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
```
Comme on ne fixe aucune condition, cela liste toutes les contraintes pour toutes les tables.
* 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ée
* `b.constraint_type` sera d'office de type `R`
Sources
-------
* [StackOverflow (comme d'habitude)](http://stackoverflow.com/questions/2509512/how-to-find-foreign-key-dependencies-pointing-to-one-record-in-oracle)