root/traduc/branches/bv803/manuel/ddl.sgml

Revision 110, 78.7 kB (checked in by gleu, 3 years ago)

Relecture d'Hervé Dumont.

Line 
1 <!-- $Header: /var/lib/cvs/pgsql-fr/sgml/ddl.sgml,v 1.11 2005/07/15 06:14:21 guillaume Exp $ -->
2
3 <chapter id="ddl">
4  <title>Définition des données</title>
5
6  <para>
7   Ce chapitre couvre la création de structures de données qui contiendront
8   les données de quelqu'un. Dans une base relationnelle, les données brutes
9   sont stockées dans des tables. Du coup, la plus grande partie de ce chapitre
10   sera consacrée à l'explication de la création et de la modification des tables
11   et des fonctions disponibles pour contrôler les données stockées dans les tables.
12   Ensuite, nous discuterons de l'organisation de tables en schémas, et comment
13   des droits peuvent être attribués aux tables. Enfin,
14   nous verrons brièvement d'autres fonctionnalités, tel que les vues, les fonctions
15   et les déclencheurs.
16  </para>
17
18  <sect1 id="ddl-basics">
19   <title>Bases sur les tables</title>
20
21   <indexterm zone="ddl-basics">
22    <primary>table</primary>
23   </indexterm>
24
25   <indexterm>
26    <primary>rangée</primary>
27   </indexterm>
28
29   <indexterm>
30    <primary>colonne</primary>
31   </indexterm>
32
33   <para>
34    Une table dans une base relationnelle ressemble beaucoup à un tableau
35    sur papier&nbsp;: elle est constituée de rangées et de colonnes. Le nombre
36    et l'ordre des colonnes sont fixés et chaque colonne a un nom. Le
37    nombre de rangées est variable -- il représente la quantité de données
38    stockées à un moment donné. SQL n'apporte aucune garantie sur l'ordre des
39    rangées dans une table. Quand une table est lue, les rangées
40    apparaîtront dans un ordre aléatoire sauf si un tri est demandé
41    explicitement. Ceci est couvert dans <xref linkend="queries">. De plus,
42    SQL n'attribue pas d'identifiant unique aux rangées. Du coup, il est possible
43    d'avoir plusieurs rangées complètement identiques dans une table. Ceci
44    est une conséquence du modèle mathématique sur lequel repose SQL mais
45    n'est habituellement pas désiré.
46    Plus tard dans ce chapitre, nous verrons comment traiter ce problème.
47   </para>
48
49   <para>
50    Chaque colonne a un type de donnée. Ce type de donnée restreint la série
51    de valeurs possibles qui peuvent être attribuées à une colonne et attribue
52    des sémantiques à la donnée stockée dans la colonne pour qu'elles puissent
53    être utilisées pour des calculs. Par exemple, une colonne déclarée comme
54    étant d'un type numérique n'acceptera pas une chaîne arbitraire de texte,
55    et les données stockées dans une telle table peuvent être utilisées dans
56    des calculs mathématiques.
57    Par opposition, une colonne déclarée comme étant de type chaîne de
58    caractères acceptera pratiquement n'importe quel type de donnée mais ne
59    se prêtera pas à des calculs mathématiques bien que d'autres opérations
60    tel que la concaténation des chaînes sont disponibles.
61   </para>
62
63   <para>
64    <productname>PostgreSQL</productname> inclut une série conséquente de types
65    de données intégrés qui correspondent à plusieurs applications. Les
66    utilisateurs peuvent aussi définir leurs propres types de données. La
67    plupart des types de données intégrés ont des noms et des sémantiques
68    évidents alors nous reportons une explication détaillée à <xref
69    linkend="datatype">. Quelques-uns des types les plus utilisés sont
70    <type>integer</type> pour les entiers, <type>numeric</type> pour
71    les nombres pouvant être fractionnels, <type>text</type> pour les chaînes de
72    caractères, <type>date</type> pour les dates, <type>time</type> pour
73    les valeurs de type heure et <type>timestamp</type> pour les valeurs
74    contenant et une date et une heure.
75   </para>
76
77   <indexterm>
78    <primary>table</primary>
79    <secondary>création</secondary>
80   </indexterm>
81
82   <para>
83    Pour créer une table, il faut utiliser la commande bien nommée <command>CREATE
84    TABLE</command>. Dans cette commande, vous devez spécifier au moins le nom de la
85    nouvelle table, les noms des colonnes et le type de données pour chacune des
86    colonnes. Par exemple&nbsp;:
87 <programlisting>
88 CREATE TABLE ma_premiere_table (
89     premiere_colonne text,
90     deuxieme_colonne integer
91 );
92 </programlisting>
93    Ceci crée une table nommée <literal>ma_premiere_table</literal> avec
94    deux colonnes. La première colonne est nommée
95    <literal>premiere_colonne</literal> et a un type de données
96    <type>text</type>&nbsp;; la seconde colonne porte le nom
97    <literal>deuxieme_colonne</literal> et le type <type>integer</type>.
98    Les noms de table et colonnes suivent la syntaxe d'identification expliquée
99    dans <xref linkend="sql-syntax-identifiers">.  Les noms des types sont souvent
100    aussi des identifiants mais il y a des exceptions. Notez que la liste des
101    colonnes est séparée par des virgules et entourée par des parenthèses.
102   </para>
103
104   <para>
105    Bien sur, l'exemple précédant est un peu tiré par les cheveux. Normalement,
106    on donne aux tables et aux colonnes des noms indiquant quels types de données
107    ils stockent. Alors voyons un exemple plus réaliste&nbsp;:
108 <programlisting>
109 CREATE TABLE produits (
110     no_produit integer,
111     nom text,
112     prix numeric
113 );
114 </programlisting>
115    (Le type <type>numeric</type> peut stocker des composants fractionnels
116    comme on pourrait s'y attendre de montants monétaires.)
117   </para>
118
119   <tip>
120    <para>
121     Quand vous créez des tables liées entre elles, il est prudent de choisir
122     des règles de nommage pour les tables et les colonnes. Par exemple, il
123     peut y avoir le choix d'utiliser des noms au pluriel ou au singulier
124     pour les noms de table, chaque choix ayant les faveurs d'un théoricien
125     ou d'un autre.
126    </para>
127   </tip>
128
129   <para>
130    Il y a une limite sur le nombre de colonnes qu'une table peut contenir.
131    Suivant le type de colonne, elle peut être entre 250 et 1600.
132    Par contre, définir une table avec un nombre de colonnes proche de ceux-ci
133    est très inhabituel et est souvent la preuve d'une conception douteuse.
134   </para>
135
136   <indexterm>
137    <primary>table</primary>
138    <secondary>suppression</secondary>
139   </indexterm>
140
141   <para>
142    Si vous n'avez plus besoin d'une table, vous pouvez la retirer en utilisant
143    la commande <command>DROP TABLE</command>. Par exemple&nbsp;:
144 <programlisting>
145 DROP TABLE ma_premiere_table;
146 DROP TABLE produits;
147 </programlisting>
148    Tenter de supprimer une table qui n'existe pas est une erreur.
149    Malgré cela, il est habituel dans des fichiers de scripts SQL d'essayer
150    de supprimer chaque table avant de la créer, tout en ignorant les messages
151    d'erreur.
152   </para>
153
154   <para>
155    Si vous avez besoin de modifier une table qui existe déjà, regardez <xref
156    linkend="ddl-alter"> plus loin dans ce chapitre.
157   </para>
158
159   <para>
160    Avec les outils dont nous avons déjà discuté, vous pouvez créer des tables
161    fonctionnelles. Le reste de ce chapitre est consacré à l'ajout de fonctionnalités,
162    à la définition de tables pour garantir l'intégrité des données, la sécurité
163    ou la facilité.  Si vous êtes impatients de remplir vos tables avec des données
164    tout de suite, vous pouvez sauter au <xref linkend="dml"> et lire le reste de
165    ce chapitre plus tard.
166   </para>
167  </sect1>
168
169  <sect1 id="ddl-default">
170   <title>Valeurs par défaut</title>
171
172   <indexterm zone="ddl-default">
173    <primary>valeur par défaut</primary>
174   </indexterm>
175
176   <para>
177    On peut attribuer une valeur par défaut à une colonne. Quant une nouvelle
178    rangée est créée et aucune valeur n'est spécifiée pour certaines de ses
179    colonnes, celles-ci sont remplies avec leur valeur par défaut respective.
180    Une commande de manipulation de données peut aussi demander explicitement
181    qu'une colonne soit mise à sa valeur par défaut sans avoir à connaître la
182    valeur en question. (Les détails sur les commandes de manipulation de données
183    sont dans <xref linkend="dml">.)
184   </para>
185
186   <para>
187    <indexterm><primary>valeur NULL</primary><secondary>valeur par défaut</secondary></indexterm>
188    Si aucune valeur par défaut n'est déclarée explicitement, la valeur
189    par défaut est la valeur NULL. Ceci est d'habitude cohérent car on
190    peut considérer que la valeur NULL représente des données inconnues.
191   </para>
192
193   <para>
194    Dans une définition de table, les valeurs par défaut sont listées après
195    le type de donnée de la colonne. Par exemple:
196 <programlisting>
197 CREATE TABLE products (
198     product_no integer,
199     name text,
200     price numeric <emphasis>DEFAULT 9.99</emphasis>
201 );
202 </programlisting>
203   </para>
204
205   <para>
206    La valeur par défaut peut être une expression, qui
207    sera évaluée à l'insertion de la valeur par défaut
208    (<emphasis>pas</emphasis> à la création de la table.) Un exemple habituel
209    est qu'une colonne de type timestamp pourrait avoir une valeur par défaut
210    <literal>now()</>, de façon à ce qu'il obtienne la valeur de l'heure au
211    moment de l'insertion. Un autre exemple habituel est la génération d'un
212    <quote>numéro de série</> pour chaque ligne.
213    Dans <productname>PostgreSQL</productname>, ceci se fait habituellement par
214    quelque chose comme
215 <programlisting>
216         CREATE TABLE products (
217         product_no integer <emphasis>DEFAULT nextval('products_product_no_seq')</emphasis>,
218         ...
219         );
220 </programlisting>
221    où la fonction <literal>nextval()</> fournit des valeurs successives à
222    partir d'une <firstterm>objet séquence</> (voir <xref
223    linkend="functions-sequence">). Cet arrangement est suffisamment commun
224    pour qu'il y ait un raccourci pour lui&nbsp;:
225 <programlisting>
226         CREATE TABLE products (
227         product_no <emphasis>SERIAL</emphasis>,
228         ...
229         );
230 </programlisting>
231    Le raccourci <literal>SERIAL</> est discuté plus tard dans <xref
232    linkend="datatype-serial">.
233   </para>
234  </sect1>
235
236  <sect1 id="ddl-constraints">
237   <title>Contraintes</title>
238
239   <indexterm zone="ddl-constraints">
240    <primary>contrainte</primary>
241   </indexterm>
242
243   <para>
244    Les types de données sont un moyen de limiter ce qui peut être stocké
245    dans une table. Pour beaucoup d'applications, par contre, la contrainte
246    qu'elles appliquent sont trop fortes. Par exemple, une colonne qui
247    contient le prix d'un produit ne devrait accepter que des valeurs
248    positives. Mais il n'y a pas de type de données qui n'acceptent que
249    des valeurs positives. Un autre problème est le fait de vouloir limiter
250    les données d'une colonne par rapport à d'autres colonnes ou rangées.
251    Par exemple, dans une table contenant des informations de produit, il
252    ne devrait y avoir qu'une rangée pour chaque numéro de produit.
253   </para>
254
255   <para>
256    Dans ce but, SQL vous permet de définir les contraintes sur les colonnes
257    et les tables. Les contraintes vous donnent autant de contrôle sur les
258    données de vos tables que vous désirez. Si un utilisateur tente de stocker
259    des données dans une colonne qui violerait un contrainte, une erreur est
260    soulevée. Ceci s'applique même si la valeur vient de la définition de la
261    valeur par défaut.
262   </para>
263
264   <sect2>
265    <title>Contraintes de Vérification</title>
266
267    <indexterm>
268     <primary>contrainte de vérification</primary>
269    </indexterm>
270
271    <indexterm>
272     <primary>contrainte</primary>
273     <secondary>vérification</secondary>
274    </indexterm>
275
276    <para>
277     Une contrainte de vérification est le type de contrainte le plus
278     générique qui soit. Elle vous permet de spécifier l'expression
279     d'une certaine colonne doit satisfaire une expression booléenne. Par
280     exemple, pour obliger des prix de produits positifs, on pourrait
281     utiliser&nbsp;:
282 <programlisting>
283 CREATE TABLE products (
284     product_no integer,
285     name text,
286     price numeric <emphasis>CHECK (price &gt; 0)</emphasis>
287 );
288 </programlisting>
289    </para>
290
291    <para>
292     Comme vous pouvez le voir, la définition de contrainte vient après
293     le type de données comme les définitions de valeur par défaut. Les
294     valeurs par défaut et les contraintes peuvent être données dans
295     n'importe quel ordre. Une contrainte de vérification s'utilise avec
296     le mot clé <literal>CHECK</literal> suivi d'une expression entre
297     parenthèses. L'expression de contrainte de vérification peut
298     impliquer la colonne ainsi contrainte, sinon la contrainte n'aurait
299     pas beaucoup de sens.
300    </para>
301
302    <indexterm>
303     <primary>contrainte</primary>
304     <secondary>nom</secondary>
305    </indexterm>
306
307    <para>
308     Vous pouvez aussi donner à la contrainte un nom diffèrent. Ceci
309     clarifie les messages d'erreur et vous permet de faire référence
310     à la contrainte lorsque vous avez besoin de la modifier.
311     La syntaxe est:
312 <programlisting>
313 CREATE TABLE products (
314     product_no integer,
315     name text,
316     price numeric <emphasis>CONSTRAINT positive_price</emphasis> CHECK (price &gt; 0)
317 );
318 </programlisting>
319     Alors, pour spécifier une contrainte nommée, utilisez le mot-clé
320     <literal>CONSTRAINT</literal> suivi d'un identifiant et de la
321     définition de contrainte. (Si vous ne donnez pas de nom à la contrainte,
322     le système choisira un nom pour vous.)
323    </para>
324
325    <para>
326     Une contrainte de vérification peut faire référence à plusieurs
327     colonnes. Admettons que vous souhaitez stocker un prix normal et un
328     prix de promotion et, être sur que le prix de
329     promotion soit inférieur au prix normal.
330 <programlisting>
331 CREATE TABLE products (
332     product_no integer,
333     name text,
334     price numeric CHECK (price &gt; 0),
335     discounted_price numeric CHECK (discounted_price &gt; 0),
336     <emphasis>CHECK (price &gt; discounted_price)</emphasis>
337 );
338 </programlisting>
339    </para>
340
341    <para>
342     Les deux premières contraintes devrait vous être familières. La troisième
343     utilise une nouvelle syntaxe. Elle n'est pas attachée à une colonne
344     particulière, elle apparaît comme un élément distinct dans
345     la liste de colonnes séparées par des virgules. Les définitions de
346     colonnes et ces définitions de contraintes peut être définies dans
347     un ordre quelconque.
348    </para>
349
350    <para>
351     On dit que les deux premières contraintes sont des contraintes de
352     colonnes tandis que la troisième est une contrainte de table parce
353     qu'elle est écrite séparément de toute définition de colonne tandis que
354     l'inverse n'est pas forcément possible car une contrainte de colonne est
355     supposé faire uniquement référence à la colonne à laquelle elle est
356     attachée. (<productname>PostgreSQL</productname> ne force pas cette règle
357     mais vous devriez la suivre si vous voulez que les définitions de votre
358     table fonctionnent avec d'autres systèmes de bases de données.)
359     L'exemple ci-dessus aurait pu s'écrire&nbsp;:
360 <programlisting>
361 CREATE TABLE products (
362     product_no integer,
363     name text,
364     price numeric,
365     CHECK (price &gt; 0),
366     discounted_price numeric,
367     CHECK (discounted_price &gt; 0),
368     CHECK (price &gt; discounted_price)
369 );
370 </programlisting>
371     ou même
372 <programlisting>
373 CREATE TABLE products (
374     product_no integer,
375     name text,
376     price numeric CHECK (price &gt; 0),
377     discounted_price numeric,
378     CHECK (discounted_price &gt; 0 AND price &gt; discounted_price)
379 );
380 </programlisting>
381     C'est une question de goût.
382    </para>
383
384    <para>
385     Des noms peuvent être affectés à des contraintes de table de la même
386     façon que les contraintes de colonne&nbsp;:
387      <programlisting>
388        CREATE TABLE products (
389        product_no integer,
390        name text,
391        price numeric,
392        CHECK (price &gt; 0),
393        discounted_price numeric,
394        CHECK (discounted_price &gt; 0),
395        <emphasis>CONSTRAINT valid_discount</> CHECK (price &gt; discounted_price)
396      );
397      </programlisting>
398    </para>
399
400    <indexterm>
401     <primary>valeur NULL</primary>
402     <secondary sortas="check constraints">avec contraintes de vérification</secondary>
403    </indexterm>
404
405    <para>
406     Il faut noter qu'une contrainte de vérification est satisfaite si
407     l'expression est évaluée à vrai ou la valeur NULL. Puisque la
408     plupart des expressions seront évaluées à la valeur NULL si l'un
409     des opérandes est NULL, elles n'empêchent pas les valeurs NULL
410     dans les colonnes contraintes. Pour s'assurer qu'une colonne ne
411     contient pas de valeurs NULL, la contrainte non-NULL décrite
412     dans la section suivante peut être utilisée.
413    </para>
414   </sect2>
415
416   <sect2>
417    <title>Contraintes Non NULL</title>
418
419    <indexterm>
420     <primary>contrainte non NULL</primary>
421    </indexterm>
422
423    <indexterm>
424     <primary>contrainte</primary>
425     <secondary>NOT NULL</secondary>
426    </indexterm>
427
428    <para>
429     Une contrainte non NULL dit simplement qu'une colonne ne peut
430     pas prendre la valeur NULL. Un exemple de syntaxe:
431 <programlisting>
432 CREATE TABLE products (
433     product_no integer <emphasis>NOT NULL</emphasis>,
434     name text <emphasis>NOT NULL</emphasis>,
435     price numeric
436 );
437 </programlisting>
438    </para>
439
440    <para>
441     Une contrainte non NULL est toujours écrite comme une contrainte de
442     colonne. Une contrainte non NULL est l'équivalente fonctionnelle de
443     créer une contrainte <literal>CHECK (<replaceable>nom_colonne</replaceable>
444     IS NOT NULL)</literal>, mais dans <productname>PostgreSQL</productname>,
445     créer une contrainte explicitement non NULL est plus efficace.
446     L'inconvénient est que vous ne pouvez pas donner de noms explicites
447     à des contraintes non NULL créées de cette manière.
448    </para>
449
450    <para>
451     Bien sur, une colonne peut avoir plus d'une contrainte. Écrivez juste
452     les contraintes les unes après les autres:
453 <programlisting>
454 CREATE TABLE products (
455     product_no integer NOT NULL,
456     name text NOT NULL,
457     price numeric NOT NULL CHECK (price &gt; 0)
458 );
459 </programlisting>
460     L'ordre n'importe pas. Il ne détermine pas dans quel ordre les contraintes
461     seront vérifiées.
462    </para>
463
464    <para>
465     La contrainte <literal>NOT NULL</literal> a un opposé; la contrainte
466     <literal>NULL</literal> . Ceci ne veut pas dire que la colonne doit
467     être NULL, ce qui serait inutile. À la place, ceci sélectionne le comportement
468     par défaut que la colonne doit être NULL. La contrainte <literal>NULL
469     </literal> n'est pas définie dans le standard SQL et ne devrait pas
470     être utilisé dans des applications portables. (Elle n'a été ajoutée
471     dans <productname>PostgreSQL</productname> que pour assurer la
472     compatibilité avec d'autres bases de données.) Certains utilisateurs
473     l'apprécient car elle facilite le fait d'activer une contrainte
474     dans un fichier de script. Par exemple, vous pourriez commencer avec:
475 <programlisting>
476 CREATE TABLE products (
477     product_no integer NULL,
478     name text NULL,
479     price numeric NULL
480 );
481 </programlisting>
482     et puis insérer le mot-clé <literal>NOT</literal> suivant vos besoins.
483    </para>
484
485    <tip>
486     <para>
487      Dans beaucoup de conceptions de bases de données, la majorité des
488      colonnes devraient être marquées non NULL.
489     </para>
490    </tip>
491   </sect2>
492
493   <sect2>
494    <title>Contraintes Uniques</title>
495
496    <indexterm>
497     <primary>contrainte unique</primary>
498    </indexterm>
499
500    <indexterm>
501     <primary>contrainte</primary>
502     <secondary>unique</secondary>
503    </indexterm>
504
505    <para>
506     Les contraintes uniques garantissent que les données contenues dans
507     la colonne ou un groupe de colonnes est unique par rapport à toutes
508     les rangées dans la table. La syntaxe est:
509 <programlisting>
510 CREATE TABLE products (
511     product_no integer <emphasis>UNIQUE</emphasis>,
512     name text,
513     price numeric
514 );
515 </programlisting>
516     est écrit comme contrainte de colonne et
517 <programlisting>
518 CREATE TABLE products (
519     product_no integer,
520     name text,
521     price numeric,
522     <emphasis>UNIQUE (product_no)</emphasis>
523 );
524 </programlisting>
525     est écrit comme contrainte de table.
526    </para>
527
528    <para>
529     Si une contrainte unique fait référence à un groupe de colonnes,
530     celles-ci sont listées séparées par des virgules:
531 <programlisting>
532 CREATE TABLE exemple (
533     a integer,
534     b integer,
535     c integer,
536     <emphasis>UNIQUE (a, c)</emphasis>
537 );
538 </programlisting>
539     Ceci spécifie que la combinaison de valeurs dans les colonnes indiquées
540     est unique pour toute la table bien qu'une seule des colonnes puisse ne
541     pas être (et habituellement n'est pas) unique.
542    </para>
543
544    <para>
545     Vous pouvez affecter votre propre nom pour une contrainte unique, de la
546     façon habituelle&nbsp;:
547 <programlisting>
548 CREATE TABLE products (
549     product_no integer <emphasis>CONSTRAINT must_be_different</emphasis> UNIQUE,
550     name text,
551     price numeric
552 );
553 </programlisting>
554    </para>
555
556    <indexterm>
557     <primary>valeur NULL</primary>
558     <secondary sortas="unique constraints">avec contrainte unique</secondary>
559    </indexterm>
560
561    <para>
562     En général, une contrainte unique est violée lorsqu'il y a au
563     moins deux rangées dans une table ou la valeur de toutes les
564     colonnes inclus dans la contrainte sont
565     égales. Par contre, les valeurs NULL ne sont pas assimilées
566     à une égalités dans cette comparaison. Ceci veut dire qu'il est possible
567     de stocker un nombre illimité de rangées qui contiennent une
568     valeur NULL dans au moins l'une des colonnes contraintes. Ce
569     comportement est conforme au standard SQL mais nous avons
570     été informé que d'autres bases SQL ne suivent pas cette règle. Alors,
571     soyez prudents en développant des applications qui sont prévues
572     pour être portable.
573    </para>
574   </sect2>
575
576   <sect2>
577    <title>Clés Primaires</title>
578
579    <indexterm>
580     <primary>clé primaire</primary>
581    </indexterm>
582
583    <indexterm>
584     <primary>contrainte</primary>
585     <secondary>clé primaire</secondary>
586    </indexterm>
587
588    <para>
589     Techniquement, une contrainte de clé primaire est tout
590     simplement une combinaison d'une contrainte unique et
591     d'une contrainte non NULL. Donc, les définitions de
592     tables suivantes accepteront les mêmes données:
593 <programlisting>
594 CREATE TABLE products (
595     product_no integer UNIQUE NOT NULL,
596     name text,
597     price numeric
598 );
599 </programlisting>
600
601 <programlisting>
602 CREATE TABLE products (
603     product_no integer <emphasis>PRIMARY KEY</emphasis>,
604     name text,
605     price numeric
606 );
607 </programlisting>
608    </para>
609
610    <para>
611     Les clés primaires peuvent contraindre sur plus d'une colonne; la
612     syntaxe est semblable aux contraintes uniques:
613 <programlisting>
614 CREATE TABLE exemple (
615     a integer,
616     b integer,
617     c integer,
618     <emphasis>PRIMARY KEY (a, c)</emphasis>
619 );
620 </programlisting>
621    </para>
622
623    <para>
624     Une clé primaire indique qu'une colonne ou un groupe de colonnes peuvent
625     être utilisés comme identifiant unique pour les rangées de la table. (Ceci
626     est une conséquence directe de la définition d'une clé primaire. Notez
627     qu'une contrainte unique ne donne pas par elle-même, un identifiant unique
628     car elle n'exclut pas les valeurs NULL.) Ceci est pratique à la fois
629     pour des raisons de documentation et pour les applications clientes. Par
630     exemple, une application graphique qui permet de modifier les valeurs de
631     rangées a probablement besoin de connaître la clé primaire d'une table pour
632     pouvoir identifier les rangées de manière unique correctement.
633    </para>
634
635    <para>
636     Une table peut avoir au mieux une clé primaire (tandis qu'elle peut
637     avoir plusieurs contraintes uniques et non NULL). La théorie des
638     bases de données relationnelles dit que chaque table doit avoir
639     une clé primaire. Cette règle n'est pas appliquée par
640     <productname>PostgreSQL</productname>, mais il vaut mieux la respecter
641     autant que possible.
642    </para>
643   </sect2>
644
645   <sect2 id="ddl-constraints-fk">
646    <title>Clés Étrangères</title>
647
648    <indexterm>
649     <primary>clé étrangère</primary>
650    </indexterm>
651
652    <indexterm>
653     <primary>contrainte</primary>
654     <secondary>clé étrangère</secondary>
655    </indexterm>
656
657    <indexterm>
658     <primary>intégrité référentielle</primary>
659    </indexterm>
660
661    <para>
662     Une contrainte de clé étrangère stipule que les valeurs dans cette
663     colonne (ou un groupe de colonnes) doit correspondre aux valeurs
664     apparaissant dans des rangées d'une autre table.
665     Nous disons que ceci maintient l'<firstterm>intégrité
666     référentielle</firstterm> entre deux tables liées.
667    </para>
668
669    <para>
670     Disons que vous avez la table de produits que nous avons déjà utilisé plusieurs fois:
671 <programlisting>
672 CREATE TABLE products (
673     product_no integer PRIMARY KEY,
674     name text,
675     price numeric
676 );
677 </programlisting>
678     Disons aussi que vous avez une table stockant les commandes de
679     ces produits. Nous voulons aussi nous assurer que la table des
680     commandes ne contienne que des commandes concernant des produits
681     qui existent réellement. Alors, nous définissons une contrainte
682     de clé étrangère dans la table des commandes qui référence la
683     table produit:
684 <programlisting>
685 CREATE TABLE orders (
686     order_id integer PRIMARY KEY,
687     product_no integer <emphasis>REFERENCES products (product_no)</emphasis>,
688     quantity integer
689 );
690 </programlisting>
691     Maintenant, il est impossible de créer des commandes avec une entrée
692     <structfield>product_no</structfield> qui n'apparaît pas dans la table products.
693    </para>
694
695    <para>
696     Nous disons que, dans cette situation, la table de commandes est la table
697     <firstterm>référente</firstterm> et la table products est la table
698     <firstterm>référée</firstterm>.  De la même façon, il y a des colonnes
699     référentes et des colonnes référées.
700    </para>
701
702    <para>
703     On peut aussi raccourcir la commande ci-dessus en
704 <programlisting>
705 CREATE TABLE orders (
706     order_id integer PRIMARY KEY,
707     product_no integer <emphasis>REFERENCES products</emphasis>,
708     quantity integer
709 );
710 </programlisting>
711     parce qu'en l'absence d'une liste de colonnes, la clé primaire de la
712     table référente est utilisée comme colonne référée.
713    </para>
714
715    <para>
716     Une clé étrangère peut aussi contraindre et référencer un groupe de colonnes.
717     Comme d'habitude, il faut aussi l'écrire sous forme de contrainte de table.
718     Voici un exemple de syntaxe:
719 <programlisting>
720 CREATE TABLE t1 (
721   a integer PRIMARY KEY,
722   b integer,
723   c integer,
724   <emphasis>FOREIGN KEY (b, c) REFERENCES other_table (c1, c2)</emphasis>
725 );
726 </programlisting>
727     Bien sûr, le nombre et le type des colonnes contraintes doivent correspondre
728     au nombre et au type des colonnes référées.
729    </para>
730
731    <para>
732         Vous pouvez affecter votre propre nom pour une contrainte de clé
733         étrangère de la façon habituelle.
734    </para>
735
736    <para>
737     Une table peut contenir plus d'une contrainte de clé étrangère. Ceci peut
738     être utilisé pour implémenter des relations n à n entre tables. Disons
739     que vous avez des tables contenant des produits et des commandes mais vous
740     voulez maintenant autoriser une commande qui contient peut-être beaucoup
741     de produits (ce que la structure ci-dessus ne permet pas). On pourrait
742     utiliser cette structure de table:
743 <programlisting>
744 CREATE TABLE products (
745     product_no integer PRIMARY KEY,
746     name text,
747     price numeric
748 );
749
750 CREATE TABLE orders (
751     order_id integer PRIMARY KEY,
752     shipping_address text,
753     ...
754 );
755
756 CREATE TABLE order_items (
757     product_no integer REFERENCES products,
758     order_id integer REFERENCES orders,
759     quantity integer,
760     PRIMARY KEY (product_no, order_id)
761 );
762 </programlisting>
763     Notez aussi que la clé primaire chevauche les clés étrangères dans la dernière table.
764    </para>
765
766    <indexterm>
767     <primary>CASCADE</primary>
768     <secondary>action clé étrangère</secondary>
769    </indexterm>
770
771    <indexterm>
772     <primary>RESTRICT</primary>
773     <secondary>action clé étrangère</secondary>
774    </indexterm>
775
776    <para>
777     Nous savons que les clés étrangères n'autorisent pas la création
778     de commandes qui ne sont pas liés à un produit. Et si un produit
779     est retiré après qu'une commande qui y réfère soit créée&nbsp;? SQL vous
780     permet aussi de le gérer. Intuitivement, nous avons plusieurs options&nbsp;:
781     <itemizedlist spacing="compact">
782      <listitem><para>Interdire d'effacer un produit référé</para></listitem>
783      <listitem><para>Effacer aussi les commandes</para></listitem>
784      <listitem><para>Autre chose ?</para></listitem>
785     </itemizedlist>
786    </para>
787
788    <para>
789     Pour illustrer ce cas, implémentons la politique suivante sur
790     l'exemple de relations n à n évoquée plus haut: Quand quelqu'un
791     veut retirer un produit qui est encore référencé par un ordre
792     (via <literal>ordre_items</literal>), on l'interdit. Si quelqu'un
793     retire une commande, les éléments de l'ordre sont aussi retirés.
794 <programlisting>
795 CREATE TABLE products (
796     product_no integer PRIMARY KEY,
797     name text,
798     price numeric
799 );
800
801 CREATE TABLE orders (
802     order_id integer PRIMARY KEY,
803     shipping_address text,
804     ...
805 );
806
807 CREATE TABLE order_items (
808     product_no integer REFERENCES products <emphasis>ON DELETE RESTRICT</emphasis>,
809     order_id integer REFERENCES orders <emphasis>ON DELETE CASCADE</emphasis>,
810     quantity integer,
811     PRIMARY KEY (product_no, order_id)
812 );
813 </programlisting>
814    </para>
815
816    <para>
817      Restreindre les suppressions et supprimer en cascade sont les deux
818      options les plus communes. <literal>RESTRICT</literal> empêche la
819      suppression d'une ligne référencée. <literal>NO ACTION</literal> signifie
820      que si des lignes de références existent lors de la vérification de la
821      contrainte, une erreur est levée&nbsp; ceci est le comportement par
822      défaut si vous n'avez rien spécifié. (La différence essentielle entre
823      ces deux choix est que <literal>NO ACTION</literal> autorise la
824      déférence de la vérification plus tard dans la transaction alors que   
825      <literal>RESTRICT</literal> ne le permet pas.) <literal>CASCADE</>
826      spécifie que, quand une ligne référencée est supprimée, les lignes la
827      référençant devraient aussi être automatiquement supprimées. Il existe
828      deux autres options&nbsp;: <literal>SET NULL</literal> et <literal>SET
829      DEFAULT</literal>. Celles-ci font que les colonnes de références soient
830      initialisées à NULL ou à leur valeur par défaut, respectivement quand la
831      ligne référencée est supprimée. Notez qu'elles ne vous excusent pas
832      d'observer les contraintes. Par exemple, si une action spécifie
833      <literal>SET DEFAULT</literal> mais que la valeur par défaut ne
834      satisferait pas la clé étrangère, l'opération échouera.
835    </para>
836
837    <para>
838     Sur le même principe que <literal>ON DELETE</literal>, il y a aussi
839     <literal>ON UPDATE</literal> qui est évoqué lorsqu'une colonne référencée
840     est modifiée (mise à jour). Les actions possibles sont les mêmes.
841    </para>
842
843    <para>
844     Il y a plus d'informations sur la mise à jour et la suppression de données dans <xref
845     linkend="dml">.
846    </para>
847
848    <para>
849     Enfin, nous devrions dire que la clé étrangère peut référencer
850     des colonnes qui sont une clé primaire ou forment une contrainte unique.
851     Si la clé étrangère référence une contrainte unique, il y a des
852     possibilités supplémentaires selon que l'on souhaite faire correspondre
853     les valeurs NULL.
854     Ceux-ci sont expliqués dans la documentation de référence pour
855     <xref linkend="sql-createtable" endterm="sql-createtable-title">.
856    </para>
857   </sect2>
858  </sect1>
859
860  <sect1 id="ddl-system-columns">
861    <title>Colonnes Systèmes</title>
862    
863    <para>
864      Chaque table a plusieurs <firstterm>colonnes systèmes</> qui sont
865      implicitement définis par le système. De ce fait, ces noms ne peuvent
866      être utilisés comme noms de colonnes définis par l'utilisateur. (Notez
867      que ces restrictions sont différentes si le nom est un mot-clé ou
868      pas&nbsp;; citez un nom ne vous permettra pas d'échapper à ces
869      restrictions.) Vous n'avez pas vraiment besoin de vous préoccuper de
870      ces colonnes, simplement savoir qu'elles existent.
871    </para>
872  
873  <indexterm>
874    <primary>colonne</primary>
875    <secondary>colonne système</secondary>
876  </indexterm>
877  
878  <variablelist>
879    <varlistentry>
880      <term><structfield>oid</></term>
881      <listitem>
882        <para>
883         <indexterm>
884          <primary>OID</primary>
885          <secondary>colonne</secondary>
886         </indexterm>
887         L'identifiant objet (<foreignphrase>object ID</>) d'une rangée. Ceci
888         est un numéro de série qui est automatiquement rajouté par
889         <productname>PostgreSQL</productname> à toutes les rangées de tables
890         (sauf si la table a été créée avec <literal>WITHOUT OIDS</literal>,
891         auquel cas cette colonne n'est pas présente). Cette colonne est de
892         type oid (même nom que la colonne)&nbsp;; voir la <xref
893         linkend="datatype-oid"> pour plus d'informations sur ce type.
894        </para>
895      </listitem>
896    </varlistentry>
897    
898    <varlistentry>
899      <term><structfield>tableoid</></term>
900    <listitem>
901      <indexterm>
902        <primary>tableoid</primary>
903      </indexterm>
904      
905      <para>
906         L' OID de la table contenant cette rangée. Cette colonne est
907         particulièrement utile pour les requêtes qui sélectionnent de
908         hiérarchies héritées, puisque sans elle, il est difficile de dire de
909         quelle table vient une rangée. <structfield>tableoid</structfield>
910         peut être joint à la colonne <structfield>oid</structfield> de
911         <structname>pg_class</structname> pour obtenir le nom de la table.
912      </para>
913    </listitem>
914  </varlistentry>
915  
916  <varlistentry>
917    <term><structfield>xmin</></term>
918  <listitem>
919    <indexterm>
920      <primary>xmin</primary>
921    </indexterm>
922    
923    <para>
924       L'identité (transaction ID) de la transaction d'insertion de cette
925       version de la rangée. (Une version de rangée est un état individuel
926       d'une rangée; chaque mise à jour d'une rangée crée une nouvelle
927       version de rangée pour la même rangée logique.)
928    </para>
929  </listitem>
930 </varlistentry>
931
932 <varlistentry>
933   <term><structfield>cmin</></term>
934 <listitem>
935   <indexterm>
936     <primary>cmin</primary>
937   </indexterm>
938  
939   <para>
940      L'identifiant de commande (à partir de zéro) au sein de la transaction
941      d'insertion.
942   </para>
943 </listitem>
944 </varlistentry>
945
946 <varlistentry>
947   <term><structfield>xmax</></term>
948 <listitem>
949   <indexterm>
950     <primary>xmax</primary>
951   </indexterm>
952  
953   <para>
954      L'identité (transaction ID) de la transaction de suppression, ou zéro
955      pour une version de rangée non effacée. Il est possible pour cette
956      colonne d'être non NULL dans une version de rangée visible: Ceci
957      indique normalement que la transaction de suppression n'a pas été
958      effectuée, ou qu'une tentative de suppression a été annulée.
959   </para>
960 </listitem>
961 </varlistentry>
962
963 <varlistentry>
964   <term><structfield>cmax</></term>
965 <listitem>
966   <indexterm>
967     <primary>cmax</primary>
968   </indexterm>
969  
970   <para>
971      L'identifiant de commande au sein d'une transaction de suppression, ou
972      zéro.
973   </para>
974 </listitem>
975 </varlistentry>
976
977 <varlistentry>
978   <term><structfield>ctid</></term>
979 <listitem>
980   <indexterm>
981     <primary>ctid</primary>
982   </indexterm>
983  
984   <para>
985      La localisation physique de la version de rangée au sein de sa table.
986      Notez que bien que le <structfield>ctid</structfield> peut être utilisé
987      pour trouver la version de rangée très rapidement, le
988      <structfield>ctid</structfield>  d'une rangée changera chaque fois
989      qu'il est mis à jour ou déplacé par la commande <command>VACUUM FULL</>.
990      Donc, <structfield>ctid</structfield> est inutile en tant
991      qu'identifiant de rangée à long terme. L'OID, ou encore mieux un numéro
992      de série définie par l'utilisateur, devrait être utilisé pour
993      identifier des rangées logiques.
994 </para>
995 </listitem>
996 </varlistentry>
997 </variablelist>
998
999 <para>
1000    Les OID sont des nombres de 32 bits et sont attribués d'un seul
1001    compteur. Dans une base de données grande ou vieille, il est possible que
1002    le compteur boucle sur lui-même. Donc il est peu pertinent de partir du
1003    principe que les OID sont uniques, sauf si vous prenez les précautions
1004    nécessaires. Si vous avez besoin d'identifier les lignes dans une table,
1005    l'utilisation d'un générateur de séquence est fortement recommandée.
1006    Néanmoins, les OID peuvent aussi être utilisés à condition que quelques
1007    précautions soient prises&nbsp;:
1008  
1009   <itemizedlist>
1010     <listitem>
1011       <para>
1012         Une contrainte unique devrait être créée sur la colonne OID de chaque
1013         table pour laquelle l'OID sera utilisée pour identifier les lignes.
1014       </para>
1015     </listitem>
1016     <listitem>
1017       <para>
1018         Les OID ne devraient jamais être supposés uniques entre tables&nbsp;;
1019         utilisez la combinaison de <structfield>tableoid</> et de l'OID de la
1020         ligne si vous avez besoin d'un identifiant sur la base complète.
1021       </para>
1022     </listitem>
1023     <listitem>
1024       <para>
1025       Les tables en question devraient être créées en utilisant <literal>WITH
1026       OIDS</literal> pour s'assurer de la compatibilité avec les versions
1027       futures de <productname>PostgreSQL</productname>. Il est planifié que
1028       <literal>WITHOUT OIDS</> deviendra l'option par défaut.
1029       </para>
1030     </listitem>
1031   </itemizedlist>
1032 </para>
1033
1034   <para>
1035     Les identifiants de transaction sont aussi des nombres de 32 bits. Dans
1036     une base de données de longue vie, il est possible pour les ID de
1037     transaction de boucler sur eux-mêmes. Ceci n'est pas un problème fatal
1038     avec des procédures de maintenance appropriées; voir le <xref
1039     linkend="maintenance"> pour les détails. Il est, par contre, imprudent
1040     de dépendre de l'aspect unique des ID de transaction à long terme (plus
1041     d'un milliard de transactions).
1042   </para>
1043  
1044   <para>
1045      Les identifiants de commande sont aussi des nombres de 32 bits. Ceci
1046      crée une limite dure de 2<superscript>32</> (4 milliards) commandes
1047      <acronym>SQL</acronym> au sein d'une seule transaction. En pratique,
1048      cette limite n'est pas un problème &mdash; notez que la limite est sur
1049      le nombre de commandes <acronym>SQL</acronym>, pas le nombre de rangées
1050      traitées.
1051   </para>
1052 </sect1>
1053
1054  <sect1 id="ddl-inherit">
1055   <title>Héritage</title>
1056
1057   <remark>Cette section doit être repensée. Une partie de cette
1058   information doit aller dans les chapitres suivants.</remark>
1059
1060   <para>
1061    Créons deux tables. La table capitales contient les capitales
1062    d'état qui sont aussi des villes. Naturellement, la table
1063    capitales doit hériter de villes.
1064
1065 <programlisting>
1066 CREATE TABLE villes (
1067     nom             text,
1068     population      float,
1069     altitude        int     -- (in ft)
1070 );
1071
1072 CREATE TABLE capitales (
1073     etat           char(2)
1074 ) INHERITS (villes);
1075 </programlisting>
1076
1077    Dans ce cas, une rangée de capitales <firstterm>hérite</firstterm> de tous
1078    les attributs  (nom,  population, et altitude) de son parent
1079    villes. Les capitales d'état ont un attribut supplémentaire state qui
1080    donne leur état. Dans <productname>PostgreSQL</productname>,
1081    une table peut hériter de zéro tables ou plus et une requête peut référencer
1082    toutes les rangées d'une table ou toutes les rangées d'une table plus celles de
1083    ses descendants.
1084
1085    <note>
1086     <para>
1087      La hiérarchie d'héritage est en fait un graphe acyclique dirigé.
1088     </para>
1089    </note>
1090   </para>
1091
1092   <para>
1093     Par exemple, la requête suivante cherche les noms de toutes les villes,
1094     y compris les capitales d'état, qui se situent à une altitude de plus
1095     de 500 pieds:
1096
1097 <programlisting>
1098 SELECT nom, altitude
1099     FROM villes
1100     WHERE altitude &gt; 500;
1101 </programlisting>
1102
1103    qui retourne:
1104
1105 <programlisting>
1106    nom     | altitude
1107 -----------+----------
1108  Las Vegas |     2174
1109  Mariposa  |     1953
1110  Madison   |      845
1111 </programlisting>
1112   </para>
1113
1114   <para>
1115     D'un autre côté, la requête suivante cherche toutes
1116     les villes qui ne sont pas des capitales d'état et
1117     qui sont situés à une altitude de plus de 500 pieds:
1118
1119 <programlisting>
1120 SELECT nom, altitude
1121     FROM ONLY villes
1122     WHERE altitude &gt; 500;
1123
1124    nom     | altitude
1125 -----------+----------
1126  Las Vegas |     2174
1127  Mariposa  |     1953
1128 </programlisting>         
1129   </para>
1130
1131   <para>
1132    Ici, le <quote>ONLY</quote> avant villes indique que la requête ne devrait
1133    être lancée que sur villes et non les tables en dessous de villes dans la
1134    hiérarchie d'héritage.  Beaucoup des commandes donc nous avons déjà discuté
1135    -- <command>SELECT</command>, <command>UPDATE</command> et <command>DELETE</command> --
1136    gèrent cette syntaxe <quote>ONLY</quote>.
1137   </para>
1138
1139   <note>
1140     <title>Obsolète</title>
1141     <para>
1142      Dans les précédentes versions de <productname>PostgreSQL</productname>,
1143      le comportement par défaut était de ne pas inclure les tables enfants
1144      dans les requêtes. Il a été prouvé que cela amenait facilement des
1145      erreurs et est aussi en violation du standard SQL:1999. Avec l'ancienne
1146</