root/traduc/trunk/postgresql/cube.xml

Revision 1019, 13.3 kB (checked in by sas, 7 months ago)

close #280

  • Property svn:keywords set to Date Author Revision
Line 
1 <?xml version="1.0" encoding="ISO-8859-15"?>
2 <!-- Dernière modification
3      le       $Date$
4      par      $Author$
5      révision $Revision$ -->
6
7 <sect1 id="cube">
8  <title>cube</title>
9
10  <indexterm zone="cube">
11   <primary>cube</primary>
12  </indexterm>
13
14  <para>
15   Ce module code le type de données <type>cube</type> pour
16   représenter des cubes à plusieurs dimensions.
17  </para>
18
19  <sect2>
20   <title>Syntaxe</title>
21
22   <para>
23    Ce qui suit est un ensemble de représentations externes valides pour le
24    type <type>cube</type>. <replaceable>x</replaceable>,
25    <replaceable>y</replaceable>... sont des nombres en virgule
26    flottante&nbsp;:
27   </para>
28
29   <table>
30    <title>Représentations externes d'un cube</title>
31    <tgroup cols="2">
32     <tbody>
33      <row>
34       <entry><literal><replaceable>x</replaceable></literal></entry>
35       <entry>point uni-dimensionnel (ou interval unidimensionnel de longueur
36       nulle)
37       </entry>
38      </row>
39      <row>
40       <entry><literal>(<replaceable>x</replaceable>)</literal></entry>
41       <entry>Identique à ci-dessus</entry>
42      </row>
43      <row>
44       <entry><literal><replaceable>x1</replaceable>,<replaceable>x2</replaceable>,...,<replaceable>xn</replaceable></literal></entry>
45       <entry>Un point dans un espace à n dimensions, représenté en interne
46        comme un cube de volume nul
47       </entry>
48      </row>
49      <row>
50       <entry><literal>(<replaceable>x1</replaceable>,<replaceable>x2</replaceable>,...,<replaceable>xn</replaceable>)</literal></entry>
51       <entry>Identique à ci-dessus</entry>
52      </row>
53      <row>
54       <entry><literal>(<replaceable>x</replaceable>),(<replaceable>y</replaceable>)</literal></entry>
55       <entry>Interval uni-dimensionnel débutant à
56       <replaceable>x</replaceable> et finissant à
57       <replaceable>y</replaceable> ou vice-versa&nbsp;; l'ordre n'importe pas
58       </entry>
59      </row>
60      <row>
61       <entry><literal>[(<replaceable>x</replaceable>),(<replaceable>y</replaceable>)]</literal></entry>
62       <entry>Identique à ci-dessus</entry>
63      </row>
64      <row>
65       <entry><literal>(<replaceable>x1</replaceable>,...,<replaceable>xn</replaceable>),(<replaceable>y1</replaceable>,...,<replaceable>yn</replaceable>)</literal></entry>
66       <entry>Cube à n dimensions représenté par paires de coins diagonalement opposés
67       </entry>
68      </row>
69      <row>
70       <entry><literal>[(<replaceable>x1</replaceable>,...,<replaceable>xn</replaceable>),(<replaceable>y1</replaceable>,...,<replaceable>yn</replaceable>)]</literal></entry>
71       <entry>Identique à ci-dessus</entry>
72      </row>
73     </tbody>
74    </tgroup>
75   </table>
76
77   <para>
78    L'ordre de saisie des coins opposés d'un cube n'a aucune importance.
79    Les fonctions <type>cube</type> s'occupent de la bascule
80    nécessaire à l'obtention d'une représentation uniforme
81    <quote>bas gauche, haut droit</quote>.
82   </para>
83
84   <para>
85    Les espaces sont ignorées,
86    <literal>[(<replaceable>x</replaceable>),(<replaceable>y</replaceable>)]</literal>
87    est donc identique à
88    <literal>[ ( <replaceable>x</replaceable> ), ( <replaceable>y</replaceable> ) ]</literal>.
89   </para>
90  </sect2>
91
92  <sect2>
93   <title>Précision</title>
94
95   <para>
96    Les valeurs sont enregistrées en interne sous la forme de nombres en
97    virgule flottante. Cela signifie que les nombres avec plus de 16 chiffres
98    significatifs sont tronqués.
99   </para>
100  </sect2>
101
102  <sect2>
103   <title>Utilisation</title>
104
105   <para>
106    Le module <filename>cube</filename> inclut une classe d'opérateur pour
107    index GiST pour les valeurs de type <type>cube</type>. Les opérateurs
108    supportés par la classe d'opérateur GiST incluent&nbsp;:
109   </para>
110
111   <itemizedlist>
112    <listitem>
113     <programlisting>
114 a = b                  Identique à
115     </programlisting>
116     <para>
117      Les cubes a et b sont identiques.
118     </para>
119    </listitem>
120    <listitem>
121     <programlisting>
122 a &amp;&amp; b                Recouvre
123     </programlisting>
124     <para>
125      Les cubes a et b se chevauchent.
126     </para>
127    </listitem>
128    <listitem>
129     <programlisting>
130 a @&gt; b                Contient
131     </programlisting>
132     <para>
133      Le cube a contient le cube b.
134     </para>
135    </listitem>
136    <listitem>
137   <programlisting>
138 a &lt;@ b                Contenu dans
139   </programlisting>
140     <para>
141      Le cube a est contenu dans le cube b.
142     </para>
143    </listitem>
144   </itemizedlist>
145
146   <para>
147     (Avant PostgreSQL 8.2, les opérateurs de contenance @&gt; et &lt;@ étaient
148    appelés respectivement @ et ~. Ces noms sont toujours disponibles mais sont
149    déclarés obsolètes et seront supprimés un jour. Les anciens noms
150    sont inversés par rapport à la convention suivie par les types de données
151    géométriques&nbsp;!)
152   </para>
153
154   <para>
155    Les opérateurs du standard B-tree sont aussi fournis, par exemple&nbsp;:
156
157   <programlisting>
158 [a, b] &lt; [c, d]                Plus petit que
159 [a, b] &gt; [c, d]                Plus grand que
160   </programlisting>
161
162    Ces opérateurs n'ont vraiment de sens que pour le tri.
163    Ces opérateurs comparent en premier (a) à (c) et, s'ils sont égaux,
164    comparent (b) à (d). Cela fait un bon tri dans la plupart des cas, ce qui
165    permet d'utiliser ORDER BY avec ce type.
166   </para>
167
168   <para>
169    Les fonctions suivantes sont disponibles&nbsp;:
170   </para>
171
172   <table>
173    <title>Fonctions cube</title>
174    <tgroup cols="2">
175     <tbody>
176      <row>
177       <entry><literal>cube(float8) returns cube</literal></entry>
178       <entry>Crée un cube uni-dimensionnel de coordonnées identiques.
179        <literal>cube(1) == '(1)'</literal>
180       </entry>
181      </row>
182
183      <row>
184       <entry><literal>cube(float8, float8) returns cube</literal></entry>
185       <entry>Crée un cube uni-dimensionnel.
186        <literal>cube(1,2) == '(1),(2)'</literal>
187       </entry>
188      </row>
189
190      <row>
191       <entry><literal>cube(float8[]) returns cube</literal></entry>
192       <entry>Crée un cube de volume nul en utilisant les coordonnées
193        définies par le tableau.
194        <literal>cube(ARRAY[1,2]) == '(1,2)'</literal>
195       </entry>
196      </row>
197
198      <row>
199       <entry><literal>cube(float8[], float8[]) returns cube</literal></entry>
200       <entry>Crée un cube avec les coordonnées haut droit et
201        bas gauche définies par deux tableaux de flottants, obligatoirement
202        de même taille.
203        <literal>cube('{1,2}'::float[], '{3,4}'::float[]) == '(1,2),(3,4)'
204        </literal>
205       </entry>
206      </row>
207
208      <row>
209       <entry><literal>cube(cube, float8) returns cube</literal></entry>
210       <entry>Construit un nouveau cube en ajoutant une dimension à un
211        cube existant avec les mêmes valeurs pour les deux parties de la
212        nouvelle coordonnée. Ceci est utile pour construire des cubes pièce
213        par pièce à partir de valeurs calculées.
214        <literal>cube('(1)',2) == '(1,2),(1,2)'</literal>
215       </entry>
216      </row>
217
218      <row>
219       <entry><literal>cube(cube, float8, float8) returns cube</literal></entry>
220       <entry>Crée un nouveau cube en ajoutant une dimension à un cube
221        existant. Ceci est utile pour construire des cubes pièce par pièce à partir
222        de valeurs calculées.
223        <literal>cube('(1,2)',3,4) == '(1,3),(2,4)'</literal>
224       </entry>
225      </row>
226
227      <row>
228       <entry><literal>cube_dim(cube) returns int</literal></entry>
229       <entry>Renvoie le nombre de dimensions du cube.
230       </entry>
231      </row>
232
233      <row>
234       <entry><literal>cube_ll_coord(cube, int) returns double </literal></entry>
235       <entry>Renvoie la n-ième coordonnée pour le coin en bas à
236        gauche d'un cube.
237       </entry>
238      </row>
239
240     <row>
241       <entry><literal>cube_ur_coord(cube, int) returns double
242       </literal></entry>
243       <entry>Renvoie la n-ième coordonnée pour le coin en haut à droite d'un
244        cube.
245       </entry>
246      </row>
247
248      <row>
249       <entry><literal>cube_is_point(cube) returns bool</literal></entry>
250       <entry>Renvoie true si un cube est aussi un point, c'est-à-dire si
251        les deux coins de définition sont identiques.</entry>
252      </row>
253
254      <row>
255       <entry><literal>cube_distance(cube, cube) returns double</literal></entry>
256       <entry>Renvoie la distance entre deux cubes. Si les deux cubes sont des
257        points, il s'agit de la fonction de distance habituelle.
258       </entry>
259      </row>
260
261      <row>
262       <entry><literal>cube_subset(cube, int[]) returns cube
263       </literal></entry>
264       <entry>Crée un nouveau cube à partir d'un cube existant en utilisant une
265        liste d'index de dimension d'un tableau. Peut être utilisé pour
266        trouver les coordonnées bas gauche et haut droit d'une
267        dimension, par exemple&nbsp;:
268        <literal>cube_subset(cube('(1,3,5),(6,7,8)'), ARRAY[2]) = '(3),(7)'</literal>.
269        Peut aussi être utilisé pour supprimer des dimensions, ou pour les
270        réordonner, par exemple&nbsp;:
271        <literal>cube_subset(cube('(1,3,5),(6,7,8)'), ARRAY[3,2,1,1]) = '(5, 3,
272        1, 1),(8, 7, 6, 6)'</literal>.
273       </entry>
274      </row>
275
276      <row>
277       <entry><literal>cube_union(cube, cube) returns cube</literal></entry>
278       <entry>Réalise l'union de deux cubes.
279       </entry>
280      </row>
281
282      <row>
283       <entry><literal>cube_inter(cube, cube) returns cube</literal></entry>
284       <entry>Réalise l'intersection de deux cubes.
285       </entry>
286      </row>
287
288      <row>
289       <entry><literal>cube_enlarge(cube c, double r, int n) returns cube</literal></entry>
290       <entry>Augmente la taille d'un cube suivant un rayon précisé
291        dans au moins n dimensions. Si le rayon est négatif, la boîte est
292        diminuée. C'est utile pour créer des boîtes limitantes autour d'un
293        point dans le but de rechercher les points voisins. Toutes les
294        dimensions définies sont modifiées de la valeur du rayon r.
295        Les coordonnées bas gauche sont décrémentées de r et les coordonnées
296        haut droit sont incrémentées de r. Si une coordonnée bas gauche est
297        incrémentée au-delà de la valeur correspondante haut droit (ce qui ne
298        peut arriver que lorsque r &lt; 0), les deux coordonnées sont
299        positionnées à leur moyenne.  Si n est plus grand
300        que le nombre de dimensions définies et que le cube est augmenté
301        (r >= 0), alors 0 est utilisé comme base des coordonnées
302        supplémentaires.
303       </entry>
304      </row>
305     </tbody>
306    </tgroup>
307   </table>
308  </sect2>
309
310  <sect2>
311   <title>Par défaut</title>
312
313   <para>
314    Le développeur pense que l'union&nbsp;:
315   </para>
316 <programlisting>
317 select cube_union('(0,5,2),(2,3,1)', '0');
318 cube_union
319 -------------------
320 (0, 0, 0),(2, 5, 2)
321 (1 row)
322 </programlisting>
323
324    <para>
325     n'est pas en contradiction avec le bon sens. Pas plus que l'intersection
326    </para>
327
328 <programlisting>
329 select cube_inter('(0,-1),(1,1)', '(-2),(2)');
330 cube_inter
331 -------------
332 (0, 0),(1, 0)
333 (1 row)
334 </programlisting>
335
336    <para>
337     Dans toutes les opérations binaires sur des boîtes de tailles différentes,
338     l'auteur suppose que la plus petite est une projection cartésienne,
339     c'est-à-dire qu'il y a des zéros à la place des coordonnées omises dans la représentation
340     sous forme de chaîne. Les exemples ci-dessus sont équivalents à&nbsp;:
341    </para>
342
343 <programlisting>
344 cube_union('(0,5,2),(2,3,1)','(0,0,0),(0,0,0)');
345 cube_inter('(0,-1),(1,1)','(-2,0),(2,0)');
346 </programlisting>
347
348    <para>
349     Le prédicat de contenance suivant utilise la syntaxe en points alors qu'en
350     fait, le second argument est représenté en interne par une boîte. Cette
351     syntaxe rend inutile la définition du type point et des fonctions
352     pour les prédicats (boîte,point).
353    </para>
354
355 <programlisting>
356 select cube_contains('(0,0),(1,1)', '0.5,0.5');
357 cube_contains
358 --------------
359 t
360 (1 row)
361 </programlisting>
362  </sect2>
363
364  <sect2>
365   <title>Notes</title>
366
367   <para>
368    Pour des exemples d'utilisation, voir les tests de régression
369    <filename>sql/cube.sql</filename>.
370   </para>
371
372   <para>
373    Pour éviter toute mauvaise utilisation, le nombre de dimensions des cubes
374    est limité à 100. Cela se configure dans <filename>cubedata.h</filename>.
375   </para>
376  </sect2>
377
378  <sect2>
379   <title>Crédits</title>
380
381   <para>
382    Auteur d'origine&nbsp;: Gene Selkov, Jr. <email>selkovjr@mcs.anl.gov</email>,
383    Mathematics and Computer Science Division, Argonne National Laboratory.
384   </para>
385  </sect2>
386  
387  <sect2>
388   <title>Note de l'auteur</title>
389   <para>
390     Mes remerciements vont tout particulièrement au professeur Joe Hellerstein
391    (<ulink url="http://db.cs.berkeley.edu/~jmh/"></ulink>) qui a su extraire
392    l'idée centrale de GiST (<ulink
393    url="http://gist.cs.berkeley.edu/"></ulink>), et à son étudiant précédant,
394    Andy Dong
395    (<ulink url="http://best.me.berkeley.edu/~adong/"></ulink>), pour son
396    exemple rédigé dans Illustra. Mes remerciements vont également aux
397    développeurs de PostgreSQL qui m'ont permis de créer mon propre monde
398    et de pouvoir y vivre sans être dérangé. Toute ma gratitude aussi à
399    Argonne Lab et au département américain de l'énergie pour les années de
400    support dans mes recherches sur les bases de données.
401   </para>
402
403   <para>
404    Des modifications mineures ont été effectuées sur ce module par Bruno Wolff
405    III <email>bruno@wolff.to</email> en août/septembre 2002. Elles incluent
406    la modification de la précision (de simple à double) et l'ajout de
407    quelques nouvelles fonctions.
408   </para>
409
410   <para>
411    Des mises à jour supplémentaires ont été réalisées par Joshua Reich
412    <email>josh@root.net</email> en juillet 2006. Elles concernent
413    l'ajout de <literal>cube(float8[], float8[])</literal> et le nettoyage du code pour
414    utiliser le protocole d'appel V1 à la place de la forme V0 maintenant
415    obsolète.
416   </para>
417  </sect2>
418
419 </sect1>
Note: See TracBrowser for help on using the browser.