10
10
<h3>Foreign key covering indexes</h3>
12
Une cl� �trang�re est utilis�e pour coupler deux tables d'une fa�on logique et
12
Une clé étrangère est utilisée pour coupler deux tables d'une façon logique et
13
13
restreint les modifications qui peuvent les affecter.
16
Tout commence avec une table ma�tre qui sera la table r�f�renc�e. Elle doit avoir
17
une cl� primaire (en fait, les colonnes r�f�renc�es doivent seulement �tre non
16
Tout commence avec une table maître qui sera la table référencée. Elle doit avoir
17
une clé primaire (en fait, les colonnes référencées doivent seulement être non
18
18
NULL et doivent avoir un index unique mais un conseil vraiment bon est d'avoir une
19
cl� primaire). La table esclave d�pend de la table ma�tre, dans le sens o� les
20
colonnes sur lesquelles est ajout�e la cl� �trang�re cr��e doivent correspondre
21
� la table ma�tre pour toute cl� ins�r�e ou mise � jour. La table esclave est la
22
table r�f�rante de la cl� �trang�re.
25
La cl� �trang�re ne restreint pas seulement la table r�f�rante mais aussi la
26
table de r�f�rence ; cette restriction peut �tre RESTRICT, CASCADE ou SET
27
NULL. Cela signifie que, si une ligne est modifi�e dans la table
28
ma�tre/r�f�renc�e (mise � jour ou supprim�e), toutes les tables r�f�rantes sont
29
v�rifi�es si l'op�ration est valide et s'il reste des actions suppl�mentaires �
30
r�aliser ; voir la documentation de PostgreSQL sur les cl�s �trang�res pour
34
Ceci signifie que suite � un acc�s en modification sur une ligne sp�cifique dans
35
la table r�f�renc�e, une lecture correspondante est r�alis�e sur toutes les
36
tables r�f�rantes en utilisant les colonnes de la cl� �trang�re comme cl� d'acc�s.
37
En cons�quence, toutes les r�gles de conception qui auraient d� �tre pris
38
en consid�ration pour une lecture avec de bonnes performances devraient aussi
39
s'appliquer aux colonnes dans une table r�f�rante. Pour de bonnes performances,
40
un index est pr�f�rable dans la plupart des cas. PostgreSQL ne contraint pas
41
ceci de cette fa�on mais c'est au concepteur de la base de donn�es de fournir un
19
clé primaire). La table esclave dépend de la table maître, dans le sens où les
20
colonnes sur lesquelles est ajoutée la clé étrangère créée doivent correspondre
21
à la table maître pour toute clé insérée ou mise à jour. La table esclave est la
22
table référante de la clé étrangère.
25
La clé étrangère ne restreint pas seulement la table référante mais aussi la
26
table de référence ; cette restriction peut être RESTRICT, CASCADE ou SET
27
NULL. Cela signifie que, si une ligne est modifiée dans la table
28
maître/référencée (mise à jour ou supprimée), toutes les tables référantes sont
29
vérifiées si l'opération est valide et s'il reste des actions supplémentaires à
30
réaliser ; voir la documentation de PostgreSQL sur les clés étrangères pour
34
Ceci signifie que suite à un accès en modification sur une ligne spécifique dans
35
la table référencée, une lecture correspondante est réalisée sur toutes les
36
tables référantes en utilisant les colonnes de la clé étrangère comme clé d'accès.
37
En conséquence, toutes les règles de conception qui auraient dû être pris
38
en considération pour une lecture avec de bonnes performances devraient aussi
39
s'appliquer aux colonnes dans une table référante. Pour de bonnes performances,
40
un index est préférable dans la plupart des cas. PostgreSQL ne contraint pas
41
ceci de cette façon mais c'est au concepteur de la base de données de fournir un
45
Pour plus de confort, pgAdmin III fournit une simple case � cocher lors de la
46
cr�ation d'une cl� �trang�re, qui v�rifiera automatiquement la pr�sence d'un
47
index utilisable et en cr�era un pour vous s'il n'existe pas. Comme avec tous les
48
index, il existe quelques rares cas o� l'index fait d�cro�tre les performances
49
mais, en g�n�ral, avoir un index de moins occasionne plus de d�gradations au
45
Pour plus de confort, pgAdmin III fournit une simple case à cocher lors de la
46
création d'une clé étrangère, qui vérifiera automatiquement la présence d'un
47
index utilisable et en créera un pour vous s'il n'existe pas. Comme avec tous les
48
index, il existe quelques rares cas où l'index fait décroître les performances
49
mais, en général, avoir un index de moins occasionne plus de dégradations au
50
50
niveau des performances que d'avoir un index de trop.