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 < [Link] THEN RETURN -1; ELSIF id > [Link] 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@[Link] sanieto@[Link]