CAPITULO 1 BASE DE DATOS BASADA EN OBJETOS Ing. Hernán Nina Hanco Temario Base de datos basada en objetos Tipos de datos complejos Tipos estructurados y herencia en SQL Herencia de tablas Tipos array y multiconjunto en SQL Identidad de los objetos y tipos de referencia en SQL Implementación de características O-R Lenguajes de programación persistentes Sistemas orientados a objetos y sistemas relacionales orientados a objetos Base de datos basada en objetos Solucionan el problema de trabajar con tipos de datos complejos en las bases de datos relacionales. Modelo de datos relacional orientado a objetos Extiende el modelo de datos relacional ofreciendo un sistema de tipos más rico que incluye tipos de datos complejos y orientados a objetos. Permite que los atributos de las filas tengan datos complejos. Incluyendo valores no atómicos. Las extensiones intentan conservar los fundamentos relacionales, es especial, el acceso declarativo a los datos, mientras extienden la potencia de modelado. Tipos de datos complejos Existe una creciente demanda de aplicaciones con datos complejos Con datos atómicos las consultas son complicadas y costosas. Tipos de datos estructurados admiten u tipo con subpartes o valores con dominios no atómicos. Con Sistemas de tipos de datos complejos se pueden representar directamente conceptos del modelo E-R, como los atributos compuestos, los atributos multivalorados, la generalización y especialización. En aplicaciones complejas los tipos complejos permiten construir modelos mas intuitivos. Representación de una relación con tipos de datos complejos Relación Libro con tipos complejos Título Array_autores Relacion Libro en 4FN Autores(título, autor, posición) Palabras_clave(título, palabra_clave) Libros(título, nombre_editor, sucursal_editor) Editor Conjunto_palabras clave (nombre, sucursal) Compiladores [Gómez, santos] (McGraw-Hill, NuevaYork) {análisis sintáctico, análisis} Redes [Santos, Escudero] (Oxford, Londres) {Internet, Web} Tipos complejos array Tipos complejos estructurados Tipos complejos como conjuntos Tipos estructurados y herencia en SQL SQL:1999 añadió un sistema de tipos extenso(tipos estructurados y herencia de tipos) a SQL. No están completamente implementados en los actuales SGBD Algunas características están presentes en los SGBD comerciales. Tipos estructurados y herencia Los Tipos estructurados pueden ser declarados y usados en SQL create type Nombre as (nombres varchar(20), apellidos varchar(20)) final create type Direccion as (calle varchar(20), ciudad varchar(20), codigopostal varchar(20)) not final Nota: final y not final indica si se pueden crear mas subtipos. Los tipos estructurados pueden ser usados para crear tablas con atributos compuestos. create table Cliente ( nombre Nombre, direccion Direccion, fecha_nac date) Se puede tener acceso a los componentes de los atributos usando la notación “punto”; por ejemplo: nombre.nombres Tipos estructurados (continua..) También se pueden crear una tabla cuyas filas sean de un tipo definido por el usuario. create type TipoCliente as ( nombre Nombre, direccion Direccion, fecha_nac date) not final create table Cliente of TipoCliente Métodos Se pueden definir métodos en los tipos estructurados. method edadAFecha (aFecha date) returns interval year El cuerpo del método se crea por separado. create instance method edadAFecha (aFecha date) returns interval year for TipoCliente begin return aFecha - self.fecha_nac; end Se puede invocar el metodo para averiguar la edad de cada cliente: select nombre.apellidos, edadAFecha (current_date) from cliente Herencia de tipos Suponga que se tiene la siguiente definición de tipo para las personas: create type Persona (nombre varchar(20), direccion varchar(20)) Utilizando herencia se pueden definir los tipos estudiante y profesor. create type Estudiante under Persona (grado varchar(20), departmento varchar(20)) create type Profesor under Persona (salario integer, departmento varchar(20)) Cada subtipo puede redefinir el efecto de los métodos volviendo a declararlos, usando overriding method Herencia Múltiple SQL:1999 y SQL:2003 no soporta herencia múltiple Si se soporta entonces la herencia se definiría de la siguiente manera: create type Teaching Assistant under Student, Teacher Herencia de tablas Las subtablas de SQL se corresponden con el concepto de especialización/generalización de E-R. create table personas of Persona create table estudiantes of Estudiante under personas create table profesores of Profesor under personas Los tipos de las subtablas deben ser subtipos de la tabla madre. Por tanto, todos los atributos presentes en persona también están presentes en las subtablas. Tipos array y multiconjunto en SQL Ejemplo de tipos array y multiconjunto en SQL: create type Editor as (nombre varchar(20), sucursal varchar(20)) create type Libro as (titulo varchar(20), array-autores varchar(20) array [10], fecha_publicacion date, editor Editor, conjunto_palabra_clave varchar(20) multiset ) create table libros of Libro Creación y acceso a los valores de los conjuntos Construcción de Array array [‘Silberschatz’,`Korth’,`Sudarshan’] Multiconjuntos multisetset [‘computer’, ‘database’, ‘SQL’] Para crear una fila de tipo definido para la relación libro: (‘Compiladires’, array[`Smith’,`Jones’], Editores (`McGraw-Hill’,`New York’), multiset [`análisis sintactico’,`analisis’ ]) Para insertar la fila anterior en la relación Libro: insert into Libro values (‘Compiladires’, array[`Smith’,`Jones’], Editores (`McGraw-Hill’,`New York’), multiset [`análisis sintactico’,`analisis’ ]) Consulta de los atributos valorados como conjuntos Buscar todos los libros que tienen la palabra clave “base de datos”, select titulo from libros where ‘base de datos’ in (unnest(conjunto_palabra_clave)) Podemos tener acceso a elementos individuales de un arreglo utilizando índices. Ejemplo: si queremos conocer un libro en particular que tiene tres autores: select array-autores[1], array-autores[2], array-autores[3] from libros where titulo = `fundamentos de bases de datos’ Supongamos que se desea una relacion que contenga la pareja de la forma “titulo, nombre_autor” para cada libro y para cada uno de sus autores. select B.titulo, A.autor from libros as B, unnest (B.array-autores) as A (autor ) Identidad de los objetos y tipos de referencia en SQL Define el tipo Departamento con el campo nombre y el campo director, que es una referencia al tipo Persona. create type Departamento ( nombre varchar (20), director ref (Persona) scope personas) Nosotros podemos crear la tabla departamentos como sigue: create table departamentos of Departamento Identificadores generados por el usuario La tabla a la que se hace referencia debe tener un atributo que guarde el identificador de cada fila. create type Persona (nombre varchar(20) direccion varchar(20)) ref using varchar(20) create table personas of Persona ref is persona_id user generated Implementación de las características O-R Similar a las características E-R de mapeo o transformación a esquemas relaciones. Implementación de subtablas Cada tabla almacena la clave primaria y sus atributos que se definen en la subtabla. o, Cada tabla almacena todos los atributos tanto definidos en la supertabla y subtabla. Lenguajes de programación persistentes Son lenguajes de programación extendidos con estructuras para el tratamiento de datos persistentes. Los programadores pueden manipular datos persistentes de manera directa. No necesitan escribir código para la búsqueda en la menoría o volver a guardarlo el disco. Objetos persistente: Por clases – declaración explicita de persistencia. Por creación – sintaxis especial para crear objetos persistentes Por marcas – marcar los objetos como persistentes después de haberlo creado. Por alcance Lenguajes de programación persistentes (continua…) Las extensiones de persistencia de C++ y Java integran la persistencia de forma elegante y ortogonalmente a sus elementos de programación previos, por lo que resulta fácil de usar. La norma ODMG define las clases y otros constructores para la creación y acceso a los objetos persistentes desde C++, mientras que la norma JDO(Java Database Object) ofrece una funcionalidad equivalente para java. Comparación de O-O y Bases de datos O-R Sistemas relacionales Tipos de datos sencillos, lenguajes de consulta potentes, protección elevada. Bases de datos orientadas a objetos basadas en lenguajes de programación persistentes: Tipos de datos complejos, integración con los lenguajes de programación, elevado rendimiento. Sistemas relaciones orientado a objetos Tipos de datos complejos, lenguajes de consulta potentes, protección elevada. Ejercicios Una compañía de alquiler de coches tiene una base de datos con todos los vehículos de su flota actual. Para todos los vehículos incluye, el número de matricula, el fabricante, el modelo, la fecha de adquisición y el color. Se incluyen datos especiales para algunos tipos de vehículos: Camiones: capacidad de carga. Coches deportivos: potencia, edad mínima del arrendamiento. Furgonetas: numero de plazas Vehículos todo terreno: altura de los bajos, eje motor. Construya una definición del esquema de esta base de datos de acuerdo con SQL:1999 Opciones para una arquitectura estratificada Podemos añadir operaciones a cada clase para permitir que los objetos se guarden y almacenen a si mismos. falla la reutilización y cohesión. Todos los objetos persistentes en el sistema podrían heredar métodos de almacenamiento de una superclase abstracta ObjetoPersistente. Podemos introducir en el sistema, clases independientes, cuyo papel sea hacerse cargo del almacenamiento y recuperación de las otras clases. ORM (Object Relational Mapping) Realizan el mapeo de objetos a tablas y viceversa Aceleran el trabajo El programador se concentra en el Modelo de Objetos, y deja el mapping a la herramienta Se encargan de gestionar asociaciones, herencia, polimorfismo. También suelen proporcionar servicios para facilitar el manejo de conexiones y transacciones Hibernate, toplink oracle, JPA, LinQ