1 Bases de Datos Avanzadas Tema III: Bases de datos orientadas a objetos (2) Facultad de Informática Semestre: 9º Curso: 2000-01 Profesor: Matilde Celma Giménez Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia 2 4.4 Estándares SGBD orientados a objetos: el estándar ODMG97 basado en un modelo orientado a objetos. propuesto por el grupo ODMG (Object Database Management Group) creado en 1991 por un grupo de fabricantes de computadores. SGBD objeto-relacionales: el estándar SQL3 basado en una extensión del modelo relacional con características de la orientación a objetos. es una extensión de la última versión del lenguaje SQL (1992). propuesto por ANSI e ISO en 1999. Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia 3 4.4.1 SGBD orientados a objetos: el estándar ODMG97 Componentes de la propuesta ODMG para SGBDOO: un modelo de datos orientado a objetos (OM) un lenguaje de definición de datos (ODL): este lenguaje permite la definición del esquema de la base de datos, este esquema puede ser traducido a declaraciones en algunos lenguajes de programación (C++, Smalltalk y JAVA) un lenguaje de interrogación (OQL): es un lenguaje declarativo (no es computacionalmente completo) enlaces con los lenguajes de programación C++, Smalltalk y JAVA Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia 4 Características del modelo de datos OM: basado en el concepto de objeto. Los objetos están clasificados en tipos; todos los objetos de un mismo tipo tienen el mismo comportamiento y el mismo rango de estados (valores) el comportamiento de los objetos se define por medio de operadores que pueden ser ejecutados sobre los objetos de un tipo el estado (valor) de un objeto está determinado por el valor de sus propiedades: atributos y relaciones con otros objetos los objetos tienen asociado un identificador de objeto (identidad de objetos) la definición de un tipo de objeto consta de dos partes diferenciadas: especificación (interfaz del objeto) e implementación (representación) (abstracción de datos) los tipos de objetos se pueden organizar en una jerarquía de tipos de objetos. Un subtipo puede tener propiedades y operadores propios. En la definición del subtipo se pueden refinar los elementos heredados cambiando su significado. Se admite la herencia múltiple. Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia 5 Tipos de datos: en el modelo se propone un sistema de tipos consistente en un conjunto de tipos básicos (atómicos) y un conjunto de constructores de tipos. Tipos básicos (tipos atómicos): char, string, float, double, boolean, enum N {n1, n2,...nm}, … Constructores de tipos (tipos estructurados): Colecciones: - array <T,I>: vector unidimensional de I elementos de tipo T - set <T>: conjunto finito de elementos de tipo T - bag <T>: bolsa (multiconjunto) finito de elementos de tipo T - list <T>: lista finita de elementos de tipo T - dictionary <K,T>: secuencia de pares (clave, valor) Estructuras: - struct S {C1 T1, C2 T2, ... Cn Tn}: tupla de estructura {C1 T1, C2 T2, ... Cn Tn} Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia 6 nuevos tipos de datos pueden ser definidos utilizando los constructores anteriores (combinándolos en cualquier orden). Estos tipos pueden definirse explícitamente en el esquema de la base de datos o en la declaración del tipo de los atributos de un tipo de objeto. tanto los tipos básicos como los tipos definidos con los constructores llevan asociados un conjunto de operadores para manipular valores del tipo. Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia 7 Operadores asociados a los tipos colección: cardinality() (función de tipo unsigned long) is_empty() (función de tipo boolean) is_ordered() (función de tipo boolean) allows_duplicates() (función de tipo boolean) contains-element (in element) insert_element (in element) remove_element (in element) create_iterator (in boolean stable) (función de tipo iterator) Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia 8 Definición de un tipo de objeto: especificación e implementación Especificación de un tipo de objeto: define la interfaz del objeto (propiedades observables y operadores asociados) • atributos: la definición de un atributo indica el nombre del atributo y su tipo. El tipo de un atributo puede ser un tipo de datos atómico o estructurado, o bien un tipo de objeto o una estructura de objetos (definida con los constructores array, set, bag, list y struct aplicados sobre tipos de objetos ya definidos) • relaciones: las relaciones entre objetos se especifican explícitamente por medio de definiciones de relaciones: sólo se pueden definir relaciones binarias (sin atributos propios). en la definición de una relación se indica el nombre de la relación, el tipo del objeto relacionado, la cardinalidad de la relación (uno, muchos) y una referencia inversa. el SGBDOO vela por la integridad referencial. existen operadores genéricos para manipular las relaciones entre objetos: form (crea una ocurrencia de una relación) y drop (borra una ocurrencia de una relación) Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia 9 Definición de un tipo de objeto: especificación e implementación •operadores: pueden definirse operadores de tipo función y de tipo procedimiento. la definición de un operador indica: el nombre del operador, los argumentos:tipo (entrada, salida), nombre y tipo de datos, el tipo del valor devuelto (en caso de función), y el nombre de cualquier excepción asociada. se contempla el polimorfismo de operadores. • excepciones: activadas por los operadores en caso de error Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia 1 0 Definición de un tipo de objeto: especificación e implementación Implementación de un tipo de objeto: define en un lenguaje de programación una representación (estructura de datos) para las instancias del tipo y una implementación (procedimiento) para sus operadores. Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia Definición de un tipo de objeto: especificación e implementación 1 1 se pueden dar nombres significativos a un objeto en el momento de su creación; el objeto tiene una identidad única pero puede poseer varios nombres significativos. los objetos de un tipo pueden ser identificados externamente por el valor de uno (o varios) atributos a los que se denomina clave; un objeto puede tener definidas varias claves. el modelo propone un conjunto de operadores genéricos para cualquier tipo de objeto: new (creación), delete (borrado), copy (copia), …. Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia 1 2 El lenguaje ODL: extensión de la clase Departamento CLASS Departamento ( extent departamentos) { key string código attribute string nombre attribute LIST <string> teléfono relationship Dirección director inverse Dirección::dpto relationship LIST < Profesor> prof inverse Profesor::dpto relationship LIST <Asignatura> asg inverse Asignatura::dpto number nro_prof ( ) number nro_asg ( )} atributos relaciones operadores Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia 1 3 CLASS Profesor ( extent profesores) { key string código attribute string nombre attribute string dirección attribute string teléfono attribute enum {‘CEU’, ‘CU’, ‘TEU’, ‘TU’} categoría relationship Dirección director inverse Dirección::prof relationship LIST < Docencia> docencia inverse Docencia::prof relationship Departamento dpto inverse Departamento::prof number nro_asg ( )} Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia 1 4 CLASS Asignatura ( extent asignaturas) { key string código attribute string nombre attribute short cre_teo attribute short cre_prac relationship LIST < Docencia> docencia inverse Docencia::asg relationship Departamento dpto inverse Departamento::asg number nro_prof ( ) } Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia 1 5 CLASS Dirección ( extent directores) { attribute date fecha relationship Profesor prof inverse Profesor::director relationship Departamento dpto inverse Departamento::director} CLASS Docencia ( extent docencias) { attribute short créditos relationship Profesor prof inverse Profesor::docencia relationship Asignatura asg inverse Asignatura::docencia} relaciones binarias con atributos propios Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia 1 6 El lenguaje OQL: Obtener el nombre, el número total de profesores y la relación de profesores catedráticos de los departamentos de la Universidad. SELECT struct (nombre: nombre, prof: nro_prof, prof_CU: (SELECT P.nombre FROM D. prof AS P WHERE P.categoría=‘CU’)) FROM Departamentos AS D el resultado de esta consulta es de tipo: set < struct (nombre: string, prof: number, prof_CU: set <string>)> Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia 1 7 4.4.2 SGBD objeto-relacionales: el estándar SQL3 Características: − nuevos tipos de datos: BOOLEAN, LOB − constructores de tipos: escalares y estructurados − concepto de objeto (tipos estructurados definidos por el usuario) • identidad de objetos (tablas de un tipo de objeto) • encapsulación (definición de métodos) − herencia en jerarquía de tipos de objetos y en jerarquía de tablas Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia 1 8 Tipos de datos nuevos tipos de datos: BOOLEAN, LOB constructores de tipos: (utilizables en la definición del tipo de los atributos de una tabla, o en la definición de tipos de usuario) • escalares: REF • estructurados: ROW, ARRAY (operadores (consultores y constructores) predefinidos) tipos de datos definidos por el usuario: CREATE TYPE ...... (utilizables en cualquier punto donde se pueda usar otro tipo de datos y como tipo de las tuplas de una tabla) • escalares: DISTINCT TYPES • estructurados (tipos de objetos) (operadores definidos por el usuario (métodos)) Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia 1 9 Tipos de datos Nuevos tipos de datos: BOOLEAN: lógica trivaluada (TRUE, FALSE, UNKNOWN) LOB: (Large Object): BLOB (Binary Large Object): almacenamiento de sonido, imagen CLOB (Character Large Object): almacenamiento de texto - operadores y funciones predefinidas - atributos de tipo LOB: consultados y actualizados de la forma usual Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia 2 0 CREATE TABLE Libro (título VARCHAR(100), id INTEGER, resumen CLOB(32K), texto CLOB(20M), video BLOB(2G)) SELECT position (‘Capítulo 1’ IN texto) INTO :variable FROM Libro WHERE título=‘Moby Dick’ Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia 2 1 Tipos de datos Tipos de datos definidos por el usuario: CREATE TYPE ... (operadores definidos por el usuario (métodos)) escalares: DISTINCT TYPES estructurados (tipos de objetos) Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia 2 2 Tipos de datos definidos por el usuario: - escalares: DISTINCT TYPES definición: CREATE TYPE nombre_tipo AS tipo_predefinido basados en un tipo de datos predefinido (INTEGER, CHAR, ...) definición propia de operadores (métodos) fuertemente tipados no admiten subtipos heredan la representación interna del tipo de datos origen Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia 2 3 CREATE TYPE metros AS INTEGER; CREATE TYPE metros2 AS INTEGER; DISTINCT TYPES CREATE TABLE Habitación (ID integer, altura metros, superficie metros2) SELECT * FROM Habitación ¡error! WHERE altura> superficie Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia 2 4 Tipos de datos definidos por el usuario: - estructurados: tipos de objetos especificación definición: CREATE TYPE nombre_tipo AS (atributo1 tipo 1,....., atributon tipon) [INSTANTIABLE | NOT INSTANTIABLE] [FINAL | NOT FINAL] [METHOD nombre_método (lista_parámetros) RETURN tipo ] ... implementación CREATE METHOD nombre_método (lista parámetros) FOR tipo_estructurado BEGIN ...... END. Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia 2 5 los métodos son funciones con un parámetro implícito del tipo estructurado (tipo de objeto) al que está asociado el método. especificación de métodos separada de su implementación. selección de atributos e invocación de métodos con notación de punto. constructores: de instancia vacía y de valor. Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia 2 6 CREATE TYPE dirección_t AS (calle CHAR(30), ciudad CHAR(20), código INTEGER) CREATE TYPE Persona AS (DNI INTEGER, nombre VARCHAR(60) dirección dirección_t ) REF (DNI) METHOD salario() RETURNS DECIMAL(9,2) CREATE METHOD salario() FOR Persona BEGIN .... END Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia 2 7 CREATE TABLE Empleado OF Persona constructor de instancia nula constructor de valor del tipo dirección() NEW dirección_t (calle: Jesús 13, ciudad: Valencia, código: 12345) UPDATE Empleado SET dirección = NEW dirección_t (calle: Jesús 13, ciudad: Valencia, código: 12345) Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia 2 8 Tipos de datos Constructores de tipos: (operadores (constructores y consultores) predefinidos) Escalares: REF: referencia a un objeto a través de su oid (un valor de un tipo de objeto (tipo estructurado definido por el usuario) tiene oid cuando es una fila de una tabla) -definición: REF (tipo_objeto) La representacion interna de los valores del tipo REF asociado a un tipo de objeto puede elegirse: - generado por el sistema: REF IS SYSTEM GENERATED - derivado de valores de otros atributos: REF (atributo) - generado por el usuario: REF USING <tipo de datos predefinido> Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia 2 9 Constructores de tipos: Estructurados: ROW: tipo tupla - definición: ROW (campo1 tipo1, campo2 tipo2, ..., campon tipon) - selector de campo por notación de punto: expresión.campo - constructor: (campo1 :....., campo2 :...,...........) Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia 3 0 Constructores de tipos: Estructurados: ARRAY: tipo vector (unidimensional) - definición : tipo_base ARRAY [dimensión] - tipo base : cualquier tipo de datos excepto ARRAY - selector de elemento por ordinal: expresión [i ] - constructor: ARRAY[valor1, valor2, .... ] - operadores : cardinalidad, comparación, concatenación,... - facilidades para seleccionar elementos por contenido Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia 3 1 CREATE TYPE Persona AS (DNI INTEGER, CREATE TABLE Informes nombre VARCHAR(60) ) REF (DNI) INTEGER, título VARCHAR(100), autor REF (persona), claves VARCHAR(10) ARRAY [5 ], formato ROW (páginas INTEGER, CREATE TABLE Personas OF Persona (DNI (id tipo_letra CHAR(10), tamaño INTEGER) ) INTEGER, nombre VARCHAR(60) (autor WITH OPTIONS SCOPE Persona) ) Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia selector de campo en tipo ROW SELECT título, formato.páginas FROM Informes I WHERE I.autor -> nombre =‘Juan García’ AND claves[1]=‘Física’ manipulación del tipo REF selector de elemento en tipo ARRAY UPDATE Informes SET claves = ARRAY[‘Física’, ‘Química’ ] WHERE id = 123 constructor de tipo ARRAY Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia 3 2 3 3 Herencia en jerarquía de tipos los tipos estructurados definidos por el usuario pueden clasificarse en una jerarquía de tipos un subtipo hereda los atributos y métodos de su supertipo un subtipo puede incluir nuevos atributos y métodos se admite sólo herencia simple se admite sobrecarga (overload) y reescritura (overriding) de métodos a través de tipos se respeta el principio de sustitutabilidad: en el lugar de un valor del supertipo se puede incluir un valor de cualquier subtipo Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia CREATE TYPE Empleado AS (DNI INTEGER, nombre VARCHAR(60) dirección dirección_t ) NOT FINAL REF (DNI) METHOD salario() RETURNS DECIMAL(9,2) CREATE TYPE Vendedor UNDER Empleado (zona CHAR(4)) OVERRIDING METHOD salario() RETURNS DECIMAL(9,2) Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia 3 4 Herencia en jerarquía de tablas: una subtabla hereda de la supertabla las columnas, restricciones, disparadores, .... las consultas sobre la supertabla tienen como alcance las tuplas de todas las subtablas en la jerarquía CREATE TABLE Empleados OF Empleado PRIMARY KEY (DNI) CREATE TABLE Vendedores OF Vendedor UNDER Empleados Bases de Datos Avanzadas Departamento de Sistemas Informáticos y Computación / Universidad Politécnica deValencia 3 5