BASE DE DATOS OBJETO RELACIONAL INTRODUCCION CARACTERISTICAS Y
BASE DE DATOS OBJETO RELACIONAL INTRODUCCION CARACTERISTICAS Y VENTAJAS TIPOS DE DATOS DEFINIDOS POR EL USUARIO REFERENCIAS ENTRE OBJETOS
Introducción Modelo Orientado a Objetos Modelo Relacional Modelo Objeto. Relacional
Características y Ventajas Ø Ø Ø Ø Creación de Nuevos tipos de datos. Manejo de Métodos para los tipos de datos. Creación de funciones miembro, usando tipos de datos definidos por el usuario permitiendo flexibilidad y seguridad. Permite almacenar datos complejos sin necesidad de forzar los tipos de datos tradicionales. Compatible con las Base de datos relacionales. (pasar de relacionales a objeto relacional). Estructura de datos son tablas, pero permite utilizar los mecanismos de orientado a objetos para definir y acceder a los datos. Una columna de tabla puede ser construida a partir de un tipo de dato definido (multivaluado) y tablas anidadas Existen relaciones de asociación y de agregación.
Tipos de datos definidos por el usuario Es una estructura y un comportamiento común para un conjunto de datos de las aplicaciones. Ø Categorías: Ø Tipos de objetos (Object type) Ø Tipos para colecciones (collection type) Ø
Tipos de objetos Ø Representa una entidad del mundo real y se compone de: Nombre Ø Atributos: pueden ser de tipo de dato básico o de un tipo de usuario. Ø Métodos: en PL/SQL o C. Ø
Tipos de objetos Ø Sintaxis: CREATE TYPE nombre_objeto AS OBJECT ( Atributo tipos_dato, …, [MEMBER FUNCTION nombre_método RETURN tipo_dato])
Ejemplo: CREATE TYPE direccion_t AS OBJECT( numero VARCHAR(200), barrio VARCHAR(200)) Ø CLIENTE CREATE TYPE cliente_t AS OBJECT( nit VARCHAR(20), Nombre VARCHAR(30), direccion_t, Telefono VARCHAR(10) Fecha_nac DATE, MEMBER FUNCTION edad RETURN NUMBER); nit Nombre Numero Barrio Telefono Fecha_nac
Constructores Ø Los tipos de objetos de ORACLE tienen asociado un método que construye nuevos objetos de ese tipo de acuerdo a la especificación del tipo.
Tablas de objetos Es una clase especial de tabla que almacena un objeto en cada fila y que facilita el acceso a los atriutos de esos objetos como si fueran columnas de la tabla. Ø Sintaxis: Ø CREATE TABLE nombre_tabla OF nombre_objeto ([nombre_atributo PRIMARY KEY, nombre_atributo 2 tipo_dato], …);
Ø Ejemplo: Clientes de este año y antiguos. CREATE TABLE clientes_año_tab OF cliente_t (clinum PRIMARY KEY); CREATE TABLE clientes_antiguos_tab ( año NUMBER, cliente_t);
Referencia entre objetos Ø Ø Ø REF: almacena una referencia a un objeto del tipo definido, e implementa una relación de asociación entre los dos tipos de objetos. Se utilizan para acceder a los objetos referenciados y para modificarlos. La columna REF restringe su dominio a los objetos que se almacenen en cierta tabla.
Ø Ejemplo: CREATE TABLE clientes_tab OF cliente_t; CREATE TYPE ordenes_t AS OBJECT ( ordnum NUMBER, cliente REF clientes_t, fechpedido DATE, direcentrega direccion_t); CREATE TABLE ordenes_tab OF ordenes_t ( PRIMARY KEY (ordnum), SCOPE FOR (cliente) IS clientes_tab);
Tipos de datos colección Esta formado por un número indefinido de elementos, todos del mismo tipo. Ø Se pueden almacenar como array o tabla anidada. Ø Es diferente un valor nulo y una colección vacía. Ø
Tipo VARRAY Es un conjunto ordenado de elementos del mismo tipo. Ø Cada elemento tiene un índice. Ø Pueden ser de longitud variable, aunque debe tener un tamaño máximo. Sintaxis: CREATE TYPE nombre AS VARRAY(tamaño) OF tipo_dato; Ø
Ø Se pueden utilizar para: Ø Ø Ø Definir el tipo de dato de una columna de una tabla relacional. Definir el tipo de dato de un atributo de un tipo de objeto. Para definir una variable en PL/SQL. No producen reserva de espacio. Si es muy grande se almacena aparte de la tabla como un BLOB. La principal limitación es que no se puede poner condiciones sobre los elementos almacenados dentro. Solo se pueden acceder como un bloque, pero en PL/SQL si es posible a través de un bucle.
Ø Ejemplo: CREATE TYPE lista_tel_t AS VARRAY(10) OF VARCHAR 2(20) ; CREATE TYPE cliente_t AS OBJECT ( clinum NUMBER, clinomb VARCHAR 2(200), direccion_t, lista_tel_t );
Tablas anidadas Es un conjunto de elementos del mismo tipo sin ningún orden predefinido. Ø Solo pueden tener una columna, del tipo de dato de oracle o definido por el usuario. Ø
Pasos para construirlas Ø Definir el tipo de objeto para las filas de la tabla anidada. CREATE TYPE linea_t AS OBJECT ( linum NUMBER, item VARCHAR 2(30), cantidad NUMBER, descuento NUMBER(6, 2)); Ø Definir el tipo colección tabla para después anidarla. CREATE TYPE lineas_pedido_t AS TABLE OF linea_t Ø Se define el tipo objeto y su atributo el cual almacena una tabla anidada del tipo.
Ejemplo Creación del tipo que manejará el detalle de la factura CREATE TYPE det_factura AS OBJECT ( item_articulo ref articulo_t, cantidad int) / Ø Creación del tipo que manejará el tipo que necesitamos sea anidado como tabla. CREATE TYPE lista_items AS TABLE OF det_factura; ; CREATE TYPE lista_items AS TABLE OF Ø En este ejemplo se crea el TYPE de factura_t y luego la tabla de dicho tipo, pero también se puede crear la tabla Factura directamente. 1 n CREATE TYPE factura _t AS OBJECT( Cliente_t Factura_t nro_fac int, fecha date, cliente ref cliente_t, 1 n articulos_fac lista_items) Articulo_t Det_factura CREATE TABLE Factura ( nro_fac PRIMARY KEY) NESTED TABLE articulos_fac STORE AS itemsfac; Ø
INSERCIÓN Y ACCESO A LOS DATOS
ALIAS Ø Ø Ø Los alias sirven para acceder al contenido de la tabla, pero hay que saber utilizarlos adecuadamente en las tablas que almacenan objetos. Deben ser únicos dentro del contexto. Ejemplo: Ø Ø CREATE TYPE persona AS OBJECT (nombre VARCHAR(20)); CREATE TABLE ptab 1 OF persona; CREATE TABLE ptab 2 (c 1 persona); CREATE TABLE ptab 3 (c 1 REF persona);
INSERCIÓN DE REFERENCIAS Ø Ø La inserción de objetos con referencias implica la utilización del operador REF para poder insertar la referencia en el atributo adecuado. EJEMPLO: INSERT INTO ordenes_tab SELECT 3001, REF(C), '30 -MAY-1999', NULL --se seleccionan los valores de los 4 atributos de la tabla FROM cliente_tab C WHERE C. clinum= 3;
INSERCIÓN EN TABLAS ANIDADAS Ø Además del constructor del tipo de colección disponible por defecto, la inserción de elementos dentro de una tabla anidada puede hacerse siguiendo estas dos etapas: Ø Crear el objeto con la tabla anidada y dejar vacío el campo que contiene las tuplas anidadas. Ø Comenzar a insertar tuplas en la columna correspondiente de la tupla seleccionada por una subconsulta. Para ello, se tiene que utilizar la palabra clave THE con la siguiente sintaxis: INSERT INTO THE (subconsulta) (tuplas a insertar)
INSERCIÓN EN TABLAS ANIDADAS Ø Esta técnica es especialmente útil si dentro de una tabla anidada se guardan referencias a otros objetos. El siguiente ejemplo ilustra la manera de realizar estas operaciones sobre la tabla de ordenes (ordenes_tab) definidas anteriormente. INSERT INTO ordenes_tab --inserta una orden SELECT 3001, REF(C), SYSDATE, '30 -MAY-1999', lineas_pedido_t(), NULL FROM cliente_tab C WHERE C. clinum= 3 ; INSERT INTO THE ( --selecciona el atributo pedido de la orden SELECT P. pedido FROM ordenes_tab P WHERE P. ordnum = 3001 ) VALUES (linea_t(30, NULL, 18, 30)); --inserta una línea de pedido anidada
INSERCIÓN EN TABLAS ANIDADAS Ø Ø Para poner condiciones a las tuplas de una tabla anidada, se pueden utilizar cursores dentro de un SELECT o desde un programa PL/SQL. Veamos aquí un ejemplo de acceso con cursores. Utilizando el ejemplo de la sección 1. 1. 4. 2, vamos a recuperar el número de las ordenes, sus fechas de pedido y las líneas de pedido que se refieran al item ‘CH 4 P 3’. SELECT ordnum, ord. fechpedido, CURSOR (SELECT * FROM TABLE(ord. pedido) lp WHERE lp. item= ‘CH 4 P 3’) FROM ordenes_tab ord; La cláusula THE también sirve para seleccionar las tuplas de una tabla anidada. La sintaxis es como sigue: SELECT. . . FROM THE (subconsulta) WHERE. . . Ø Por ejemplo, para seleccionar las primeras dos líneas de pedido de la orden 8778 se hace: SELECT lp FROM THE (SELECT ord. pedido FROM ordenes_tab ord WHERE ordnum= 8778) lp WHERE lp. linum<3;
- Slides: 25