Modelo Objeto Relacional SNM

43
Modelo Objeto-Relacional … una aplicación en Oracle MSc. Ing. Sandro Nieto Méndez MSc. Ing. Sandro Nieto Méndez

Transcript of Modelo Objeto Relacional SNM

Page 1: Modelo Objeto Relacional SNM

Modelo Objeto-Relacional

… una aplicación en Oracle

MSc. Ing. Sandro Nieto MéndezMSc. Ing. Sandro Nieto Méndez

Page 2: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Motivación

Limitaciones de tipos de datos

Bases de Datos Relacionales extendidas

Bases de Datos Orientadas a Objetos

Bases de Datos Objeto-RelacionalesO.O., tipos complejos de datos y métodosRelacionales, DDL y DML relacional

Page 3: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Object Type

Es un tipo de datos definido por el usuario

Encapsula datos en una estructura y métodos necesarios para manipularos

Un objeto es una instancia de un object type

Compuesto por: especificación y cuerpo

Page 4: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Object Type

Page 5: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Object Type - Especificación

Sintaxis:CREATE [OR REPLACE] TYPE type_name IS|AS OBJECT( attribute1 datatype,

attribute2 datatype,...[ MEMBER procedure1|function1 spec,

MEMBER procedure2|function2 spec,...... ]])[;]

Page 6: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Object Type - Cuerpo

Sintaxis:

CREATE [OR REPLACE] TYPE_ BODY type_name IS|AS

[MEMBER procedure1|function1 body,

procedure2|function2 body,

...];

Page 7: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Creación de la especificación

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

);/

Page 8: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Creación del cuerpo

CREATE OR REPLACE TYPE_BODY name_typ AS

MEMBER FUNCTION full_name RETURN VARCHAR2ISBEGIN

RETURN (f_name || ' ' || l_name );END full_name;

END;/

Page 9: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Especificación 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 typeaddress VARCHAR2(100),country VARCHAR2(50),

MEMBER PROCEDURE insert_record,MEMBER PROCEDURE delete_record);/

Page 10: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Métodos

Fundamentales Métodos Static, son invocados en el tipo

de objeto, no en instancias u objetos. Métodos constructores Métodos Member, son un medio por el

cual una aplicación obtiene acceso a los datos instanciados de un objeto.

Page 11: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Métodos constructores

Cada tipo de objeto tiene un constructorEs una función definida por el sistema con el mismo nombre que el objetoEl constructor se utiliza para inicializar y devolver una instancia de ese tipo de objetoLos parámetros del método constructor coinciden con los atributos del tipo de objeto, esto es, el número de parámetros es igual al número de atributos del tipo de objeto, los parámetros se declaran en el mismo orden y tienen el mismo tipo de dato.

Page 12: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Ejemplo método constructor

1. Para la siguiente descripción del tipoSQL>DESCRIBE name_typName Null? Type----------------- --------- -------- ----F_NAME VARCHAR2(25)L_NAME VARCHAR2(25)INITIALS VARCHAR2(2)

2. El constructor sería:name_typ(‘Juan', ‘Perez', ‘JP')

Page 13: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Métodos Member

Útiles en la comparación de objetos, estos son: map methods, yorder methods.

Page 14: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Ejemplo map method1. Creamos la especificación del objetoCREATE TYPE pperson AS OBJECT(ppid number(3),ppnom varchar2(10),ppfnac date,MAP MEMBER FUNCTION edad RETURN

NUMBER);/2. Creamos el cuerpo del tipoCREATE OR REPLACE TYPE BODY pperson ASMAP MEMBER FUNCTION edad RETURN

NUMBER ISa NUMBER;d DATE;BEGIN d := SYSDATE; a := TRUNC((d-ppfnac)/365);RETURN a;END;END;/

Page 15: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Ejemplo order method1. Creamos la especificación del objetoCREATE 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 objetoCREATE TYPE BODY Customer_typ ASORDER MEMBER FUNCTION igual_a (c Customer_typ) RETURN INTEGER ISBEGINIF id < c.id THENRETURN -1; ELSIF id > c.id THENRETURN 1; ELSERETURN 0;END IF;END;END;

Page 16: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Diccionario de Datos métodos del object typeLa información sobre métodos de los object type puede ser encontrada en:USER_METHOD_PARAMSUSER_METHOD_RESULTSUSER_TYPE_METHODSUSER_SOURCE

Page 17: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Objetos en Relaciones

Los Objetos pueden ser representados en Relaciones, de dos maneras:

1. Definir una relación (tabla) de un tipo objeto, cada fila representa un objeto instanciado.

2. Definir una relación (tabla), donde una o mas columnas son de un tipo objeto. Dada una fila y la columna definida, almacena un objeto instanciado.

Page 18: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Caso 1. Tabla de objetos

1. Con el siguiente tipo de objetoCREATE 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 tablaCREATE TABLE name_tab OF name_typ;

Page 19: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Caso 2. Tabla con columna de objetos

1. Con el siguiente tipo de objetoCREATE OR REPLACE TYPE people_typ AS OBJECT( emp_id NUMBER(7),

name name_typ, -- el tipo de dato es object typeaddress VARCHAR2(100),country VARCHAR2(50),

MEMBER PROCEDURE insert_record,MEMBER PROCEDURE delete_record);

2. Se define y crea la estructura de la tablaCREATE TABLE people_tab OF people_typ;

Page 20: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Tipo de dato REF

Es un puntero lógico a un objeto fila

Modelan las asociaciones entre objetos

Usando un REF es posible examinar o actualizar el objeto referenciado

Page 21: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Ejemplo con tipo de dato REF

1. Creamos el tipoCREATE OR REPLACE TYPE

Producto_objtyp AS OBJECT (pro_id VARCHAR2(10),pro_nom VARCHAR2(50),pro_stock NUMBER,pro_prec NUMBER);2. Creamos la tablaCREATE TABLE Producto_objtab

OF Producto_objtyp

1. Creamos una tablaCREATE TABLE

Det_Pedido_objtab (dpitem_no NUMBER,dpitem_prod REF Producto_objtyp

SCOPE IS Producto_objtab,dpitem_cant NUMBER);

Page 22: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Tipos de datos Colección

Es un grupo de elementos, todos del mismo tipoContradice la 1FNHacen 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 podrán ser definidos del tipo colección

Los tipos de datos colección son utilizados como los otros tipos de datos

Oracle soporta dos tipos de datos colección: varrays (array variables) y nested tables (tablas anidadas).

Page 23: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Representación Gráfica de los tipos colección

Page 24: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Tipo de datos VARRAY

Arreglos de longitud variableSon una colección finita y definida de elementos ordenadosLos items del tipo VARRAY tienen asociados un identificador para toda la colecciónCada elemento posee un número de posición, que permite acceder a un elemento particular

Page 25: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Creación de un VARRAY

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

En PL/SQLTYPE type_name AS VARRAY (max_elements) OFelement datatype [NOT NULL];

EjemploCREATE TYPE List_Telefono_vartyp AS VARRAY(10) OF VARCHAR2(20);CREATE TYPE Cliente_objtyp AS OBJECT (…, cli_tels List_Telefono_vartyp, …);

Page 26: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Tipo de dato NESTED TABLE

En base de datosCREATE [OR REPLACE] TYPE type_name AS TABLE

OF element datatype [NOT NULL];

En PL/SQLTYPE type_name AS TABLE OFelement datatype [NOT NULL];

Ejemplo

CREATE TYPE LineaItemLista_ntabtyp AS TABLE OF Det_Pedido_objtyp;

Page 27: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

CREATE OR REPLACE TYPE Det_Pedido_objtyp AS OBJECT (dpitem_no NUMBER,dpitem_prod REF Producto_objtyp,dpitem_cantNUMBER);

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 KEYNESTED TABLE LineaItemLista_ntab STORE AS LineaPedido_ntab((PRIMARY KEY(NESTED_TABLE_ID, dpitem_no))ORGANIZATION INDEX COMPRESS)RETURN AS LOCATOR

Page 28: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo 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

Page 29: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

COMPRESS – NO COMPRESS

Page 30: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

¿VARRAY ó NESTED TABLES?

Usar un VARRAY, si:El orden en que se almacenan los elementos de la colección es relevanteSi se conoce el número de elementos que tendrá la colección

Usar un NESTED TABLE, si:El tamaño y el orden no son especialmente relevantesSe necesita consultar dentro de la colección

Page 31: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Tipos Heredados

Permite tipos que comparten características similaresConsiste en supertipos y subtiposLos subtipos heredan las características (atributos y métodos) del supertipoLos subtipos pueden especializarse, adicionando sus propios atributosLos subtipos pueden especializarse, adicionando sus propios métodos ó sobreescribiendo los heredados(override,overload)

Page 32: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Declaración 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

Page 33: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Ejemplos1. 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;

Page 34: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Herencia de métodosSobrecarga(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(),...);

Page 35: Modelo Objeto Relacional SNM

Ahora un ejemplo…

Page 36: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Breve descripción

Un clásico sistema de control de pedidos e inventarios

Los clientes realizan pedidos

Cada pedido considera muchos productos y en cantidades distintas por cada producto

Page 37: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Diagrama de Clases

+compare_cliente()

-cli_no-cli_nom-cli_dir : direccion-cli_tels : telefono

CLIENTE

-ped_no-cli_ref : CLIENTE-ped_fecha-ped_fec_env-LineaItemLista_ntab : DET_PED-ped_dir_env : direccion

PEDIDO

-pro_id-pro_nom-pro_stock-pro_cost

PRODUCTO

-dpitem_no-dpitem_prod : PRODUCTO-dpitem_cant

DET_PED

-numero

telefono

-tiene

1

-

0..10-dir_calle-dir_ciudad-dir_pais

direccion-tiene

1

-

1

1

*

-tiene

1

- 1

* 11 *

Page 38: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Los scripts

Page 39: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Page 40: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Page 41: Modelo Objeto Relacional SNM

Modelo Objeto-RelacionalModelo Objeto-Relacional

Page 42: Modelo Objeto Relacional SNM

Preguntas o comentarios …

Page 43: Modelo Objeto Relacional SNM

Gracias …

Contactos a:[email protected] [email protected]