Modelo Objeto Relacional SNM
-
Upload
marcelovirreira2010 -
Category
Documents
-
view
129 -
download
1
Transcript of Modelo Objeto Relacional SNM
Modelo Objeto-Relacional
… una aplicación en Oracle
MSc. Ing. Sandro Nieto MéndezMSc. Ing. Sandro Nieto Méndez
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
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
Modelo Objeto-RelacionalModelo Objeto-Relacional
Object Type
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,...... ]])[;]
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,
...];
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
);/
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;/
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);/
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.
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.
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')
Modelo Objeto-RelacionalModelo Objeto-Relacional
Métodos Member
Útiles en la comparación de objetos, estos son: map methods, yorder methods.
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;/
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;
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
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.
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;
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;
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
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);
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).
Modelo Objeto-RelacionalModelo Objeto-Relacional
Representación Gráfica de los tipos colección
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
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, …);
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;
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
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
Modelo Objeto-RelacionalModelo Objeto-Relacional
COMPRESS – NO COMPRESS
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
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)
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
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;
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(),...);
Ahora un ejemplo…
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
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 *
Modelo Objeto-RelacionalModelo Objeto-Relacional
Los scripts
Modelo Objeto-RelacionalModelo Objeto-Relacional
Modelo Objeto-RelacionalModelo Objeto-Relacional
Modelo Objeto-RelacionalModelo Objeto-Relacional
Preguntas o comentarios …
Gracias …
Contactos a:[email protected] [email protected]