Thursday, September 18, 2008

Re: [pgsql-es-ayuda] Hola

marcelo Cortez dijo [Wed, Sep 17, 2008 at 10:33:15AM -0700]:
> Hola
>
> Para mi el tema de las bases de datos de objetos y los otros metodos de mapear objetos tiene un eje de diferencia muy grande y conceptual
> que termina siendo por donde pasa todo. la identidad.
> En el paradigmade objetos esta asegurada la identidad todo objeto es identico a si mismo y esa identidad es unica,( perdon por la redundancia).
> (...)
> la diferencia entre mapear en una base de objetos y una base relacional es como si por ejemplo ,
> todas las mañanas tomara mi auto para ir al trabajo y luego al llegar a casa lo desarmo todo en cajitas numeradas y a la mañana siguiente lo volviera a ensamblar y asi ... siempre ...
> Volviendo al tema , creo que el pivot esta en la identidad.

No exactamente. Todo objeto en un lenguaje limpiamente OO tiene
también un ID. Veamos el siguiente ejemplo, en Ruby (estoy usando la
consola interactiva, irb):

Vamos a crear dos objetos con información aparentemente idéntica:

>> cadena1 = "una cadena"
=> "una cadena"
>> cadena2 = "una cadena"
=> "una cadena"

Verificamos si, a nivel comparación, son iguales:

>> cadena1 == cadena2
=> true

Y vemos sus respectivos IDs:

>> cadena1.object_id
=> 69996972347440
>> cadena2.object_id
=> 69996972340800

Entonces, claramente, estos dos objetos son iguales, mas no son el
mismo objeto.

¿Cómo puedo hablar de lo mismo en un modelo relacional como el de
PostgreSQL?

Voy a crear una tabla muy sencilla, con solamente una columna, y
poblarla de datos del mismo modo:

test=# CREATE TEMP table cadena (datos text);
CREATE TABLE

solserv_test=# INSERT INTO cadena (datos) VALUES ('una cadena');
INSERT 0 1
solserv_test=# INSERT INTO cadena (datos) VALUES ('una cadena');
INSERT 0 1

Si consulto esta tabla, tengo -del mismo modo que en el ejemplo
anterior- dos registros independientes, aunque casualmente idénticos
(cosa que, obviamente, no quieres ver en una BD de producción ;-)

test=# SELECT * from cadena;
datos
------------
una cadena
una cadena
(2 rows)

No me meto en este momento en más detalles - Cada registro sigue
siendo únic, tiene un identificador interno, tan interno como el
object_id de Ruby (que en realidad no es muy utilizable más que para
propósitos demostrativos para el usuario común).

--
Gunnar Wolf - gwolf@gwolf.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
--
TIP 7: no olvides aumentar la configuración del "free space map"

No comments: