La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Estándar SQL:1999. Modelo de Datos Objeto-Relacional Búsqueda Bibliográfica recomendada 1)Desde hace años, Andrew Eisenberg y Jim Melton son promotores.

Presentaciones similares


Presentación del tema: "Estándar SQL:1999. Modelo de Datos Objeto-Relacional Búsqueda Bibliográfica recomendada 1)Desde hace años, Andrew Eisenberg y Jim Melton son promotores."— Transcripción de la presentación:

1 Estándar SQL:1999. Modelo de Datos Objeto-Relacional Búsqueda Bibliográfica recomendada 1)Desde hace años, Andrew Eisenberg y Jim Melton son promotores destacados de las distintas versiones por las que pasa y avanza el estándar SQL. Por tanto, se recomienda consultar las referencias bibliográficas que resultan del siguiente acceso: En Google buscar: DBLP Bibliography O bien, ir directamente a Una vez allí, ir a la parte Search y picar en Author Escribir el nombre Jim Melton Y también escribir el nombre Andrew Eisenberg 2) Desde la Web de Oracle: Opción Also try SQL, ir a 3) Desde el sitio Web de Microsoft: Also try Product Information SQL, 4) Desde los sitios Web de IBM, Ingres, Postgres, Sybase, Informix, etc.,podemos ilustrarnos sobre el Lenguaje SQL Objeto –Relacional que hoy posee la actual tecnología de BDO-R. 2

2 Algunas Referencias Bibliográficas del actual Estándar SQL Andrew Eisenberg, Jim Melton, Krishna G. Kulkarni, Jan-Eike Michels, Fred Zemke: SQL: Andrew Eisenberg, Jim Melton: An Early Look at XQuery API for Java (XQJ). (2004) Andrew Eisenberg, Jim Melton: Advancements in SQL/XML. SIGMOD Record 33(3) (2004) Charles E. Campbell, Andrew Eisenberg, Jim Melton: XML schema. (2003) Susan Malaika, Andrew Eisenberg, Jim Melton: Standards for databases on the grid.(2003) Jan-Eike Michels, Krishna G. Kulkarni, Christopher M. Farrar, Andrew Eisenberg, Nelson Mendonça Mattos, Hugh Darwen: The SQL Standard. in - Information Technology 45(1): (2003) Andrew Eisenberg, Jim Melton: SQL/XML is Making Good Progress. (2002) Jim Melton, Andrew Eisenberg: An Early Look at XQuery. (2002) Andrew Eisenberg, Jim Melton: SQL/XML and the SQLX Informal Group of Companies. SIGMOD Record 30(3): (2001) Jim Melton, Andrew Eisenberg: SQL Multimedia and Application Packages (SQL/MM).(2001) Andrew Eisenberg, Jim Melton: SQL Standardization: The Next Steps. (2000) Andrew Eisenberg, Jim Melton: SQL: 1999, formerly known as SQL 3. (1999) Andrew Eisenberg, Jim Melton: SQLJ-Part 1: SQL Routines Using the Java Programming Language. SIGMOD Record 28(4): (1999)

3 Estándar SQL:1999. Su Modelo de Datos Objeto-Relacional Otras Referencias Bibliográficas del Estándar SQL- BDOR SQL99, SQL/MM, and SQLJ: An Overview of the SQL Standards, Nelson M. Mattos. IBM Database Common Technology, 1999 High Performance Oracle8 Object-Oriented Design,David A. Anstey. Coriolis Group, Noviembre 2005DIT-ETSIT-UPM Curso de Bases de Datos ( BSDT ) Carmen Costilla

4 Object Exchange Model (OEM). Fue descrito para intercambio de datos entre BD heterogéneas. Es un modelo de objetos jerárquizado y sencillo similar a XML. Un esquema de datos OEM es un grafo, en el cual los nodos corresponden a los objetos y los arcos a las relaciones. volver

5 SUBSTR(str,pos,len): Comienza en el carácter de la cadena y selecciona los siguientes caracteres. Supongamos que tenemos la siguiente tabla: Tabla Geography volver Ejemplo 1 : SELECT SUBSTR(store_name, 3) FROM Geography WHERE store_name='Los Angeles'; Resultado : 's Angeles' region_namestore_name EastBoston EastNew York WestLos Angeles WestSan Diego Ejemplo 2 : SELECT SUBSTR(store_name,2,4) FROM Geography WHERE store_name='San Diego'; Resultado : 'an D'

6 La función TRIM en SQL se utiliza para eliminar un prefijo o sufijo determinado de una cadena. El patrón más común a eliminarse son los espacios en blanco. Esta función tiene diferentes nombres según las diferentes bases de datos: MySQL: TRIM(), RTRIM(), LTRIM() Oracle: RTRIM(), LTRIM() SQL Server: RTRIM(), LTRIM() volver

7 SQL:1999 incorpora dos tipos compuestos: ARRAY y ROW. El tipo ARRAY nos permite guardar colecciones de valores directamente en una columna de una tabla de la base de datos. Ejemplo: DIAS_DE_LA_SEMANA VARCHAR(10) ARRAY[7] El tipo ROW en SQL:1999 es una secuencia de una o más parejas (, ) llamados campos (fields) que permite almacenar valores estructurados como una columna de la base de datos. Array: grupo ordenado de objetos del mismo tipo que se pueden acceder por su posición. Su tamaño es dinámico y los elementos se pueden insertar y borrar de cualquier posición. Set: es un grupo desordenado de objetos del mismo tipo. No se permiten duplicados. Bag: es un grupo desordenado de objetos del mismo tipo. Se permiten duplicados. List: es un grupo ordenado de objetos del mismo tipo. Se permiten duplicados. volver

8 Algunas veces es necesario combinar en forma conjunta -concatenar- los resultados de varios campos diferentes. Cada base de datos brinda una forma para realizar esto: MySQL: CONCAT() Oracle: CONCAT(), || SQL Server: + La sintaxis en MySQL para concatenar es la siguiente: CONCAT(cad1, cad2, cad3,...) volver

9 Contenido Modelo de Datos Objeto-Relacional. Estándar SQL: Introducción a las BDOR 2. Nuevos tipos de Datos Objeto-Relacionales: 2.1 Large LOB, Object Data Type ( Tipo de Objeto Grande ) 2.2 Colection Type (Tipo Colección): Arrays 2.3 ROW Type (Tipo fila) 2.4 UDT, User Definition Type ( Tipos Definidos por el Usuario ) Distinct Type (Tipo Distinto) Structured Type (Tipo estructurado) 2.5 Métodos 2.6 Ref Type (Tipo Referencia) 2.7 Jerarquías de Tablas 2.8 Herencia

10 1. Introducción El estándar SQL: 1999 sigue un enfoque evolutivo. Es una versión aprobada del estándar SQL que incorpora varias características del paradigma de orientación a objeto al enfoque relacional; pero no se limita a eso, puesto que incorpora otras características y reestructura completamente la documentación del estándar. Las nuevas características del estándar se pueden dividir entonces en Características Relacionales y Características Orientadas a Objeto. Durante su desarrollo se conoció como SQL 3, y a partir de los borradores de trabajo del estándar, se desarrollaron varios ORDBMS entre ellos Oracle 8 de Oracle, Universal Server de Informix, DB2 Universal Database de IBM, entre otros. SQL3 es computacionalmente completo, incluye: Asignación IF.. THEN.. ELSE.. ENDIF, y CASE CALL y RETURN para invocar procedimientos Modelo de Datos Objeto-Relacional. Estándar SQL:1999

11 1. Introducción Extensiones en las capacidades de los SGBDOR vs. SGBDR: Nuevos Tipos de Datos que permiten gestionar aplicaciones más complejas con una gran riqueza de dominios (imagen, voz, sueldo, etc.) Nuevas operaciones que permiten gestionar el comportamiento de los Tipos de Datos. Mayor capacidad expresiva para los conceptos y asociaciones complejos. Reusabilidad, propio de la Orientación a Objetos. Se pueden compartir diversas bibliotecas de clases ya existentes. Integración de lenguajes: relacional, de objetos, XML, etc Mayor capacidad consultiva (consultas anidadas, recursivas, almacenadas, pre-fabricadas), etc.

12 1.Introducción... Se extiende la sintaxis de SQL:92 y se amplía su alcance: Nuevos tipos de datos (dominios) Objeto-Relacionales: Tipo de datos Objeto Grande, LOB (Large Object) Tipos de datos fila (Row) y referencia (REF)Row Tipos de datos colección (set, bag, list y array) array Tipos de datos Definidos por el Usuario (UDTs) Extensiones en el Control de datos Objeto-Relacionales Triggers Procedimientos almacenados y funciones definidas por el Usuario Extensiones en las capacidades Consultivas Objeto-Relacionales: Consultas recursivas SQL:99->SQL2003 Incorpora al lenguaje XML y viceversa Otras Extensiones en las Bases de Datos Objeto-Relacionales: Extensiones a la ayuda en la toma de Decisiones: OLAP, etc. Intercambio de Objetos (OEM), Datos Multimedia, etc.OEM Modelo de Datos Objeto-Relacional. Estándar SQL:1999.

13 1 Introducción… Nuevos tipos de datos... Otro nuevo tipo de datos es BOOLEAN que permite a SQL manejar los valores: verdadero (true), falso (false), y desconocido (Unknown). SQL:1999 agrega además otro tipos de datos llamados Tipos Distintos, que son tipos de datos definidos por el usuario (UDTs) que se basan en tipos primitivos o en otros tipos distintos. Soporte a la Orientación a objeto. Tipos, abstracción y clases El estándar unifica estos conceptos bajo el nombre de tipo estructurado, que es un tipo de UDT que puede encapsular atributos y métodos en una única entidad lógica, pero físicamente separados. Los atributos de un objeto persistente se almacenan en una tabla, los métodos, junto con los demás procedimientos almacenados. Cabe destacar que esta separación será transparente al usuario. *La sintaxis de SQL: 1999 para la orientación a objeto se encuentra en el apéndice A. Modelo de Datos Objeto-Relacional. Estándar SQL:1999.

14 1. Introducción a las BDOR Tipos de Datos Objeto-Relacionales Tipo de dato Large Object (LOB) Binary Large Object (BLOB) Character Large Object (CLOB) Constructores de tipo objeto Row types Referenced types Tipo colección Set, Bag, List y Arrays Tipos de datos Definidos por el Usuario (UDT) Distinct types Structured types Métodos, funciones y procedimiento definidos por el usuario Jerarquías de tablas y de vistas Modelo de Datos Objeto-Relacional. Estándar SQL:1999.

15 2.1 Tipo Large Object: LOB Tipo LOB, se almacena en la BDOR como cualquier atributo. Su gran capacidad puede definirse en DDL como: KB, MB o Gigabytes El tipo LOB tiene dos subtipos: Binary Large Object, BLOB, almacena objetos multimedia: audio, imagen, mapas, video, fotos. Character Large Object, CLOB, almacena texto Ejemplo: CREATE TABLE documental ( titulo VARCHAR(200), id_doc INTEGER, resumen CLOB (32K), texto_doc CLOB (20M), video_film BLOB (2G)); Modelo de Datos Objeto-Relacional. Estándar SQL:1999.

16 2.1 Tipo Large Object: LOB El Tip LOB se gestiona como cualquier columna de una BD: Para consultar un valor o parte de él (SELECT…), Añadir valores (INSERT…), con algunas restricciones Borrar (DELETE…) Actualizar (UPDATE…), con algunas limitaciones Adicionalmente, el tipo LOB tiene permitidas las operaciones siguientes: Predicado LIKE La yuxtaposición o concatenación de objetosconcatenación Funciones: LENGH, SUBSTRING, POSITION, TRIMSUBSTRINGTRIM

17 2.1 Tipo Large Object: LOB Debido al gran tamaño del tipo LOB, el ORDBMS precisa la definición de buffers del tamaño adecuado para su gestión, según cada caso. LOCATOR : si LOB es del orden de GB, entonces se usa esta cláusula para ayudar al ORDBMS a la gestión de dicho LOB. Los LOB no tienen permitidas las siguientes operaciones: GRATHER THAN y LESS THAN Claves primarias PK, claves externas FK y UNIQUE GROUP BY y ORDER BY Operador JOIN (como columnas del Join) Modelo de Datos Objeto-Relacional. Estándar SQL:1999.

18 2.2 Colection Type (Tipo Colección): Array SQL:1999 incorpora dos tipos compuestos: ARRAY y ROW. El tipo ARRAY nos permite guardar colecciones de valores directamente en una columna de una tabla de la BD. - >No First Normal Form (NFNF o NF2) Ejemplo: DIAS_DE_LA_SEMANA VARCHAR(10) ARRAY[7] Pueden definirse sobre cualquier tipo (excepto array) Operaciones: Acceso a los elementos por un número ordinal, Cardinalidad, Comparación, Asignación, Concatenación, CAST, transformación de array a tabla...

19 Continuación Colection Type: Arrays Ejemplo: CREATE TABLE libro ( títuloVARCHAR(200), id_libro INTEGER, autores VARCHAR (15) ARRAY [20], resumen CLOB (32K), texto_libro CLOB (20M), películaBLOB (2G)); INSERT INTO libro (título, id_libro, autores) VALUES(A guide to the SQL Standard, 15, [Date, Darwen ]) SELECT id, autores[1] AS nombre FROM libro Modelo de Datos Objeto-Relacional. Estándar SQL:1999.

20 2.3 ROW Type (Tipo fila) El tipo ROW (en SQL:1999) es una secuencia de una o más parejas (, ) llamados campos (fields) que permite almacenar valores estructurados en simples columnas de la base de datos. CREATE TABLE empleado( id_emp INTEGER, nombre ROW (nombre_de_pila VARCHAR(30), apellido VARCHAR(30)), dirección ROW (calle VARCHAR(50), ciudad VARCHAR(30), provincia CHAR(2)), sueldo REAL) SELECT E.nombre.apellido FROM empleado E Una vez definido un row type, éste se puede usar para definir una tabla con filas del tipo de ese row type. De hecho, esta es la forma de darle persistencia al tipo. Los row type también se pueden utilizar para definir el tipo de una columna de una tabla. Se pueden definir funciones que devuelvan valores del tipo row type. Modelo de Datos Objeto-Relacional. Estándar SQL:1999.

21 2.4 UDTs, Tipos Definidos por el Usuario Un tipo definido por el usuario (UDT) es un tipo de interés para dicho usuario y diseñado a la medida de cierta aplicación. Su sintaxis se inicia con la cláusula: CREATE TYPE nombre_UDT AS (…. Cada UDT se define en términos de: otros tipos del lenguaje SQL y/o otros tipos definidos previamente por el usuario. Nota: SQL-99 es -a diferencia de SQL-92- fuertemente tipado (SQL-92 no maneja objetos, sin embargo es la base de partida para JDBC, SQLJ, SQL:1999, y ODMG OQL) Modelo de Datos Objeto-Relacional. Estándar SQL:1999.

22 Hay dos tipos de UDTs: Distinct type: basados en un tipo de datos built-in, como INTEGER, pero uno de estos tipos no puede mezclarse directamente en operaciones con ese tipo built-in ni con cualquier otro tipo. Structured type: tienen una estructura interna tal como un tipo dirección con atributos de tipo calle, ciudad y código postal como parte de la estructura. Pueden contener funciones definidas por el usuario Participar en jerarquías de tipos con otros tipos estructurados. Soportan herencia simple. Ambos tipos, distintos y estructurados, pueden ser usados como tipos de datos de columnas, variables SQL, un campo de un row type, o como atributo de otro UDT. Modelo de Datos Objeto-Relacional. Estándar SQL: UDTs, Tipos Definidos por el Usuario

23 El modelo de objetos de SQL:1999 también permite declarar a un UDT como el tipo para una tabla. Una typed table, o tabla tipada, es una tabla o vista construida en base a un tipo estructurado definido por el usuario. Cada fila de la tabla será una instancia de dicho UDT Cada atributo del UDT se transforma en una columna de la tabla Los métodos asociados con el tipo son asociados con la tabla. Cada tabla tipada tiene una columna adicional auto referente. Además de crear una columna para cada atributo del tipo base, se agrega otra, para almacenar el identificador de objeto. Esta columna tiene las restricciones UNIQUE y NOT NULL implícitas. Esto es similar a un OID usado en el modelo de objetos clásico. Modelo de Datos Objeto-Relacional. Estándar SQL: UDTs, Tipos Definidos por el Usuario

24 Continuación Tipos Definidos por el Usuario: Distinct Type (Tipo Distinto) Distinct types: se basan en un tipo ya definido (en función de tipos de datos built-in, tal como INTEGER). Los nuevos tipos declarados serán diferentes, a pesar de que el tipo base sea el mismo, por lo tanto, las operaciones que los combinen darán error. Aunque estos tipos comparten una misma representación sus valores no pueden mezclarse directamente. Tienen distinto comportamiento Modelo de Datos Objeto-Relacional. Estándar SQL:1999. CREATE TYPE MY_SHOE_SIZE AS INTEGER(3) FINAL CREATE TYPE MY_IQ AS INTEGER(3) FINAL... WHERE MY_SHOE_SIZE > MY_IQ // ERROR Esta última expresión arroja un error de sintaxis, puesto que MY_SHOE_SIZE y MY_IQ son de tipo distinto. Ejemplo:

25 UPDATE Sala SETAreaSala=LongSala; Incorrecto (error: tipo distinto) UPDATESala SETAnchoSala=LongSala; Correcto CREATE TYPE tipoSala AS CHAR(10) FINAL; CREATE TYPE tipoMetros AS INTEGER FINAL; CREATE TYPE tipoMetrosCuad AS INTEGER FINAL; CREATE TABLE Sala ( Nsala tipoSala, LongSala tipoMetros, AnchoSala tipoMetros, AreaSala tipoMetroscuad, PerimSala tipoMetros)); Continuación Tipos Definidos por el Usuario: Distinct Type (Tipo Distinto) Ejemplo de Tipo Distinto Modelo de Datos Objeto-Relacional. Estándar SQL:1999.

26 Cuando se quiera operar sobre dos tipos distintos, primero se hace CAST de uno al otro o de cada uno a un tipo base y luego sí se puede operar sobre los valores. Si se declaran las siguientes variables: DECLARE VARIABLE X decimal(9,2) DECLARE VARIABLE Y usDollars No se puede sumar directamente X + Y, sin embargo si se puede hacer X + CAST(Y AS decimal(9,2)). Se pueden definir funciones, para hacer las conversiones de tipo con la opción CAST, dentro de la definición del tipo (en el CREATE TYPE) Modelo de Datos Objeto-Relacional. Estándar SQL:1999. Continuación Tipos Definidos por el Usuario: Distinct Type (Tipo Distinto)

27 El estándar unifica los conceptos de tipo, abstracción y clase bajo el nombre de tipo estructurado. Mediante este tipo de UDT se pueden encapsular atributos y métodos en una única entidad lógica. Un tipo estructurado pasará a ser uno más del sistema, pudiendo ser utilizado del mismo modo que un tipo primitivo. Se puede usar como: Column Type (Tipo Columna): Para modelar atributos de las entidades. Ej: Texto, imagen, vídeo, series de tiempo, punto, línea.... Facilita el uso de objetos multimedia (SQL/MM) Row Type (Tipo Fila): Para modelar entidades con relaciones y comportamiento. Ej: empleado, departamento, alumno... Facilita el uso de objetos de negocio Modelo de Datos Objeto-Relacional. Estándar SQL: Tipos Definidos por el Usuario: Structured Type (Tipo Estructurado)

28 2.4 Tipos Definidos por el Usuario Ejemplos: CREATE TYPE direccion AS ( calleVARCHAR (40), ciudad VARCHAR (20), provincia VARCHAR (40), código_postal INTEGER (5)); CREATE TYPE foto-bitmap AS BLOB FINAL; CREATE TYPE chalet AS ( Propietario REF (persona), Precio INTEGER, habitaciones INTEGER, tamaño DECIMAL (8,2), ubicación direccion, imagen foto-bitmap) NOT FINAL La cláusula NOT FINAL, permite que un tipo sea utilizado como supertipo de otro. Esta cláusula no es opcional. Modelo de Datos Objeto-Relacional. Estándar SQL:1999.

29 2.4 Tipos Definidos por el Usuario: Tipo estructurado: tipo de datos Abstractos Características asociadas: Comportamiento,Encapsulación, Sustitución, Polimorfismo Ligadura dinámica y Verificación de tipos estática Como ya se dijo, un tipo estructurado encapsula atributos y métodos en una única entidad lógica (pero físicamente separados). Los atributos de un objeto persistente serán almacenaremos en una tabla, y los métodos, junto a los demás procedimientos almacenados. Cabe destacar que esta separación es transparente para el usuario. Como vimos, para crear un tipo estructurado se utiliza el predicado CREATE TYPE, donde especificamos una lista de atributos, y opcionalmente, una lista de métodos. Modelo de Datos Objeto-Relacional. Estándar SQL:1999.

30 2.4 Tipos Definidos por el Usuario: Tipo estructurado: tipo de datos abstractos… La definición de un tipo de dato abstracto (TDA) o (ADT en inglés) incluye la estructura del tipo, las operaciones que definen igualdad y ordenamiento, y las operaciones que definen el comportamiento del ADT. Las operaciones se implementan con procedimientos llamados rutinas. create type empleado_t as object ( nombre VARCHAR(100), apellido VARCHAR(100), direccion direccion_t, salario decimal(9,2)); create table Empleados of empleado_t; La manera de almacenar persistentemente un ADT en una BD es declarándolo como el tipo de una columna de una tabla. Modelo de Datos Objeto-Relacional. Estándar SQL:1999.

31 2.4 Tipos Definidos por el Usuario: Tipo estructurado: tipo de datos abstractos… Los atributos y las operaciones de un ADT pueden ser públicos o privados, los públicos son los únicos que pueden ser accedidos fuera del ADT. Adicionalmente, para cada atributo se definen automáticamente dos funciones: una observador y una mutator. Se pueden definir atributos virtuales dentro de un ADT, para los cuales no se almacenan valores, sino que se calculan cuando se necesitan a través de las funciones definidas por el usuario de observador y mutator. Las instancias de un ADT se crean con las funciones constructoras del sistema. Para acceder las partes de un ADT se puede utilizar la notación de punto o la funcional (solo para las funciones). Modelo de Datos Objeto-Relacional. Estándar SQL:1999.

32 2.5 Métodos Con SQL-92, se introduce la noción de procedimiento almacenado, que corresponde a funciones o procedimientos definidos por el usuario, que pueden ser utilizados en sentencias SQL. SQL:1999 incorpora una tercera categoría de procedimiento almacenado, los métodos. Un método, al igual que una función, posee un nombre, una lista de argumentos (que puede estar vacía) y un valor de retorno (opcional). La gran diferencia radica en que un método está asociado a un UDT estructurado en particular y no puede ser invocado Independientemente. Al definir los métodos, en la creación del UDT estructurado, sólo declaramos su interfaz (función prototipo o encabezado o signatura). Para definir su implementación o cuerpo, se utiliza la sentencia CREATE METHOD. El código que implementa al método, puede ser escrito en SQL (usando las sentencias computacionalmente completas del SQL/PSM o en lenguajes de programación tradicionales, incluyendo JAVA). Modelo de Datos Objeto-Relacional. Estándar SQL:1999.

33 Cuando se emplea una jerarquía de clases puede suceder que algún comportamiento esté presente en todas las clases pero se materializa de forma distinta para cada una. Por ejemplo, pensemos en una estructura de clases para figuras geométricas. Podríamos usar una clase genérica, que podría llamarse FiguraGeometrica y una serie de clases que extienden a la anterior que podrían ser Circulo, Poligono, etc. Podríamos usar un método calcularArea para todas las figuras, pero las operaciones concretas dependen del tipo de figura en particular. En este caso la acción calcularArea no tiene sentido para la clase genérica ya que FiguraGeometrica representa una abstracción del conjunto de figuras posibles. En estos casos se usan las clases y métodos abstractos. Un método abstracto es un método declarado en una clase que no proporciona su respectiva implementación. Una clase abstracta es una clase que tiene al menos un método abstracto. Una clase que extiende a una clase abstracta debe implementar los métodos abstractos (escribir el código) o bien volverlos a declarar como abstractos, con lo que ella misma se convierte también en clase abstracta.

34 es clase abstracta En cuanto uno de sus métodos no tiene implementación. Se utiliza una clase abstracta Cuando deseamos definir una abstracción que englobe objetos de distintos tipos y queremos usar polimorfismo. +área() #X #Y Figura +área() -radio Círculo +área() -lado Cuadrado Figura es una clase abstracta (nombre en cursiva en UML) porque no tiene sentido calcular su área, pero sí la de un cuadrado o un círculo. Si una subclase de Figura no redefine area(), deberá declararse también como clase abstracta Una clase abstracta… es una clase que no se puede instanciar, se usa únicamente para definir subclases. volver

35 Modelo de Datos Objeto-Relacional. Estándar SQL: Métodos El Método es una función SQL ligada a un Tipo Definido por el Usuario Se definen en el esquema. La signatura se define separada de la especificación del cuerpo. CREATE TYPE empleado AS ( id INTEGER, nombre VARCHAR (20), sueldo_base DECIMAL (9,2), primas DECIMAL (9,2)) INSTANTIABLE NOT FINAL METHOD sueldo() RETURNS DECIMAL (9,2); CREATE METHOD sueldo() FOR empleado BEGIN END; Los métodos se invocan utilizando la notación punto SELECT e.sueldo() FROM empleado e La cláusula INSTANTIABLE, permite crear instancias del tipo en forma directa. Si queremos prohibir esto (para implementar clases abstractas), indicamos NOT INSTANTIABLE. Esta cláusula es opcional y su valor por defecto es INSTANTIABLE.clases abstractas IR

36 2.5 Métodos Otro ejemplo: considerar un tipo Punto, con los atributos: X, Y y con los métodos: moverA(x,y), distanciaA(p), crear(x,y). Su implementación sería: CREATE TYPE punto AS( X INTEGER, Y INTEGER) INSTANTIABLE NOT FINAL METHOD moverA (x INTEGER, y INTEGER), METHOD distanciaA (p Punto) RETURNS FLOAT, STATIC METHOD crear(x INTEGER, y INTEGER) RETURNS punto ; Existen diversas formas de invocación del método y distintas formas de ligadura, a los posibles tipos de datos, durante el tiempo de compilación y/o de ejecución (early binding and late binding, herencia, polimorfismo). Modelo de Datos Objeto-Relacional. Estándar SQL:1999.

37 2.5 Métodos: tipos Originales Overriding (de los subtipos) CREATE TYPE empleado AS ( id INTEGER, nombre VARCHAR (20), sueldo_base DECIMAL (9,2), primas DECIMAL (9,2)) INSTANTIABLE NOT FINAL METHOD sueldo() RETURNS DECIMAL (9,2); CREATE TYPE gestión UNDER empleado AS ( stock_option INTEGER) INSTANTIABLE NOT FINAL OVERRIDING METHOD sueldo() RETURNS DECIMAL (9,2), METHOD otro() RETURNS INTEGER; Ligadura dinámica: los métodos sobrecargados se resuelven en tiempo de ejecución (vinculándose al más específico) Modelo de Datos Objeto-Relacional. Estándar SQL:1999.

38 2.6 Tipo Referencia Todo tipo estructurado tiene asociado su correspondiente tipo de referencia. Este tipo almacena una secuencia de bytes, que indica el lugar donde está almacenado un objeto de ese tipo (el número de bytes usados es dependiente de la implementación del estándar). Un tipo de referencia puede ser utilizado en los mismos lugares que un tipo estructurado. Para definirlos utilizamos la palabra reservada REF, seguida por el nombre del tipo entre paréntesis. Por ejemplo, consideremos un tipo linea_recta, definido de la siguiente manera: CREATE TYPE linea_recta AS ( a REF (punto), b REF (punto))INSTANTIABLE NOT FINAL Modelo de Datos Objeto-Relacional. Estándar SQL:1999.

39 2.6 Tipo Referencia... con este tipo de datos, podemos crear redes de objetos. Por ejemplo podemos crear una lista enlazada, un árbol binario, etc. Al definir un tipo estructurado, podemos indicar la manera en que el sistema construirá sus referencias. Para eso, debemos escoger entre tres formas de representación definidas por la cláusula, que es opcional y se coloca a continuación de la cláusula. Las 3 formas de generar las referencias son: Generada por el usuario (USER GENERATED), la referencia se basa en un tipo primitivo, cuyo valor será proporcionado por el usuario y su sintaxis es: REF USING. Ejemplo: CREATE TYPE persona AS ( DNI CHAR(10), Nombre CHAR(40) )INSTANTIABLE NOT FINAL REF USING INTEGER Modelo de Datos Objeto-Relacional. Estándar SQL:1999.

40 2.6 Tipo Referencia... Generada por el sistema (SYSTEM GENERATED), la referencia es generada automáticamente por el sistema. Este es el valor por defecto La sintaxis es: REF IS SYSTEM GENERATED Ejemplo: CREATE TYPE persona AS ( DNI CHAR(10), Nombre CHAR(40) )INSTANTIABLE NOT FINAL REF IS SYSTEM GENERATED Modelo de Datos Objeto-Relacional. Estándar SQL:1999.

41 2.6 Tipo Referencia... Derivada (DERIVED), La referencia se basa en uno o más atributos. Es semejante a una clave primaria. La sintaxis es: REF FROM Ejemplo: CREATE TYPE persona AS( DNI CHAR(10), Nombre CHAR(40) )INSTANTIABLE NOT FINAL REF FROM (DNI) Una limitación importante de los tipos de referencia, es que sólo pueden almacenar direcciones de objetos persistentes. Modelo de Datos Objeto-Relacional. Estándar SQL:1999.

42 CREATE TYPE empleado AS ( DNI CHAR(10), nombre CHAR(40), sueldoBase INTEGER, anticipo INTEGER DEFAULT 0, fecha_ing DATE DEFAULT CURRENT_DATE, jefe REF(empleado), domicilio direccion )INSTANTIABLE NOT FINAL CREATE TYPE direccion AS ( calle CHAR(40), numero CHAR(10), ciudad CHAR(30) )NOT FINAL 2.6 Tipo Referencia... Para acceder a un atributo lo hacemos de la misma manera que en JAVA, a excepción de los atributos del tipo REF(...). Por ejemplo, para acceder al atributo dni, de un empleado e, sería: e.dni, y esto se usa para cualquier nivel de anidamiento, por ejemplo: e.domicilio.numero. Para acceder a los atributos de un tipo de datos REF(...), existe el operador ->. Por ejemplo, si queremos saber el nombre del jefe del empleado, sería: e.jefe->nombre Modelo de Datos Objeto-Relacional. Estándar SQL:1999.

43 2.6 Tipo Referencia... CREATE TYPE chalet AS ( Propietario REF (persona), Precio INTEGER, habitaciones INTEGER, tamaño DECIMAL (8,2), ubicación direccion, imagen foto-bitmap) NOT FINAL CREATE TABLE bien_inmueble OF chalet (REF IS oid USER GENERATED) Los atributos del tipo chalet se convierten en columnas de la tabla bien_inmueble. Se añade en la tabla una columna más para definir el valor REF de la fila (oid) Modelo de Datos Objeto-Relacional. Estándar SQL:1999.

44 2.6 Tipo Referencia El tipo REF no tiene la misma semántica que la regla de referencias cruzadas o restricción de integridad referencial. La integridad referencial implica una dependencia de inclusión y el tipo REF no. El tipo REF se puede usar donde se use cualquier otro tipo. SELECT ch.precio, ch.propietario->nombre FROM chalet ch WHERE ch.propietario->ciudad=Madrid SELECT e.nombre, e.departamento->num_empleados() FROM empleado e SELECT ch.precio, DEREF (ch.propietario) FROM chalet ch Eliminación de JOINs Las referencias pueden servir para invocar métodos Las referencias pueden servir para obtener el valor del tipo estructurado al que está referenciando (derreferencia )

45 2.7 Jerarquías de Tablas La tablas tipadas pueden tener subtablas Las subtablas heredan: atributos, restricciones, disparadores, métodos. CREATE TYPE persona AS.... NOT FINAL CREATE TYPE bienes AS (dueñoREF (persona),.... NOT FINAL CREATE TYPE tierras UNDER bienes AS.... NOT FINAL CREATE TYPE bien_inmueble UNDER bienes AS.... NOT FINAL CREATE TYPE casas UNDER bien_inmueble AS....NOT FINAL CREATE TYPE chalet UNDER bien_inmueble AS....NOT FINAL CREATE TABLE persona OF persona(...) CREATE TABLE inmueble OF bien_inmueble CREATE TABLE tierras OF tierras UNDER bienes CREATE TABLE casa OF casas UNDER bien_inmueble Modelo de Datos Objeto-Relacional. Estándar SQL:1999.

46 2.7 Jerarquías de Tablas Las consultas sobre la supertabla, devuelven también las filas de las subtablas SELECT* FROM Inmueble WHERE.... Se pueden restringir las filas seleccionadas a las que pertenecen a la supertabla SELECT* FROM ONLY Inmueble WHERE.... Modelo de Datos Objeto-Relacional. Estándar SQL:1999.

47 Herencia en SQL:1999 Se especifica mediante UNDER Ejemplo: CREATE TYPE tipo-Manager UNDER tipo_Empl AS( depto_dirigido CHAR (20)); Tipo_Manager hereda todas las características de tipo_Empl y tiene el atributo adicional depto_dirigido

48 Herencia en SQL:1999 n Dada la siguiente definición para el tipo persona: create type Persona (nombre varchar(20), dirección varchar(20)) n Usando herencia definir los tipos estudiante y profesor create type estudiante under Persona (carrera varchar(20), departamento varchar(20)) create type profesor under Persona (sueldo integer, departamento varchar(20)) En los Subtipos pueden redefinirse los métodos usando overriding method en lugar de usar method en la declaración de los métodos.

49 Herencia Múltiple n SQL:1999 no soporta herencia múltiple n Si nuestro sistema de tipos soportara herencia múltiple, podríamos definir un tipo para ayudante de cátedra como sigue: create type Ayudante under Estudiante, Profesor Para evitar conflicto entre las dos ocurrencias de departamento las renombraríamos create type Ayudante under Estudiante with ( departmento as dpto-estudiante ), Profesor with ( departmento as dpto-profesor )

50 Herencia de Tablas n La herencia de tablas permite a un objeto tener múltiples tipos, permitiendo que una entidad pertenezca a más de una tabla a la vez. n Ejemplo: create table personas of persona n Podemos definir las tablas estudiantes y profesores como subtablas de personas create table estudiantes of estudiante under personas create table profesores of profesor under personas n Cada tupla en una subtabla (e.g. estudiantes y profesores) está implicitamente presente en sus supertablas (e.g. persona)

51 Herencia de Tablas: requerimientos de consistencia Requerimientos de consistencia entre subtablas y supertablas. A cada tupla de la supertabla (e.g. personas) le podría corresponder a lo sumo una tupla en cada una de las subtablas (e.g. estudiantes y profesores)... Requerimientos adicionales en SQL:1999: Todas las tuplas que se corresponden entre si (esto es, que tengan los mismos valores para los atributos heredados) deben ser derivadas de una(1) tupla (insertada en 1 tabla). Esto es, cada entidad debe tener un sólo tipo más específico No podemos tener una tupla en personas correspondiendo a una tupla en estudiantes y a una tupla en profesores

52 Herencia de Tablas: alternativas de almacenamiento Alternativas de almacenamiento 1. Almacenar en la subtabla sólo los atributos locales y la clave primaria de la supertabla Los atributos derivados se obtienen mediante Join con la supertabla 2. Cada tabla almacena todo, los atributos locales y los heredados Las supertablas contienen implicitamente los atributos que heredan sus subtabla El acceso a todos los atributos de una tupla es más rápido (no se necesita join) Si las entidades deben tener un tipo más específico (most specific type), las tuplas se almacenan en una (1) tabla

53 Tipos de Referencia Los lenguajes O.O. Tienen la capacidad de manejar referencias a objetos. En SQL:1999 Las Referencias son a tuplas, y Las Referencias deben tener un ámbito de aplicación (must be scoped), I.e., sólo pueden apuntar a tuplas de una tabla especificada Más adelante se estudiará como definir referencias y luego como se usan dichas referencias.


Descargar ppt "Estándar SQL:1999. Modelo de Datos Objeto-Relacional Búsqueda Bibliográfica recomendada 1)Desde hace años, Andrew Eisenberg y Jim Melton son promotores."

Presentaciones similares


Anuncios Google