Pregunta
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.