Re: numrow

From: Gunnar Wolf <gwolf(at)gwolf(dot)org>
To: Martin Marques <martin(at)bugs(dot)unl(dot)edu(dot)ar>
Cc: Victor Lopez <v(dot)lopez(dot)s(at)ono(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: numrow
Date: 2006-11-29 17:15:49
Message-ID: 20061129171549.GA28747@gwolf.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Martin Marques dijo [Wed, Nov 29, 2006 at 10:33:58AM -0300]:
> > Vamos... Meramente ilustrativo - ¿Pero por qué crees que esto sería
> > más rápido del lado del servidor? Además, ¿qué pasa si mi tabla en
> > Oracle tiene un campo llamado rownum? :)
>
> Es muy probable que rownum ser una palabra reservada en Oracle, y por lo
> tanto no pueda ser usada en la definicion de tablas. No se, pero se me
> ocurre eso.

Sí, lo pensé también, pero se me hace absurdo marcar como palabras
reservadas aquellas que no tienen sentido, y que muy bien podrían ser
utilizadas en una aplicación.

Yéndonos incluso un poco a la teoría de las bases de datos
relacionales, el número de renglón no significa absolutamente
nada. Puede tener significado dentro de tu aplicación. Recuerda que un
RDBMS trabaja siguiendo la teoría de conjuntos - Una solicitud afecta
(INSERT, UPDATE, DELETE) o genera (SELECT) un conjunto de
registros. Este conjunto no tienen ningún ordenamiento, sólo te
garantiza que todos los elementos que solicitaste serán entregados y
que no habrá duplicidad entre los mismos (esto es, tomando el renglón
completo como es manejado internamente, aún si estás especificando que
los resultados se filtren y sólo te sean entregados determinados
campos). Claro, puliendo un poco las consultas, puedes especificar que
el conjunto entregado _después_ de ser filtrado vuelva a garantizarte
unicidad de cada renglón (DISTINCT).

A todo esto, ¿dónde cabe el ORDER BY? ¡Qué bueno que preguntas! Queda
muy al final del proceso, al momento de "aplanar" el conjunto para
pasarlo secuencialmente a través del protocolo especificado y
entregado a tu programa cliente. El ordenamiento no significa _nada_
para los datos.

A mi entender, el concepto de 'rownum' que nos dan (¿das?) de Oracle
rompe con la teoría. Los renglones pueden ser reordenados, y sus datos
no deben variar. Al asignar un número a cada renglón estás alejándote
del modelo de teoría de conjuntos. Sí, puede sonar a purismo académico
contra pragmatismo de hombres de negocios, pero lo que hace Oracle
simplemente se me hace erróneo.

Te pongo un ejemplo simple más: En SQL tienes varias funciones
agregadoras, que te reducen el número de tuplas generadas, como avg(),
count() o sum(). ¿Por qué crees que no existe un total_so_far() que
vaya sumando cada uno de los renglones entregados? Porque ese tipo de
manipulación pertenece a la aplicación, no al RDBMS.

...Claro, sólo falta que alguien me azote con un manual y me haga ver
que la teoría de RDBMs y de teoría de conjuntos está equivocada, o que
ya no aplica lo que estudié. Pero la teoría se me hace limpia y
elegante :)

--
Gunnar Wolf - gwolf(at)gwolf(dot)org - (+52-55)5623-0154 / 1451-2244
PGP key 1024D/8BB527AF 2001-10-23
Fingerprint: 0C79 D2D1 2C4E 9CE4 5973 F800 D80E F35A 8BB5 27AF

In response to

  • Re: numrow at 2006-11-29 13:33:58 from Martin Marques

Responses

  • Re: numrow at 2006-11-29 18:03:55 from Alvaro Herrera
  • Re: numrow at 2006-11-29 21:12:35 from Martin Marques

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message arturo garcia 2006-11-29 17:31:30 RE: prueba
Previous Message Alvaro Herrera 2006-11-29 14:42:40 Re: Como realizar busquedas con array.