PDF de programación - Características objeto-relacional y de soporte de documentos XML de Oracle Database

Imágen de pdf Características objeto-relacional y de soporte de documentos XML de Oracle Database

Características objeto-relacional y de soporte de documentos XML de Oracle Databasegráfica de visualizaciones

Publicado el 27 de Febrero del 2020
106 visualizaciones desde el 27 de Febrero del 2020
707,0 KB
21 paginas
Creado hace 16a (02/07/2003)
Características objeto-relacional y de soporte de

documentos XML de Oracle Database

Juan Francisco Adame Lorite



Bases de datos en la Distribución

Julio 2003





IInnttrroodduucccciióónn

Este documento trata de las características y funcionalidades XML del producto
software comercial Oracle Database en su versión 9i Release 2. Estas características no son
sólo el almacenamiento de este tipo de datos como cadenas de caracteres sino el modelado
de estos tipos, su clasificación e indexado en el sistema de modelado de datos del producto,
permitiendo peticiones y manipulación avanzada de los mismos.

La naturaleza de estructura no plana de los documentos XML obliga para su modelado
hacer uso de las características objeto-relacionales de la base de datos. Por eso, la primera
parte de este documento habla del modelo objeto-relacional de Oracle.

La segunda parte del documento se centra en el propósito del mismo: documentos

XML en la base de datos Oracle.

MMooddeelloo oobbjjeettoo--rreellaacciioonnaall ddee OOrraaccllee DDaattaabbaassee 99ii

Según la forma del modelado de los datos podemos dividir los software de bases de

datos en tres tipos: relacionales, orientadas a objetos y objeto-relacionales.

Las bases de datos relacionales son una tecnología muy madura y eficiente, pero su
principal defecto es la planaridad de su modelo. Esto ha dificultado el modelado de los tipos
de datos objetos que carecen de esta planaridad obligando a establecer capas de
transformación del modelo orientado a objetos de la aplicación con el modelo plano
relacional de la base de datos. Esto exigía una doble labor de diseño en ambos planos y el
añadido del wrapper entre los dos modelos.

Las bases de datos orientadas a objetos aparecen para cubrir esta problemática. Al ser
el modelado de los elementos de estos software también orientado a objetos, un único
diseño era necesario y el wrapper desaparece o se simplifica enormemente. Sin embargo, el
nuevo modelo orientado a objetos era mucho más ineficiente y lento.

La última opción en aparecer fue la objeto-relacional. Este modelo combina las
ventajas de los dos anteriores: la base de datos es relacional por lo que conserva su rapidez
y eficiencia, pero permite hacer uso de nuevos elementos que modelan los objetos a esta
base de datos relacional, con lo que el analista y diseñador ve un modelo orientado a
objetos. Oracle Database 8i en adelante pertenece a este último tipo.

Los objetos en Oracle 9i se denominan tipos abstractos de datos y poseen
funcionalidades de herencia y métodos implementados en SQL o Java. La problemática de la
planaridad se resuelve con las tablas anidadas y los arrays variables. Las relaciones entre
objetos se establecen mediante el tipo de referencia REF. El almacenamiento de conjuntos de
datos no estructurado se realiza con los tipos de objetos grandes. Y la base de datos
relacional se puede modelar como objetos mediante las vistas de objeto.
TTiippooss aabbssttrraaccttooss ddee ddaattooss ((ccllaasseess yy oobbjjeettooss))

Las clases son los tipos abstractos de datos. Los tipos abstractos poseen atributos,
relaciones y métodos. Los atributos son tipos que establecen el estado del objeto, las
relaciones son referencias a otros objetos existentes al margen de este y los métodos son las
acciones que el objeto puede realizar.

Oracle permite modelar los objetos en filas o columnas. Un objeto modelado en filas es
una tabla en que cada fila es del tipo del objeto y sus atributos nativos son modelados como
columnas. Un objeto modelado en columnas es una columna dentro de una tabla u objeto del
tipo objeto y que se modela expandiendo sus atributos como nuevas columnas de la tabla o
atributos del objeto respectivamente.

En el ejemplo siguiente, el objeto purchase_order se modelará con su atributo id
seguido de los atributos de person: name y phone, y de una referencia a la tabla anidada
lineitems. El cuerpo del método get_value se define posteriormente en otra operación como
se indica más adelante.

CCRREEAATTEE TTYYPPEE ppeerrssoonn AASS OOBBJJEECCTT ((
nnaammee VVAARRCCHHAARR22((3300)),,
pphhoonnee VVAARRCCHHAARR22((2200)) ));;
CCRREEAATTEE TTYYPPEE lliinneeiitteemm AASS OOBBJJEECCTT ((
iitteemm__nnaammee VVAARRCCHHAARR22((3300)),,
qquuaannttiittyy NNUUMMBBEERR,,
uunniitt__pprriiccee NNUUMMBBEERR((1122,,22)) ));;
CCRREEAATTEE TTYYPPEE lliinneeiitteemm__ttaabbllee AASS TTAABBLLEE OOFF lliinneeiitteemm;;
CCRREEAATTEE TTYYPPEE ppuurrcchhaassee__oorrddeerr AASS OOBBJJEECCTT ((
iidd NNUUMMBBEERR,,
ccoonnttaacctt ppeerrssoonn,,
lliinneeiitteemmss lliinneeiitteemm__ttaabbllee,,
MMEEMMBBEERR FFUUNNCCTTIIOONN
ggeett__vvaalluuee RREETTUURRNN NNUUMMBBEERR ));;
CCRREEAATTEE TTAABBLLEE oorrddeerrss OOFF ppuurrcchhaassee__oorrddeerr
NNEESSTTEEDD TTAABBLLEE lliinneeiitteemmss SSTTOORREE AASS lliinneeiitteemmss__ttaabbllee;;

Toda clase o colección tiene un constructor creado automáticamente para crear una
instancia (objeto) de una clase utilizado en la inserción de elementos. Este constructor tiene
como parámetros los atributos que definen la clase por el mismo orden en que fueron
definidos. Por ejemplo para insertar un nuevo objeto de tipo purchase_order en la base de
datos:

IINNSSEERRTT IINNTTOO oorrddeerrss VVAALLUUEESS ((
4455,,
ppeerrssoonn ((‘‘JJuuaann’’,,’’555555’’)),,
lliinneeiitteemm__ttaabbllee ((
lliinneeiitteemm((‘‘PPiieeddrraass’’,,44,,33..55)),,
lliinneeiitteemm((‘‘CChhuurrrrooss’’,,1122,,00..44))
))
));;


Para referenciar a los atributos, métodos y referencias se hace uso de la nomenclatura
habitual del punto entre objeto y atributo. Por ejemplo para hacer una petición de
elementos:

SSEELLEECCTT ** FFRROOMM oorrddeerrss oo WWHHEERREE oo..ccoonnttaacctt..nnaammee==’’JJuuaann’’ AANNDD
oo..ccoonnttaacctt..pphhoonnee==’’555555’’;;

O bien:
SSEELLEECCTT VVAALLUUEE((oo)) FFRROOMM oorrddeerrss WWHHEERREE
VVAALLUUEE((oo..ccoonnttaacctt))==ppeerrssoonn((‘‘JJuuaann’’,,’’555555’’));;

Ambos devuelven el mismo valor, salvo que la primera en forma de tabla siendo cada
columna un atributo del objeto resultado de la consulta. Y en el segundo devuelve el objeto
con la forma de constructor explicada en el ejemplo anterior.

La creación de índices en objetos es igual a la de tablas relacionales identificando el
elemento de indexación mediante la referencia al atributo índice. Por ejemplo, para indexar
el ejemplo anterior por el nombre del contacto:

CCRREEAATTEE IINNDDEEXX NNoommbbrreeCCoonnttaaccttoo OONN oorrddeerrss((ccoonnttaacctt..nnaammee));;

Los métodos se declaran en la declaración del objeto pero se implementan
posteriormente asignando una función o método externo al del objeto. Su implementación
puede realizarse en SQL o Java.
HHeerreenncciiaa ddee ccllaasseess

Oracle permite la herencia simple de clases a través del modificador UNDER. En el

ejemplo del apartado anterior, añadimos la fecha a los pedidos:

CCRREEAATTEE TTYYPPEE ddaattee__oorrddeerr UUNNDDEERR oorrddeerrss ((
ddaattee DDAATTEE
)) NNOOTT FFIINNAALL;;

La cláusula FINAL indica si se puede heredar la clase por un subtipo (NOT FINAL) o si
es una clase final y por lo tanto no se puede extender (FINAL). En este ejemplo si es
heredable.

Otra cláusula es INSTANTIABLE que indica cuando la clase es abstracta y no se puede
instanciar (NOT INSTANTIABLE) y cuando no lo es y se pueden tomar objetos de la clase
(INSTANCIABLE).

La cláusula TREAT es el operador de casting de un tipo de objeto a subtipos del
mismo. Si la conversión no es posible se devuelve NULL. El siguiente ejemplo busca en la
tabla de date_orders pero devuelve los elementos respuesta como purchase_orders.

SSEELLEECCTT VVAALLUUEE((TTRREEAATT((oo AASS oorrddeerrss)))) FFRROOMM ddaattee__oorrddeerrss WWHHEERREE
VVAALLUUEE((oo..ccoonnttaacctt))==ppeerrssoonn((‘‘JJuuaann’’,,’’555555’’));;

El operador de predicados para saber si un objeto es instanciable a una clase es IS OF.

TTaabbllaass aanniiddaaddaass yy aarrrraayyss vvaarriiaabblleess

Los arrays variables y las tablas anidadas permiten modelar las relaciones de uno a
varios que son muy comunes en los modelos orientados a objetos. Estos tipos se denominan
colecciones, porque representan conjuntos de datos de un mismo tipo.

Cuando creamos una tabla anidada además de indicar que atributo es, debemos
indicar que tabla externa será la que almacene los datos. En el ejemplo del apartado de los
tipos abstractos es lineitems_table:

CCRREEAATTEE TTAABBLLEE oorrddeerrss OOFF ppuurrcchhaassee__oorrddeerr
NNEESSTTEEDD TTAABBLLEE lliinneeiitteemmss SSTTOORREE AASS lliinneeiitteemmss__ttaabbllee;;

Los arrays variables son de tamaño fijo por lo que no es necesario guardarlos en una
tabla externa y se almacenan en la propia tabla (u objeto). Haciendo uso del ejemplo
anterior pero con un array variable de 10 elementos en vez de una tabla anidada:

CCRREEAATTEE TTYYPPEE lliinneeiitteemm__aarrrraayy AASS VVAARRRRAAYY((1100)) OOFF lliinneeiitteemm;;
CCRREEAATTEE TTYYPPEE ppuurrcchhaassee__oorrddeerr AASS OOBBJJEECCTT ((
iidd NNUUMMBBEERR,,
ccoonnttaacctt ppeerrssoonn,,
  • Links de descarga
http://lwp-l.com/pdf17326

Comentarios de: Características objeto-relacional y de soporte de documentos XML de Oracle Database (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad