Estoy realizando haciendo un enfoque especifico a bases de datos objeto - relacional, y tengo problemas con ciertas caracteristicas en PostgreSQL.
Mi pregunta: Postgres acepta tablas anidadas o tipadas??? Exite la herencia entre objetos?? Existen referencias entre objetos como las hay en Oracle??? Existen metodos asociados a un objeto creado??? o como puedo obtener datos de un objeto mediante metodos o funciones? Oracle acepta todas las caracteristicas que deberia de tener un gestor objeto relacional, pero aun no logro ver si Postgres tambien y tal parece que no. O porque se dice que postgres es objeto relacional?? o cuales son las caracteristicas que debe de tener un gestor para ser llamado objeto relacional???
Respuesta
a) Típicamente la gente se refiere a una base objeto-relacional cuando
a.1) Los tipos de datos de las columnas no sólo son de tipos primitivos (CHAR, NUMBER, DATE, LOB, etc.) sino que pueden definirse sobre una jerarquía de tipos definidos por el usuario.
a.2) Y cuando tanto el esquema como el dialecto de consulta (un superconjunto de SQL) soporta consultas jerárquicas o internas a la estructura de los tipos de columnas Jamás he usado ninguna característica objeto-relacional porque es difícil de portar. Eso va contra mi filosofía. Adicionalmente, no veo las ventajas sino para aplicaciones muy muy específicas.
b) Con respecto a postgres.
b.1) Cumple parcialmente a.1) utilzando tipos compuestos, o si no te gusta el tipado estático, json o xml. Tiene CREATE TYPE TYPE_NAME....
b.1.1) Pero no tienes herencia de tipos. Los desarrolladores son hostiles a la idea. Pero no entorpece tanto porque...
b.2) Cumple a.2) porque tiene `CREATE TABLE ... INHERITS tabla_padre`. y también `CREATE TABLE TABLA OF TYPE_NAME`
b.3) Puedes hacer referencias de un modo similar pero con menos azúcar sintáctica. Recomendaría que la pensaras mejor. De hecho... EMHO conviene evitar software comercial del tipo "kitchen sink". y también EMHO el "kitchen sink" sólo puede progresar en código abierto. Ya he visto gente mordida por el "avance" del todopoderoso Oracle. Ilústrese con DBMS_XMLQUERY del susodicho.
b.4) Para eso de los métodos... hay que utilizar el sistema de tipos en funciones definidas por usuario. Cabe repetir la súplica: el encapsulamiento no está en la sintaxis, sino en el concepto. Nada impide hacer grupos de funciones del mismo nombre, que conformen convencionalmente con una interfaz, y que también convencionalmente reciban de primer parámetro el tipo compuesto.