Está en la página 1de 43

Modelo Objeto-Relacional

una aplicacin en Oracle


MSc. Ing. Sandro Nieto Mndez

Motivacin
Limitaciones de tipos de datos Bases de Datos Relacionales extendidas Bases de Datos Orientadas a Objetos Bases de Datos Objeto-Relacionales
O.O., tipos complejos de datos y mtodos Relacionales, DDL y DML relacional

Modelo Objeto-Relacional

Object Type
Es un tipo de datos definido por el usuario Encapsula datos en una estructura y mtodos necesarios para manipularos Un objeto es una instancia de un object type Compuesto por: especificacin y cuerpo
Modelo Objeto-Relacional

Object Type

Modelo Objeto-Relacional

Object Type Especificacin


Sintaxis:
CREATE [OR REPLACE] TYPE type_name IS|AS OBJECT ( attribute1 datatype, attribute2 datatype, ... [ MEMBER procedure1|function1 spec, MEMBER procedure2|function2 spec, ... ... ] ] )[;]

Modelo Objeto-Relacional

Object Type - Cuerpo


Sintaxis:
CREATE [OR REPLACE] TYPE_ BODY type_name IS|AS [MEMBER procedure1|function1 body, procedure2|function2 body, ...];

Modelo Objeto-Relacional

Creacin de la especificacin
CREATE OR REPLACE TYPE name_typ AS OBJECT ( f_name VARCHAR2(25), l_name VARCHAR2(25), initials VARCHAR2(7),
MEMBER FUNCTION full_name RETURN VARCHAR2 ); /

Modelo Objeto-Relacional

Creacin del cuerpo


CREATE OR REPLACE TYPE_BODY name_typ AS
MEMBER FUNCTION full_name RETURN VARCHAR2 IS BEGIN RETURN (f_name || ' ' || l_name ); END full_name; END; /

Modelo Objeto-Relacional

Especificacin de un tipo complejo


CREATE OR REPLACE TYPE people_typ AS OBJECT ( emp_id NUMBER(7), name name_typ, -- el tipo de dato es object type address VARCHAR2(100), country VARCHAR2(50),
MEMBER PROCEDURE insert_record, MEMBER PROCEDURE delete_record); /

Modelo Objeto-Relacional

Mtodos
Fundamentales

Mtodos Static, son invocados en el tipo de objeto, no en instancias u objetos. Mtodos constructores Mtodos Member, son un medio por el cual una aplicacin obtiene acceso a los datos instanciados de un objeto.

Modelo Objeto-Relacional

Mtodos constructores
Cada tipo de objeto tiene un constructor Es una funcin definida por el sistema con el mismo nombre que el objeto El constructor se utiliza para inicializar y devolver una instancia de ese tipo de objeto Los parmetros del mtodo constructor coinciden con los atributos del tipo de objeto, esto es, el nmero de parmetros es igual al nmero de atributos del tipo de objeto, los parmetros se declaran en el mismo orden y tienen el mismo tipo de dato.
Modelo Objeto-Relacional

Ejemplo mtodo constructor


1. Para la siguiente descripcin del tipo SQL>DESCRIBE name_typ Name Null? Type ----------------- ---------------- ---F_NAME VARCHAR2(25) L_NAME VARCHAR2(25) INITIALS VARCHAR2(2)
2. El constructor sera: name_typ(Juan', Perez', JP')
Modelo Objeto-Relacional

Mtodos Member
tiles en la comparacin de objetos, estos son:
map methods, y order methods.

Modelo Objeto-Relacional

Ejemplo map method


1. Creamos la especificacin del objeto CREATE TYPE pperson AS OBJECT( ppid number(3), ppnom varchar2(10), ppfnac date, MAP MEMBER FUNCTION edad RETURN NUMBER ); / 2. Creamos el cuerpo del tipo CREATE OR REPLACE TYPE BODY pperson AS MAP MEMBER FUNCTION edad RETURN NUMBER IS a NUMBER; d DATE; BEGIN d := SYSDATE; a := TRUNC((d-ppfnac)/365); RETURN a; END; END; /

Modelo Objeto-Relacional

Ejemplo order method


1. Creamos la especificacin del objeto CREATE TYPE Customer_typ AS OBJECT ( id NUMBER, name VARCHAR2(20), addr VARCHAR2(30), ORDER MEMBER FUNCTION igual_a (c Customer_typ) RETURN INTEGER ); / 2. Creamos el cuerpo del objeto CREATE TYPE BODY Customer_typ AS ORDER MEMBER FUNCTION igual_a (c Customer_typ) RETURN INTEGER IS BEGIN IF id < c.id THEN RETURN -1; ELSIF id > c.id THEN RETURN 1; ELSE RETURN 0; END IF; END; END;

Modelo Objeto-Relacional

Diccionario de Datos mtodos del object type


La informacin sobre mtodos de los object type puede ser encontrada en:
USER_METHOD_PARAMS USER_METHOD_RESULTS USER_TYPE_METHODS USER_SOURCE

Modelo Objeto-Relacional

Objetos en Relaciones
Los Objetos pueden ser representados en Relaciones, de dos maneras: 1. Definir una relacin (tabla) de un tipo objeto, cada fila representa un objeto instanciado. 2. Definir una relacin (tabla), donde una o mas columnas son de un tipo objeto. Dada una fila y la columna definida, almacena un objeto instanciado.
Modelo Objeto-Relacional

Caso 1. Tabla de objetos


1. Con el siguiente tipo de objeto CREATE OR REPLACE TYPE name_typ AS OBJECT ( f_name VARCHAR2(25), l_name VARCHAR2(25), initials VARCHAR2(7), MEMBER FUNCTION full_name RETURN VARCHAR2 );
2. Se define y crea la estructura de la tabla CREATE TABLE name_tab OF name_typ;
Modelo Objeto-Relacional

Caso 2. Tabla con columna de objetos


1. Con el siguiente tipo de objeto CREATE OR REPLACE TYPE people_typ AS OBJECT ( emp_id NUMBER(7), name name_typ, -- el tipo de dato es object type address VARCHAR2(100), country VARCHAR2(50), MEMBER PROCEDURE insert_record, MEMBER PROCEDURE delete_record);
2. Se define y crea la estructura de la tabla CREATE TABLE people_tab OF people_typ;
Modelo Objeto-Relacional

Tipo de dato REF


Es un puntero lgico a un objeto fila Modelan las asociaciones entre objetos Usando un REF es posible examinar o actualizar el objeto referenciado

Modelo Objeto-Relacional

Ejemplo con tipo de dato REF


1. Creamos el tipo CREATE OR REPLACE TYPE Producto_objtyp AS OBJECT ( pro_id VARCHAR2(10), pro_nom VARCHAR2(50), pro_stock NUMBER, pro_prec NUMBER ); 2. Creamos la tabla CREATE TABLE Producto_objtab OF Producto_objtyp 1. Creamos una tabla CREATE TABLE Det_Pedido_objtab ( dpitem_no NUMBER, dpitem_prod REF Producto_objtyp SCOPE IS Producto_objtab, dpitem_cant NUMBER );

Modelo Objeto-Relacional

Tipos de datos Coleccin


Es un grupo de elementos, todos del mismo tipo Contradice la 1FN Hacen del Modelo Objeto Relacional, un NFNF NF2 (Non First Normal Form No en Primera Forma Normal) De acuerdo al Modelo Objeto Relacional

Algunos dominios de columnas podrn ser definidos del tipo coleccin Los tipos de datos coleccin son utilizados como los otros tipos de datos

Oracle soporta dos tipos de datos coleccin: varrays (array variables) y nested tables (tablas anidadas).
Modelo Objeto-Relacional

Representacin Grfica de los tipos coleccin

Modelo Objeto-Relacional

Tipo de datos VARRAY


Arreglos de longitud variable Son una coleccin finita y definida de elementos ordenados Los items del tipo VARRAY tienen asociados un identificador para toda la coleccin Cada elemento posee un nmero de posicin, que permite acceder a un elemento particular
Modelo Objeto-Relacional

Creacin de un VARRAY
En base de datos
CREATE [OR REPLACE] TYPE type_name AS VARRAY (max_elements) OF element datatype [NOT NULL];

En PL/SQL
TYPE type_name AS VARRAY (max_elements) OF element datatype [NOT NULL];

Ejemplo
CREATE TYPE List_Telefono_vartyp AS VARRAY(10) OF VARCHAR2(20); CREATE TYPE Cliente_objtyp AS OBJECT (, cli_tels List_Telefono_vartyp, );
Modelo Objeto-Relacional

Tipo de dato NESTED TABLE


En base de datos
CREATE [OR REPLACE] TYPE type_name AS TABLE OF element datatype [NOT NULL];

En PL/SQL
TYPE type_name AS TABLE OF element datatype [NOT NULL];

Ejemplo
CREATE TYPE LineaItemLista_ntabtyp AS TABLE OF Det_Pedido_objtyp;
Modelo Objeto-Relacional

CREATE OR REPLACE TYPE Det_Pedido_objtyp AS OBJECT ( dpitem_no NUMBER, dpitem_prod REF Producto_objtyp, dpitem_cant NUMBER); CREATE TYPE LineaItemLista_ntabtyp AS TABLE OF Det_Pedido_objtyp;

CREATE TYPE Pedido_objtyp AS OBJECT ( , ped_no NUMBER, LineaItemLista_ntab LineaItemLista_ntabtyp, );


CREATE TABLE Pedido_objtab OF Pedido_objtyp ( PRIMARY KEY (ped_no), OBJECT IDENTIFIER IS PRIMARY KEY NESTED TABLE LineaItemLista_ntab STORE AS LineaPedido_ntab( (PRIMARY KEY(NESTED_TABLE_ID, dpitem_no)) ORGANIZATION INDEX COMPRESS) RETURN AS LOCATOR

Modelo Objeto-Relacional

Detalle de tabla anidada


NESTED TABLE LineaItemLista_ntab STORE AS LineaPedido_ntab( (PRIMARY KEY(NESTED_TABLE_ ID, dpitem_no)) ORGANIZATION INDEX COMPRESS) RETURN AS LOCATOR
Modelo Objeto-Relacional

COMPRESS NO COMPRESS

Modelo Objeto-Relacional

VARRAY NESTED TABLES?


Usar un VARRAY, si: El orden en que se almacenan los elementos de la coleccin es relevante Si se conoce el nmero de elementos que tendr la coleccin Usar un NESTED TABLE, si: El tamao y el orden no son especialmente relevantes Se necesita consultar dentro de la coleccin
Modelo Objeto-Relacional

Tipos Heredados
Permite tipos que comparten caractersticas similares Consiste en supertipos y subtipos Los subtipos heredan las caractersticas (atributos y mtodos) del supertipo Los subtipos pueden especializarse, adicionando sus propios atributos Los subtipos pueden especializarse, adicionando sus propios mtodos sobreescribiendo los heredados(override,overload)
Modelo Objeto-Relacional

Declaracin de tipos
Las declaraciones de tipos pueden ser: FINAL: No puede tener subtipos NOT FINAL: Puede tener subtipos INSTANTIABLE: Tiene constructor NOT INSTANTIABLE: No tiene constructor
Modelo Objeto-Relacional

Ejemplos
1. Permite subtipos e instancias.
CREATE OR REPLACE TYPE cat_typ AS OBJECT( cat_name varchar2(50), cat_description varchar2(1000) , cat_id number(2)) NOT FINAL;

2. Permite subtipos, pero no instancias.


CREATE OR REPLACE TYPE cat_typ AS OBJECT (cat_name varchar2(50) , cat_description varchar2(1000), cat_id number(2)) NOT INSTANTIABLE NOT FINAL;
Modelo Objeto-Relacional

Herencia de mtodos
Sobrecarga(overloading) CREATE TYPE MyType_typ AS OBJECT (..., MEMBER PROCEDURE foo(x NUMBER), ...) NOT FINAL; CREATE TYPE MySubType_typ UNDER MyType_typ (..., MEMBER PROCEDURE foo(x DATE), );
Sobreescritura (overriding) CREATE TYPE MyType_typ AS OBJECT (..., MEMBER PROCEDURE Print(), ...) NOT FINAL; CREATE TYPE MySubType_typ UNDER MyType_typ (..., OVERRIDING MEMBER PROCEDURE Print(), ...);

Modelo Objeto-Relacional

Ahora un ejemplo

Breve descripcin
Un clsico sistema de control de pedidos e inventarios Los clientes realizan pedidos Cada pedido considera muchos productos y en cantidades distintas por cada producto

Modelo Objeto-Relacional

Diagrama de Clases
CLIENTE telefono -numero -tiene 0..10 1 -cli_no -cli_nom -cli_dir : direccion -cli_tels : telefono +compare_cliente() 1 -tiene direccion -dir_calle -dir_ciudad -dir_pais

* PEDIDO -ped_no -cli_ref : CLIENTE -ped_fecha -ped_fec_env -LineaItemLista_ntab : DET_PED -ped_dir_env : direccion -tiene DET_PED 1 1 * -dpitem_no -dpitem_prod : PRODUCTO -dpitem_cant PRODUCTO -pro_id -pro_nom -pro_stock -pro_cost

Modelo Objeto-Relacional

Los scripts

Modelo Objeto-Relacional

Modelo Objeto-Relacional

Modelo Objeto-Relacional

Modelo Objeto-Relacional

Preguntas o comentarios

Gracias

Contactos a: nieto@ucbtja.edu.bo sanieto@hotmail.com

También podría gustarte