Objeto-relacional en SQL : Tema 10. SBD Objeto-Relacionales • Object-Relational and Extended-Relational Systems Elmasri/Navathe 04 • • • • Objeto-relacional en SQL Objeto-relacional en Oracle 8 Se conoce como objeto-relacional a la ampliación de ciertos SGBD relacionales con características de orientación a objetos. SQL-99 es un subconjunto ya aprobado de la próxima versión de SQL, llamada SQL3. Constructores de tipo: create type tipo_dir as ( calle varchar(20), ciudad varchar(20), cod_postal char(5) ); create type tipo_empl as ( nombre varchar(20), apellido varchar(20), direccion tipo_dir ); Definición de un tipo de usuario tipo de usuario para definir otro tipo Vector de 10 posiciones de create type tipo_empr as ( tipo varchar(20) nombre varchar(20), lugares varchar(20) array[10] ); create table empresa of tipo_empr; create table empleado of tipo_empl; tipos de usuario para definir tablas • © A. Jaime 2005 DBD Tema 10 1 Objeto-relacional en SQL : identificadores de objeto usando referencias • Definición de identificadores de objetos para tablas. Además de system generated puede ser derived (que utiliza la clave primaria como identificador): create table empleado of tipo_empl ref is id_empl system generated; create table empresa of tipo_empr ( ref is id_empr system generated, También pueden primary key(nombre) ); tener claves primarias • Un atributo puede ser una referencia a un identificador de tupla (equivalentente a clave extranjera): Por ejemplo empresa.lugares[10] es el 10º elemento del vector y empleado.direccion.ciudad el campo ciudad de la dirección © A. Jaime 2005 DBD Tema 10 2 Objeto-relacional en SQL : identificadores de objeto usando referencias (2) • Los identificadores de objeto también pueden figurar en una definición de tipo: create type tipo_empl as ( Equivale a nombre varchar(20), ref is id_emp apellido varchar(20), system generated direccion tipo_dir, en la definición de tabla id_empl ref(tipo_empl) ); create table empleado of tipo_empl values for id_empl Pero en la definición are system generated; de tabla hay que indicar si los valores del identificador los genera o no el sistema Tabla a la que hace referencia create type tipo_trab as ( empl ref(tipo_empl) scope(empleado), empr ref(tipo_empr) scope(empresa) ); create table trabajo of tipo_trab; • Se usa “->” como notación para referencias: select t.empl->apellido from trabajo as t where t.empr->nombre=‘ACME’; Campo de la tabla empresa a la que hace referencia © A. Jaime 2005 DBD Tema 10 3 © A. Jaime 2005 DBD Tema 10 4 Objeto-relacional en SQL : encapsulación de operaciones Objeto-relacional en SQL : encapsulación de operaciones (2) • create type es similar a una definición de clase y • puede incluir métodos (operaciones): create type tipo_dir as ( calle varchar(20), ciudad varchar(20), Función definida cod_postal char(5) Por el usuario ) method piso returns integer; • • declare external <función><signatura> language <lenguaje> • Habrá que incluir el código del método. En este ejemplo se indica el fichero que contiene dicho código: method create function piso returns integer for tipo_dir as external name ‘c:/x/y/piso.class’ language ‘java’; • • Al definir un tipo T, SQL genera ciertas funciones: – T() para crear nuevos objetos de tipo T – si X es un objeto de tipo T y T incluye el atributo A, X.A y A(X) permitirán consultar los valores de A – También hay funciones para modificar los objetos. – Se puede restringir el uso de todas estas funciones © A. Jaime 2005 DBD Tema 10 5 • Por tanto hereda todos sus atributos y métodos. Además se define el atributo específico depto: • • create type tipo_jefe under tipo_empl as( depto char(20) ); • Subtabla/supertabla funciona parecido a la herencia: create table estado_act( propiedad est_act, dueño char(25), precio money ); create table est_europa under estado_act; create table est_españa under est_europa; create table est_rioja under est_españa; • – Una subtabla hereda todas las columnas de su supertabla. – Cada fila de una subtabla corresponde a una única fila de su supertabla. – Cada fila de una supertabla corresponde a lo sumo, en una subtabla, a una de sus filas. Puede haber filas de una supertabla que no se correspondan con ninguna fila de una subtabla – Las operaciones de inserción, modificación o borrado de filas se propagan adecuadamente entre subtablas y supertablas • DBD Tema 10 DBD Tema 10 6 Objeto-relacional en SQL : objetos complejos sin estructura • tipo_jefe se define como subtipo de tipo_empl. © A. Jaime 2005 Algunos SGBD incluyen bibliotecas de tipos abstractos de datos (pueden venderse por separado). Algunos ejemplos son: – data blades de Informix Universal Server – data cartridges de Oracle – extenders de DB2. Los tipos de datos de usuario se pueden usar en la definición de parámetros de funciones. La equivalencia de tipos se define a dos niveles: – Por nombre: cuando los tipos tienen el mismo nombre – Por estructura: cuando los tipos tienen el mismo número de componentes y de tipos equivalentes entre sí Atributos y funciones pueden ser (una de las tres): – Public: visibles desde la interfaz del tipo de usuario – Private: no visibles desde la interfaz del tipo de usuario – Protected: visibles sólo para los subtipos del tipo de usuario © A. Jaime 2005 Objeto-relacional en SQL : herencia y sobrecarga de funciones • Las funciones internas se escriben en el lenguaje PSM de SQL. Las externas en un lenguaje anfitrión y se declaran así: 7 Hay tipos para trabajar con objetos grandes y con sus localizadores. Se distingue entre objetos grandes binarios y de caracteres Se propone trabajar con ellos desde el SGBD sin recurrir a ficheros externos. Hay operadores que no se aplican a atributos de estos tipos, como las comparaciones (<, >, ...), group by, order by, like, concatenación, etc. Hasta aquí hemos visto las propuestas estandarizadas para SQL. Se puede apreciar un gran parecido a lo que ya tenían implementado ciertos sistemas comerciales. La parte multimedia se ha planteando como otro estándar separado. © A. Jaime 2005 DBD Tema 10 8 Objeto-relacional en Oracle 8: Ejemplos Objeto-relacional en Oracle 8: Ejemplos (2) • Algunas de las características estudiadas para SQL también están presentes en Oracle 8. • Atributos multivaluados con “varray” (vector de longitud variable): • Objetos complejos con tablas anidadas (cont.): – Las tablas anidadas no tienen límite de elementos – Pueden consultarse los elementos por separado (imposible con varray) – Pueden construirse índices sobre las tablas anidadas • Vistas sobre objetos: – Permiten construir objetos virtuales a partir de datos relacionales Se define el número máximo de elementos create type tipo_tfno que puede contener as object(tfno char(10)); el varray create type tipo_tfnos as varray(5) of tipo_tfno; create type tipo_cliente as object(nombre_cli varchar(20), Atributo tfnos tipo_tfnos); multivaluado create table cliente of tipo_cliente; select nombre_cli, tfnos from cliente • Atributo multivaluado Objetos complejos con tablas anidadas: create type tipo_tfno as object(tfno char(10), descripcion char(30)); Es un tipo de datos create type tipo_tfnos para una columna cuyo as table of tipo_tfno; valor es una tabla create type tipo_cliente as object(nombre_cli varchar(20), tfnos tipo_tfnos); Tabla de teléfonos create table cliente of tipo_cliente; © A. Jaime 2005 DBD Tema 10 9 Objeto-relacional en Oracle 8 : Objetos grandes y otras características de almacenamiento • Se pueden almacenar objetos muy grandes como vídeos, audio o textos. Se han incluido tipos especiales para ello: – – – – BLOB: objeto binario grande CLOB : objeto de caracteres grande BFILE: fichero binario almacenado fuera de la BD NCLOB: CLOB multibyte de anchura fija Salvo BFILE todos se almacenan en la BD. • Tablas sólo en índices: – Los índices de Oracle 7 son árboles B+ con punteros a bloques de datos. Dan buen rendimiento en la mayoría de casos. Oracle 8 mantiene estos índices. – Algunos datos están en las tablas y en los índices. – Con tablas sólo en índices de Oracle 8 los registros están en el propio índice. Esto acelera las consultas y reduce el espacio de almacenamiento necesario. – Es útil para ficheros pequeños o medianos con registros no muy grandes • Índices divididos y tablas divididas: – Tablas e índices grandes pueden dividirse en trozos, teniendo una tabla (o índice) lógico que corresponde a varias tablas (o índices) físicos. © A. Jaime 2005 DBD Tema 10 11 © A. Jaime 2005 DBD Tema 10 10