Sei sulla pagina 1di 17

Características

Objeto-Relacionales
del
Sistema de Gestión de Bases de Datos
Oracle en 2002

Curso 2006-07

i
Características Objetos Relacionales del SGBD Oracle
Curso 2006-07

Tabla de Contenido

Tabla de Contenido ................................................................................................................ii


Resumen .................................................................................................................................1
Introducción ...........................................................................................................................1
Ventajas de la utilización de Objetos en Oracle....................................................................2
Implementación del Tipo Objeto ...........................................................................................3
Creación de Tipos .............................................................................................................4
Implementación de Métodos ............................................................................................5
Referencias.........................................................................................................................6
Herencia ...........................................................................................................................10
Conclusión............................................................................................................................11
Referencias Bibliográficas...................................................................................................11
Otros Sitios Web de Noviembre de 2002.......................................................................12
Figuras detallando la nueva sintaxis BDOR ......................................................................13

ii
Características Objetos Relacionales del SGBD Oracle
Curso 2006-07

Resumen
Oracle ha implementado un modelo orientado a objetos en su sistema de gestión de
bases de datos. Este documento analiza las ventajas añadidas al incorporar el enfoque
orientado a objetos basado en el SGBD de Oracle. Actualmente, existe un estándar
orientado a objetos para el desarrollo de sistemas de información
Los tipos de objetos definidos por el usuario son el fundamento del modelo de
Objetos de Oracle. Ello hace posible que estos tipos de objetos sean producidos
(creados) por el usuario para la creación de BDOR. Este trabajo describe además las
formas de uso de dichos tipos de objetos al definir las características de abstracción,
encapsulación y herencia del paradigma orientado a objetos.
Finalmente, se describen futuras implicaciones del incremento de posibilidades del
análisis y diseño de bases de datos gracias a la incorporación del modelo de objetos.

Introducción
La continua mejora de capacidades tecnológicas en los últimos años ha
permitido el desarrollo de aplicaciones extremadamente complejas. Para crear estos
nuevos y sofisticados sistemas software (basados en objetos complejos con
interrelaciones también complejas) la ingeniería del software y los desarrolladores
han tenido que realizarlos sobre la base de ser escalables, sólidos y reutilizables. Esta
necesidad de programar en la orientación a objetos ha hecho resurgir una metodología
propia que permite diseñar y programar sistemas de gran escala y que sean fáciles de
entender, simples de depurar y rápidos de actualizar.
Desde la versión Oracle 8 [Ora97a] se soporta el paradigma orientado a objetos
en su Universal Data Server. Oracle comenzó implementando las principales
características funcionales de las bases de datos objeto-relacionales en su sistema de
gestión de bases de datos, a la par que garantizaba la compatibilidad con el marco
funcional del tradicional modelo de datos relacional. De este modo, Oracle ofrece el
primer producto tecnológico de un servidor de bases de datos híbrido. Este tipo de
bases de datos se conoce como objeto-relacional y contiene ambas tecnologías:
relacional y objetual [Hans02].
Las expectativas con estas nuevas características orientadas a objetos son que
sirvan de gran ayuda a los constructores y desarrolladores de los sistemas de
información avanzados en muy diversas maneras. En [Burl01] se describe el impacto
que esta extension objeto-relacional está produciendo. Entre otros aspectos,
literalmente señala: “These additions are anything but mundane. They are going to
change the way databases are designed, implemented, and used in ways that Oracle
developers have not been able to imagine”.

Bases de Datos 1 Nov. 2006


DIT-ETSIT-UPM C. Costilla
Características Objetos Relacionales del SGBD Oracle
Curso 2006-07

Oracle enfatiza los dos principales objetivos de su nueva tecnología objeto-


relacional de bases de datos, que fueron los siguientes:
• Proporcionar la posibilidad que el usuario modele objetos de negocio en la
base de datos permitiendo la definición y el uso de tipos definidos por el
usuario (user-defined types).
• Proporcionar infraestructura para el acceso basado-en-objetos a datos objeto
en la base de datos y mantener el modelo de datos estrechamente cercano al
que se usa en las aplicaciones del mundo real [Ora97a].
Los tipos objeto de Oracle son tipos de datos definidos por el usuario que
permiten modelar entidades complejas del mundo real en una estructura que trata
cada entidad como una unidad atómica simple en la base de datos.

Ventajas de la utilización de Objetos en Oracle


El modelo de objetos de Oracle es similar al del sistema de clases de C++,
Microsoft .NET, y Java. Esto permite implementar una arquitectura orientada a
objetos real para que forme parte de la implementación de una base de datos. Las
entidades complejas del mundo real y la lógica se pueden modelar fácilmente y, a la
vez, se permite la reutilización de objetos que permiten desarrollar aplicaciones de la
base de datos de una forma más rápida y con mayor eficiencia [Ora02d]. Los
programadores de aplicaciones pueden acceder directamente a tipos de objetos
Oracle, sin necesidad de ninguna capa adicional entre la base de datos y la capa
cliente. Las ocurrencias de los tipos de objetos (instances) se albergan en la base de
datos como filas de una tabla o como valores de una columna [Ora02b]. Además, la
aplicaciones que utilizan objetos de Oracle son fáciles de entender y mantener ya que
los tipos objeto de Oracle soportan totalmente las características de abstracción,y
encapsulación del comportamiento de los objetos basados en el paradigma orientado a
objetos.
Mientras que las tablas sólo contienen datos, los objetos en Oracle son capaces
de actuar sobre los datos de distintas formas. Por ejemplo, una aplicación puede
llamar a un método de un objeto para consultar determinada información. La
literatura de Oracle describe dos sencillos ejemplos de cómo se puede hacer esto.
“El objeto orden de compra puede tener un método que sume el coste de los productos
comprados. O el objeto usuario puede tener métodos para devolver el nombre del usuario,
su número de referencia, dirección e incluso el historial de compra y forma de pago. [Ora02d]”.
Esta funcionalidad está encapsulada en cada objeto, lo que proporciona alta
eficiencia. Tanto los tipos objeto como sus métodos están almacenados en la base de
datos, y pueden ser accedidos por cualquier aplicación. Esto puede reducir y, incluso
eliminar, que las aplicaciones de la base de datos tengan que re-codificar estructuras

Bases de Datos 2 Nov. 2006


DIT-ETSIT-UPM C. Costilla
Características Objetos Relacionales del SGBD Oracle
Curso 2006-07

similares [Ora002d]. Las nuevas aplicaciones pueden utilizar con sencillez esta
funcionalidad ofrecida por el sistema.
Al ser capaces de localizar y manipular objetos como una sóla unidad se crean
incluso más eficiencias. Una aplicación puede localizar un objeto simple que, a su
vez, localiza objetos adicionales que están conectados al objeto que buscaba
inicialmente. Por ejemplo, sea una consulta sobre un objeto usuario. En una sóla
query entre el cliente y el servidor, se puede retornar el nombre del usuario, su número de
referencia, las múltiples partes de la dirección e incluso su historial de compra y formas de
pago.
En los tipos objeto de Oracle se pueden crear y usar más fácilmente las
asociaciones part-to-whole. Por ejemplo, cuando se quiere representar una rueda
como parte de un coche en un sistema relacional puede ser más difícil que en el objeto-
relacional, porque -como sabemos- en el MR todas las asociaciones hay que
implementarlas como esquemas complejos de múltiples tablas (con enlaces
semánticos de ‘joins’ entre PKs y FKs). Con los tipos objeto, los objetos pueden
tener otros objetos como atributos que –a su vez- pueden tener otros subsecuentes
objetos como atributos. Así se crean las jerarquías entre objetos de una base de datos
Oracle, estableciendo tipos de objetos interconectados.
Otra ventaja del uso de objetos en Oracle es la posibilidad de determinar
fácilmente si una entidad es completa observando las partes de dicha entidad.
Tomaremos el ejemplo de la dirección para facilitar el entendimiento de lo dicho. Un
objeto dirección está formado por: nombre de la calle, número de la calle, ciudad, país y
distrito postal. Si algún valor de estos atributos se omitiera, entonces podríamos saber
que el objeto dirección no es completo. Por contra, una tabla relacional no puede ser
diseñada para reconocer que todas las columnas de la tabla hacen un todo
conjuntamente [Ora02d].
Los tipos objeto de Oracle permiten la herencia de objetos. Esto es, desde la
definición de un tipo padre podemos derivar un nuevo subtipo objeto. Se pueden
compartir las similaridades entre tipos mientras que las características de los subtipos
pueden ser extendidas. Por ejemplo, desde el objeto general super tipo vehículo
podemos definir los subtipos motocicleta o coche que heredarán las características de su
super tipo vehículo. Los tipos objetos especializados motocicleta y coche pueden tener
atributos adicionales o pueden redefinir métodos del objeto padre vehículo extendiendo
la funcionalidad de sus tipos objeto.

Implementación del Tipo Objeto


El tipo objeto es un esquema objeto con tres categorías de componentes:
• Nombre, que identifica unívocamente al tipo objeto en el esquema,

Bases de Datos 3 Nov. 2006


DIT-ETSIT-UPM C. Costilla
Características Objetos Relacionales del SGBD Oracle
Curso 2006-07

• Atributos, que modelan la estuctura y el estado de entidades del mundo real. Los
attributes pueden estar definidos como tipos o como tipos de objetos,
• Métodos, funciones o procedimientos que implementan operaciones para ser
ejecutadas sobre entidades del mundo real.

Creación de Tipos
Se detalla ahora la implementación de tipos Objeto en Oracle. Como ejemplo
[Robb02], creamos la estructura (class) del objeto dirección llamado tipo-direc:
CREATE TYPE tipo_direc AS OBJECT
(calle varchar2(60),
ciudad varchar2(30),
pais char(2),
CP varchar(9));
Una vez definido el tipo de objeto tipo_direc, éste puede ser embebido o
‘anidado’ en otro objeto [Robb02]:
CREATE TYPE tipo_persona AS OBJECT
(nombre varchar2(25),
dirección tipo_direc);

CREATE TYPE tipo_estudiante AS OBJECT


(id-estudiante varchar2(9),
persona tipo_persona);

El ejemplo muestra cómo el objeto tipo_direc puede estar embebido en el tipo de


objeto tipo-persona. A su vez, el tipo objeto tipo_estudiante está definido usando el tipo-
persona como una de sus columnas. Esta forma de anidar puede ser indefinida.
Una vez definido el tipo de objeto tipo-estudiante ya puede ser utilizado en la
creación de la siguiente tabla:
CREATE TABLE Estudiante
(solo_estudia tipo_estudiante);
Puesto que la tabla Estudiante es una tabla objeto, se podrá usar de muchas
formas distintas. Una diferencia importante de una tabla objeto es que cada fila
individual de la tabla objeto tendrá un valor identificador del objeto fila, oid. Otra
diferencia importante es que cada fila puede ser referenciada como un objeto. Una
vez definida la tabla, ya se pueden insertar en ella los registros, como sigue:
INSERT INTO Estudiante VALUES
(id-estudiante (‘100’,
tipo-persona (‘Juan Pérez. Estudiante’,
tipo-direc (‘Gran Vía, 25.’, ‘Madrid’, ‘ES’, ‘48024’))));

Bases de Datos 4 Nov. 2006


DIT-ETSIT-UPM C. Costilla
Características Objetos Relacionales del SGBD Oracle
Curso 2006-07

La siguiente consulta extrae estos datos:


SELECT e. solo_estudia. id-estudiante ID, e. solo_estudia.persona.nombre
NOMBRE, e. solo_estudia. persona.dirección.calle CALLE
FROM Estudiante e
WHERE e. solo_estudia. id-estudiante = 100
Resultado:
ID NOMBRE CALLE
--------- ---------------------------------------------------------- ----------
100 Juan Pérez. Estudiante Gran Vía, 25

Toda la consulta se escribe sin tener en cuenta ningún tipo de join. La


actualización y el borrado son similares a como se hace en el modelo relacional:
UPDATE Estudiante e
SET e.solo_estudia.persona.nombre = ‘Juan Sánchez’
WHERE e.solo_estudia. id_estudiante = 100; Se actualiza una fila.

DELETE FROM Estudiante e


WHERE e. solo_estudia. id-estudiante = 100; Se borra una fila.

Implementación de Métodos

La sintaxis para implementar un método en un tipo objeto es como sigue:

CREATE or REPLACE TYPE tipo_nuevapersona AS object


(nombre varchar2(25),
apellido varchar2(25),
fecha_nac date,
member function EDAD (Fecha_Nac in DATE) return NUMBER;

El tipo de objeto está definido como ya sabemos, salvo la línea “member function”
que sirve para definir la llamada a la función que recibe un parámetro edad y
devuelve un número.
No se puede hacer modificación alguna al tipo objeto antes de usarlo en una
tabla; Oracle no permite que un tipo objeto sea ‘re-created’ o borrado si ese tipo está
utilizado en una tabla [Ora02d]. Ahora tenemos que definir la función EDAD. Y la
sintaxis es como sigue:

Bases de Datos 5 Nov. 2006


DIT-ETSIT-UPM C. Costilla
Características Objetos Relacionales del SGBD Oracle
Curso 2006-07

CREATE or REPLACE TYPE BODY tipo_nuevapersona AS


member function EDAD (Fecha_Nac in DATE) return NUMBER
IS
begin
return ROUND(SysDate – Fecha_Nac);
end;
end;
Ahora la función EDAD está disponible para ser utilizada en una consulta.
Primero, es preciso crear una tabla que albergue el tipo objeto tipo-persona.
CREATE TABLE PERSONA_NUEVA OF tipo_nuevapersona;

INSERT INTO PERSONA_NUEVA VALUES


(tipo_nuevapersona (‘Juan’, ‘Sanchez’, TO_DATE (‘03-FEB-1970’, ‘DD-MM-YYYY’)));

Para verificar la función EDAD podemos hacer lo siguiente:

SELECT P. tipo_nuevapersona.EDAD (P. tipo_nuevapersona.Fecha_Nac)


FROM PERSONA_NUEVA P;

Resultado:
P. tipo_nuevapersona.EDAD (P. tipo_nuevapersona. Fecha_Nac )
12005
La invocación P. tipo_nuevapersona.EDAD (P. tipo_nuevapersona. Fecha_Nac) ejecuta el
método EDAD y devuelve la edad de la persona en días. Este método permite albergar
datos estáticos (como la fecha de nacimiento) y obtener datos variables (dinámicos)
en el momento temporal (variable) cuando se necesite. Así, los datos variables se
pueden excluir de la base de datos.

Referencias
Como es sabido, las clave externa del modelo relacional expresa asociaciones
uno-a-varios con la clave primaria. El modelo de objetos de Oracle proporciona una
forma más eficaz para expresar asociaciones uno-a-varios. Como se dijo antes,
Oracle asigna un identificador único a cada objeto en una fila llamado OID. El OID
hace posible que otros objetos referencien objetos filas existentes en la BD. Oracle
guarda estas referencias en el tipo de dato llamado REF [Ora97b]. A continuación
podemos ver cómo operan las funciones REF:

Bases de Datos 6 Nov. 2006


DIT-ETSIT-UPM C. Costilla
Características Objetos Relacionales del SGBD Oracle
Curso 2006-07

SELECT REF (P)


FROM PERSONA_NUEVA P
WHERE Apellido = ‘Sanchez’;
Resultado:
REF(P)
00002802095C3AD6AD3B3C4CD7B080A49C97BACD9835619CD6E25C4
9F8AC8879791B33DA8F0040F0590002
La función REF toma como entrada el alias dado a la tabla de objetos, en el
ejemplo anterior es “P”. Y vemos cómo la función REF devuelve el OID en curso del
objeto fila seleccionado. La utilización de REF en sí sóla no es útil, Oracle
proporciona otra función llamada DEREF que traduce la salida de REF al valor del
objeto fila en curso [Koch02].
En los ejemplos que siguen utilizaremos el ejemplo anterior de PERSONA_NUEVA
y crearemos una nueva tabla que contenga el departamento donde trabaja la gente.

CREATE TABLE NUEVODEPARTMENTO


(NomDept VARCHAR(30),
PersonaEn REF tipo_nuevapersona);

La última línea de la sintaxis de CREATE TABLE no pertenece al modelo


relacional sino al modelo objeto-relacional:
PersonaEn REF tipo_nuevapersona);

La columna PersonaEn no es el valor de un dato y no tiene significado en sí


misma, pero referencia a algún dato que está almacenado en algún otro lugar. Esta
referencia a un lugar puede ser cualquiera de las filas objeto que estén en el tipo
objeto tipo_nuevapersona [Koch02]. Para tener una descripción completa de la tabla
NUEVODEPARTMENTO así creada, podemos escribir:
SET DESCRIBE depth 2
DESC NUEVODEPARTMENTO

Nombre Null? Type


--------------------- -------- -------------------------
NomDept …….. VARCHAR2(30)
PersonaEn …….. REF OF tipo_nuevapersona
Nombre ……. VARCHAR2(25)
Apellido …….. VARCHAR2(25)
Fecha_nac ……. DATE
METHOD
MEMBER FUNCTION EDAD RETURNS NUMBER;

Bases de Datos 7 Nov. 2006


DIT-ETSIT-UPM C. Costilla
Características Objetos Relacionales del SGBD Oracle
Curso 2006-07

NombreArgumento Type …. In/Out Default?


--------------------- -------- ---------------------------------------------
fecha_nac DATE IN

Para insertar un registro en NUEVODEPARTMENTO, se necesita la función REF


para almacenar la referencia a NUEVAPERSONA en la columna PersonaEN:
INSERT INTO NUEVODEPARTMENTO
SELECT ‘Investigación’,
REF(P)
FROM PERSONA_NUEVA P
WHERE Apellido = ‘Sanchez’;

Las dos primeras líneas son conocidas del MR. En la tabla NUEVODEPARTMENTO
se inserta el valor literal “Investigación”. Como el tipo de dato de la columna PersonaEN
es REF OF tipo_nuevapersona, puede usarse una referencia a la tabla objeto
PERSONA_NUEVA. La función REF retorna el OID a partir de la consulta sobre el objeto
seleccionado. Entonces, la tabla NUEVODEPARTMENTO almacena el OID como un
puntero al objeto fila de la tabla PERSONA_NUEVA. La tabla NUEVODEPARTMENTO
nunca guarda información de PERSONA_NUEVA, sólo el nombre del departamento
(NomDept) y un puntero OID [Koch02]. Lo que se puede evidenciar mediante la
consulta siguiente:
SELECT * FROM NUEVODEPARTMENTO;
Resultado:
NomDept

PersonaEn

Investigación
00002202085C3AD6AD3B3C4CD7B080A49C97BACD9835619CD6E25C4
9F8AC8879791B33DA8F
No es posible ver el valor del dato referenciado a menos que se use la función
DEREF. Esta función toma el OID, evalúa la referencia y devuelve un valor.
SELECT DEREF (D.PersonaEn)
FROM NUEVODEPARTMENTO D
WHERE NomDept = ‘Investigación’
Resultado:
DEREF(D. PersonaEn)(Nombre, Apellido, Fecha_Nac)
tipo_nuevapersona (‘Juan’, ‘Sánchez’, ‘03-FEB-70’)

Bases de Datos 8 Nov. 2006


DIT-ETSIT-UPM C. Costilla
Características Objetos Relacionales del SGBD Oracle
Curso 2006-07

Lo que muestra que la tupla ‘Juan Sánchez’ de la tabla PERSONA_NUEVA está


referenciada por la tupla ‘Investigación’ de la tabla NUEVODEPARTMENTO.
Si comparamos estas consultas a objetos con las consultas relacionales, veremos
que hay diferencias importantes entre ambas. La primera gran diferencia es que en el
modelo objeto-relacional no es necesario especificar condiciones de join (que se
ejecutan soterradamente, o en ‘background’) [Koch02]. Lo hemos visto cuando una
consulta ha usado una referencia a un objeto fila que ha navegado desde la tabla
NUEVODEPARTMENTO hacia la tabla PERSONA_NUEVA. La segunda característica
importante es que se pueden usar valores DEREF sin tener que saber el nombre de la
tabla objeto. En el anterior ejemplo la única tabla que mencionó la consulta fue
NUEVODEPARTMENTO. Por el contrario, en el modelo relacional, una clave externa
embebida nunca sería necesaria en la tabla PERSONA_NUEVA para describir en qué
departamento está trabajando una persona [Burl02].
La función DEREF se usa para alcanzar la referencia del objeto tabla desde al
tabla relacional, pero necesitamos la función VALUE para obtener la misma estructura
del tipo objeto de un objeto tabla [Koch02].

SELECT VALUE(P)
FROM PERSONA_NUEVA P
WHERE Apellido = ‘Sánchez’
Resultado:
VALUE(P)(Nombre, Apellido, fecha_Nac)
tipo_nuevapersona (‘Juan’, ‘Sánchez’, ‘03-FEB-70’)
Ahora llevaremos el modelo de objetos de Oracle a PL/SQL. El ejemplo
muestra cómo se puede usar la función VALUE para que retorne determinados atributos
desde nuestro objeto PERSONA_NUEVA, de alias ‘p’ [Koch02].

set serveroutput on
declare
v_persona tipo_nuevapersona;
begin
SELECT VALUE(P) INTO v_persona
FROM PERSONA_NUEVA P
WHERE Apellido = ‘Sánchez’;
DBMS_OUTPUT.PUT_LINE(v_persona.Nombre);
DBMS_OUTPUT.PUT_LINE(v_persona. Apellido);
DBMS_OUTPUT.PUT_LINE(v_persona.Fech_Nac);
end;

Bases de Datos 9 Nov. 2006


DIT-ETSIT-UPM C. Costilla
Características Objetos Relacionales del SGBD Oracle
Curso 2006-07

Dando los siguientes resultados:


Juan
Sánchez
03-FEB-70

Veamos ahora un ejemplo de inserción:


declare
v_nueva_nuevapersona tipo_nuevapersona;
begin
v_nueva_nuevapersona:= tipo_nuevapersona (‘Juana’, ‘Martín’, ‘04-ENE-75’);
INSERT INTO PERSONA_NUEVA
VALUES (v_nueva_nuevapersona);
end;

Herencia

La herencia, sustancial a la orientación a objetos, se proporciona en Oracle con


un modelo de herencia simple: un subtipo hereda todos los métodos y atributos de su
único supertipo [Ora02ª]. Adicionalmente, el subtipo puede añadir nuevos atributos y
métodos y rechazar los métodos heredados.
CREATE TYPE Tipo_Persona AS OBJECT
(Nombre VARCHAR2(25),
Fecha_Nac DATE
MEMBER FUNCTION EDAD() RETURN number,
MEMBER FUNCTION PRINTME() RETURN VARCHAR2) NOT FINAL;

Esta sentencia crea un tipo raíz de una jerarquía de objetos – lo novedoso aquí
es el uso de la cláusula “NOT FINAL”. La siguiente sintaxis permite crear un subtipo
[Ora02ª]:
CREATE TYPE Tipo_Empleado UNDER Tipo_PERSONA
(Sueldo NUMBER,
MEMBER FUNCTION PAGA() RETURN number,
OVERRIDING MEMBER FUNCTION PRINTME() RETURN VARCHAR2);

El tipo Tipo_Empleado hereda todos los atributos y métodos del supertipo


Tipo_Persona. En este ejemplo, hay que añadir el atributo Sueldo y la función PAGA. La
función PRINTME es rechazada para que no devuelva otro clase de valores como se
definirá más tarde en un constructor “CREATE OR REPLACE TYPE BODY” que ya se ha
descrito en la parte de implementación de Métodos.

Bases de Datos 10 Nov.


2006
DIT-ETSIT-UPM C. Costilla
Características Objetos Relacionales del SGBD Oracle
Curso 2006-07

Conclusión
Oracle ha hecho un trabajo notorio e importante al incorporar la orientación a
objetos en el mundo de las bases de datos. Aunque no se trata de un modelo objetual
puro, Oracle ha conseguido implementar muchos de los conceptos orientados a
objetos en su sistema de bases de datos objeto-relacionales. Entre otros aspectos,
Oracle incorpora la herencia, la abstracción y la encapsulación mediante el uso de los
tipos de objeto definidos por el usuario. Aquí hemos descrito las técnicas por las
cuales se puede implementar el modelo objetual de Oracle. La utilización de
posibilidades objetuales en las bases de datos ha llevado al tradicional modelo
relacional y a su tradicional teoría de diseño y la normalización de las relaciones a ser
entendidas bajo un nuevo paradigma para los sistemas de gestión de bases de datos.
Dos aspectos harán que este modelo orientado-a-objetos de Oracle llegue a ser
la metodología estándar en el diseño de bases de datos. Uno es la nueva generación
de programadores de aplicaciones que ya están codificando en la orientación a objetos
y que sigue madurando en todas las escalas de niveles profesionales; y el otro es que
la mayoría de los arquitectos de bases de datos empiezan a modelar nuevos SGBDs
sobre el paradigma orientado-a-objetos,con lo que sin duda habrá un desplazamiento
del modelo relacional al objetual. Ello provocará cambios docentes y de aprendizaje
de los SGBD. La parte objetual de los SGBD de Oracle serán estudiados de entrada,
antes de profundizar en otros aspectos, y la parte del primitivo modelo relacional será
estudiada sólo para poder tratar los sistemas legados o heredados (legacy systems).

Referencias Bibliográficas
[Burl01] Burleson, Donald (2001). The object/relational features of Oracle. TechRepublic,
Inc. http://www.dba-oracle.com/art_oracle_obj.htm, November 2, 2002.
[Dona01] Donaldson, John (2001). Nested tables and Object Tables.
http://cs.oberlin.edu/faculty/jdonalds/311/lecture27.html, November 4, 2002.
[Hans02] Hanson, Robert (2002). Object-Relational Databases in Oracle 8i.
http://www.technology.niagarac.on.ca/courses/comp708/roboo.htm, Nov. 12, 2002.
[KoLo02] Koch, G. & Loney, K. (2002). Oracle 9i: The Complete Reference. McGraw-Hill.
[LaOl99] Lassen, A. & Olsson J. (1999, February) Experiences from Object-relational
Programming in Oracle8. Center for Object Technology.
http://www.cit.dk/COT/reports/reports/Case4/06-v1.4/cot-4-06-1.4.pdf, Nov. 4, 2002.
[LiGa02] Lindstrom, Gary (2002, Sept.). Lecture 14: Oracle Extended Relational Features.
http://www.cs.utah.edu/classes/cs5530/lectures/lecture14x2.pdf, Nov. 2, 2002.
[Ora97] Oracle Corporation (1997, June). Oracle8™ Object Relational Database: An
Overview, http://technet.oracle.com/products/oracle8/info/objwp3/xoo3twp.htm,
Nov. 4, 2002
[Ora97 a] Oracle Corporation (1997). Oracle8 Concepts, Release 8.0.

Bases de Datos 11 Nov.


2006
DIT-ETSIT-UPM C. Costilla
Características Objetos Relacionales del SGBD Oracle
Curso 2006-07

Otros Sitios Web de Noviembre de 2002

http://storacle.princeton.edu:9001/oracle8-doc/server.805/a58227/ch_ordb.htm
Oracle Corporation (2002, May). Simple Strategies for Complex Data: Oracle9i Object-
Relational Technology http://otn.oracle.com/products/oracle9i/pdf/simple_strat_for
complex_rel2.pdf , Nov. 4, 2002.
Oracle Corporation (2002). Oracle9i Object-Relational Technology Feature Overview.
http://otn.oracle.com/products/oracle9i/htdocs/ort_twp.html, Nov. 10, 2002.
Oracle Corporation (2002). Basic Components of Oracle Objects . Oracle9i Application
Developer’s Guide - Object-Relational Features Release 2 (9.2).
http://csis.gvsu.edu/GeneralInfo/Oracle/appdev.920/a96594/adobjbas.htm, Nov. 4, 2002.
Oracle Corporation (2002). Introduction to Oracle Objects. Oracle9i Application
Developer’s Guide - Object-Relational Features Release 2 (9.2).
http://otn.oracle.com/products/oracle9i/htdocs/ort_twp.html, Nov. 6, 2002.
Robbert, Mary Ann (2002, April). Oracle Objects.
http://cis.bentley.edu/mrobbert/CS652/Oracleobj.ppt , November 2, 2002.

Bases de Datos 12 Nov.


2006
DIT-ETSIT-UPM C. Costilla
Características Objetos Relacionales del SGBD Oracle
Curso 2006-07

Figuras detallando la nueva sintaxis BDOR

Tabla Estudiante
CREATE TABLE Estudiante
solo_estudia (solo_estudia tipo_estudiante);
tipo-estudiante

CREATE TYPE tipo_estudiante AS OBJECT


tipo_estudiante
(id-estudiante varchar2(9),
id-estudiante persona persona tipo_persona);
varchar2(9), tipo-persona

CREATE TYPE tipo-persona AS OBJECT


tipo_persona
(nombre varchar2(25),
Nombre Dirección dirección tipo-direc);
varchar2(25), tipo-direc

tipo_direc CREATE TYPE tipo_direc AS OBJECT


(calle varchar2(60),
Calle Ciudad País CP ciudad varchar2(30),
varchar2(60) varchar2(30) char(2) varchar(9) pais char(2),
CP varchar(9));

Bases de Datos 13 Nov.


2006
DIT-ETSIT-UPM C. Costilla
Características Objetos Relacionales del SGBD Oracle
Curso 2006-07

Tabla
PERSONA_NUEVA CREATE TABLE PERSONA_NUEVA OF tipo_nuevapersona;

tipo_nuevapersona

tipo_nuevapersona
nombre apellido Fecha_nac member function
varchar2(60) varchar2(30) date EDAD (Fecha_Nac in DATE) return NUMBER;

CREATE or REPLACE TYPE tipo_nuevapersona AS object


(nombre varchar2(25),
apellido varchar2(25),
fecha_nac date,
member function EDAD (Fecha_Nac in DATE) return NUMBER;

CREATE or REPLACE TYPE BODY tipo_nuevapersona AS


member function EDAD (Fecha_Nac in DATE) return NUMBER
IS
begin
return ROUND(SysDate – Fecha_Nac);
end;
end;
Creada la Tabla, se pueden insertar valores

INSERT INTO PERSONA_NUEVA VALUES


(tipo_nuevapersona (‘Juan’, ‘Sanchez’, TO_DATE (‘03-FEB-1970’, ‘DD-MON-YYYY’)));

Para verificar la función EDAD podemos hacer lo siguiente:


SELECT P. tipo_nuevapersona.EDAD (P. tipo_nuevapersona.Fecha_Nac)
FROM PERSONA_NUEVA P;

Resultado:
P. tipo_nuevapersona.EDAD (P. tipo_nuevapersona. Fecha_Nac )
12005

Bases de Datos 14 Nov.


2006
DIT-ETSIT-UPM C. Costilla
Características Objetos Relacionales del SGBD Oracle
Curso 2006-07

Tabla NUEVODEPARTMENTO
CREATE TABLE NUEVODEPARTMENTO
NomDept PersonaEn (NomDept VARCHAR(30),
VARCHAR(30) tipo_nuevapersona PersonaEn REF tipo_nuevapersona);

tipo_nuevapersona
nombre apellido Fecha_nac member function
varchar2(60) varchar2(30) date EDAD (Fecha_Nac in DATE) return NUMBER;

INSERT INTO NUEVODEPARTMENTO


SELECT ‘Investigación’,
REF(P)
FROM PERSONA_NUEVA P
WHERE Apellido = ‘Sanchez’;

Bases de Datos 15 Nov.


2006
DIT-ETSIT-UPM C. Costilla