Modelo Relacional de Datos Competencias específicas a adquirir (I) • • • Describir la terminología y principios fundamentales del modelo de datos relacional formal. Describir los conceptos de integridad de entidad, integridad referencial y nulos en el modelo relacional. Construir consultas de bases de datos empleando las sentencias del álgebra relacional y del cálculo relacional de tuplas, así como del lenguaje estándar SQL-92 SQL 92. Tema 2. Modelo relacional de datos 1 Modelo Relacional de Datos Competencias específicas a adquirir (I) • • • • Construir, depurar y ejecutar sentencias SQL de obtención y modificación de información almacenada en una base de datos relacional. Construir y ejecutar sentencias SQL de definición de datos, es decir, de creación, alteración y eliminación de los elementos que componen un esquema de bases de datos relacional: esquema, tablas, vistas, restricciones, etc. Construir depurar y ejecutar programas para el acceso y gestión de la Construir, información almacenada en una base de datos (procedimientos, funciones, disparadores, SQL embebido, entornos de cuarta generación, etc Acceder a las bases de datos relacionales desde un lenguaje de programación Tema 2. Modelo relacional de datos 2 1 Modelo relacional de datos Contenidos Presentación y orígenes del modelo relacional Estructura de datos relacional Características generales de integridad de datos Manipulación de datos: lenguajes relacionales Á Álgebra relacional Cálculo relacional de tuplas SQL-92 Programación con SQL Tema 2. Modelo relacional de datos 3 Modelo relacional de datos Bibliografía • [D 2001] capítulos 2 y 9; • [EN 2007] capítulos 5 a 9; • [CB 2005] capítulos 3 a 7; • [SKS 2002] capítulos 3 y 4; • [ACPT 1999] capítulos 2 y 4; • [DD 1996] capítulos 7 a 13. Tema 2. Modelo relacional de datos 4 2 1 Presentación y orígenes del MR • Introducido por Codd, 1970 • Es un Modelo de Datos Lógico - de Representación (basado en registros) • El modelo más usado en las aplicaciones comerciales de procesamiento de datos convencional • Dividido en 3 partes: 1. Estructura de Datos 2. Integridad de Datos (características generales) 3. Manipulación de Datos Tema 2. Modelo relacional de datos 5 2 Estructura de datos relacional Base de Datos = Conjunto de Relaciones • Relación – Estructura de datos fundamental del modelo – Tiene un nombre y representa una entidad genérica – Conjunto de tuplas • Cada tupla representa una entidad concreta – Compuesta de atributos con nombre (y dominio) • Cada atributo representa un atributo de la entidad – Representada mediante una tabla con filas y columnas • Modelo basado en Teoría matemática – Analogía entre “Relación” (concepto matemático) y “Tabla” – Teoría de Conjuntos y Lógica de Predicados de 1er orden » Sólida Base Formal Tema 2. Modelo relacional de datos 6 3 2 Estructura de datos relacional La relación PELICULA cardiinalidad do ominios Títulos --- ---- -- Nombres --- ---- -- Géneros Años Ciencia-ficción, Drama,Thriller, Comedia... 2002, 1997, 1999, 2001, 1994,, 1972... Países Italia,Argentina, España, EEUU, , p Francia,Japón.. título director género rodaje nacionalidad duración Amores Perros A. González Drama 2000 México 145 A. Wachowsky Ciencia-ficción 1999 EEUU 138 The Matrix Torrente S. Segura Comedia 1997 España 110 N miran Nos i N López N. Ló P li i Policiaco 2001 E ñ España 118 Amelie J. P. Jeunet Comedia 2001 Francia 122 Los lunes al sol F. León Drama 2002 España 117 atributos Tiempo --- ---- -- tuplas grado 7 Tema 2. Modelo relacional de datos 2 Estructura de datos relacional Términos básicos Procesamiento de Ficheros Modelo Relacional Formal SQL-92 Relación Tabla Fichero Fila Registro concreto cabecera de Nombre de Tupla Si la tupla t está en la relación R, entonces t∈R Atributo Debe tener un nombre único dentro de cada relación Cardinalidad di lid d nº de tuplas en una relación ó = Grado nº atributos en una relación = Dominio colección de valores permitidos para ciertos atributos = Tema 2. Modelo relacional de datos Columna Campo de registro 8 4 2 Estructura de datos relacional Definiciones formales: DOMINIO • Conjunto de valores atómicos del mismo tipo, donde toman su valor los atributos – – – – La definición de dominios forma parte de la definición de la BD Cada atributo definido sobre un ÚNICO dominio OBLIGATORIO Si A, B representan un mismo concepto, A y B con mismo dominio Dominio D puede contener valores no tomados por ningún atributo {valores de A} ⊆ Dominio(A) • Comparaciones Restringidas a Dominio – La comparación de dos atributos sólo tiene sentido si ambos toman valores del mismo dominio – Si el SGBD soporta dominios, podrá detectar este tipo de errores 9 Tema 2. Modelo relacional de datos 2 Estructura de datos relacional Definiciones formales: RELACIÓN (1) Una relación R, sobre conjunto de dominios D1, D2 ... Dn se compone p de dos partes: p • Esquema o Cabecera Conjunto de pares Atributo:Dominio { (A1:D1), (A2:D2) ... (An:Dn) } – Cada Aj tiene asociado sólo un Dj – Los Di no tienen por qué ser distintos entre sí • Estado, Cuerpo o Instancia – Conjunto de tuplas que contiene en un instante concreto – tupla = conjunto de pares Atributo:Valor { { (A1:vi1), (A2:vi2) ... (An:vin) } }, donde Tema 2. Modelo relacional de datos i=1..m 10 5 2 Estructura de datos relacional Definiciones formales: RELACIÓN (2) Un esquema de relación: PELICULA (titulo:Titulos, duracion:Tiempo, director:Nombres, estreno:Fechas) Un estado de la relación: { { (titulo:Torrente), (duracion:110), (director:S.Segura), (estreno:1997) } { (titulo:The Matrix), (duracion:138), (director:A.Wachowski), (estreno:1999) } ... } • El estado de una relación es variable en el tiempo – nuevas tuplas, modificación o borrado de existentes • El esquema no suele variar costoso: · reescritura de “miles” de tuplas · ¿valores de nuevos atributos para tuplas ya existentes? – Suele incluir un conjunto de Reglas de Integridad (se verá) 11 Tema 2. Modelo relacional de datos 2 Estructura de datos relacional Definiciones formales: RELACIÓN (3) • Propiedades de una Relación 1 No existen 1. e i ten tuplas t plas repetidas epetidas 2. Las tuplas no están ordenadas estado = conjunto matemático de tuplas 3. Los atributos no están ordenados esquema = conjunto de pares Atributo:Dominio 4 Los valores de atributos son Atómicos 4. dominio = conjunto de valores atómicos Intersección fila/columna = un solo valor (no lista de valores) Si R cumple esta propiedad, R está en 1FN Tema 2. Modelo relacional de datos 12 6 2 Estructura de datos relacional Definiciones formales: RELACIÓN (4) • FORMAS NORMALES R está en <determinada> determinada FN si cumple <cierto> conjunto de condiciones o restricciones necesarias para estar bien diseñada de acuerdo con el modelo relacional de datos. • Toda relación ha de estar en 1FN (estructura de datos simple) Tema 2. Modelo relacional de datos 13 2 Estructura de datos relacional Definiciones formales: RELACIÓN (5) • Relación vs. Tabla – Relación: Representación abstracta de un elemento de datos – Tabla: Representación concreta de tal elemento abstracto – Ventajas Representación muy sencilla (tabla) del elemento abstracto básico (relación) del Modelo Relacional Fácil á l de d utilizar, l entender, d razonar... – Inconveniente Aparente orden entre filas y entre columnas de la tabla Tema 2. Modelo relacional de datos 14 7 2 Estructura de datos relacional Definiciones formales: BD RELACIONAL (1) • Percibida por usuarios como una colección de relaciones – de diversos g grados (nº ( de atributos)) – que varían con el tiempo (nº de tuplas, estado) • Las relaciones (tablas) son la estructura lógica de la BD – Niveles externo y conceptual ANSI/X3/SPARC • Toda BDR cumple el Principio de Información: Todo contenido de información de la BD está representado d una y sólo de ól una forma: f como valores l explícitos lí it dentro de posiciones de columnas dentro de filas dentro de tablas • Conexión lógica entre Relaciones (vínculo o interrelación) – Representada mediante valores – No existen punteros (visibles al usuario) Tema 2. Modelo relacional de datos 15 2 Estructura de datos relacional Definiciones formales: BD RELACIONAL (2) • En una BDR distinguimos... – Esquema de base de datos Descripción de la base de datos Conjunto de esquemas de relación PELICULA ( titulo:Títulos, director:Nombres, género:Géneros, rodaje:Años, nacionalidad:Países, duración:Tiempo ) ACTOR ( nombre:Nombres, nombreArtistico: Nombres, agente:Nombres, cache:Dinero ) DIRECTOR ( nombre:Nombres, b N b nacionalidad:Países, i lid d P í operaPrima:Títulos P i Tít l ) ... – Estado o instancia de base de datos Visión del contenido de la base de datos en cierto instante Conjunto de estados de relación Tema 2. Modelo relacional de datos 16 8 Recopilando… • Qué es una Relación • Qué es un Dominio • Cuáles son las propiedades de una Relación • Diferencias entre Relación y Tabla • Rol de las relaciones en la arquitectura ANSI/SPARC Tema 2. Modelo relacional de datos 17 3 Características generales de integridad de datos • Todo estado de BD refleja la realidad – es un modelo de una porción del mundo real (minimundo) • Algunas configuraciones de valores NO tienen SENTIDO – pues no representan ningún estado posible del minimundo 2 personas distintas con el mismo DNI Un empleado sin NSS Un alumno con -29 años Una película sin director Definición de la BD (esquema) necesita incluir REGLAS DE INTEGRIDAD Tema 2. Modelo relacional de datos 18 9 3 Características generales de integridad de datos Reglas de integridad • • • • Informan al SGBD de restricciones del mundo real Así, A í ell SGBD evita it configuraciones fi i de d datos d t imposibles i ibl Aumentan la capacidad expresiva del modelo relacional Cumplen que: • Forman parte de la base de datos • Se cumplen para cualquier estado de la BD • No varían con el tiempo • Son específicas de cada BD particular, particular pero el Modelo Relacional incluye... características generales de integridad importantes y necesarias en toda BD Tema 2. Modelo relacional de datos Claves Candidatas y Primarias Claves Ajenas (o foráneas o externas) 19 3 Características generales de integridad de datos Superclave y Clave de una relación Sea R una relación R(A1:D1 , A2:D2 ,... An:Dn ) • Una superclave de R es un subconjunto SK de atributos tal que cumple la restricción de Unicidad: No existen dos tuplas distintas con la misma combinación de valores para SK • Una clave de R es una superclave tal que cumple la restricción de Irreductibilidad: Ningún subconjunto de CK cumple la r. Unicidad • Clave Simple (1 atributo) o Compuesta (varios atributos) • Cada clave es una restricción de integridad Tema 2. Modelo relacional de datos 20 10 3 Características generales de integridad de datos Superclave y Clave: Ejemplos • Claves como restricción de integridad CLIENTE (codCliente, (codCliente nombre nombre, ciudad ciudad, telefono telefono,...)) ¿Qué implicaciones tiene establecer como clave... a) CK = {codCliente, ciudad} b) CK = {codCliente} …? • Varias claves en una relación «Relación para registrar las visitas de pacientes a sus médicos de familia. Un mismo paciente i t puede d visitar i it a su médico édi varias i veces en un mismo i dí día» VISITAMEDICA (nssPaciente, historial, fecha, hora, numVisita, medico, observ) Claves (VISITAMEDICA)={ {nssPaciente, numVisita}, {nssPaciente, fecha, hora}, {historial, numVisita}, {historial, fecha, hora} } 21 Tema 2. Modelo relacional de datos 3 Características generales de integridad de datos Clave Candidata, Primaria y Alternativa • Si R tiene varias claves Claves Candidatas Claves (ACTOR) = { {nombre} {nombre}, {nombreArtistico} } Claves (EMPLEADO) = { {dni}, {nombre, fechaNac}, {nss} } • La Clave Primaria (Primary Key, PK ) es la clave candidata elegida para identificar las tuplas de R Clave Primaria (ACTOR) = {nombreArtistico} Clave Primaria (EMPLEADO) = {nss} • Las Claves Alternativas (Alternative Keys, AK) son el resto de claves candidatas Claves Alternativas (ACTOR) = {nombre} Claves Alternativas (EMPLEADO) = { {dni}, {nombre, fechaNac} } Tema 2. Modelo relacional de datos 22 11 3 Características generales de integridad de datos Clave Ajena (Externa o Foránea) • Conjunto de atributos FK de una relación R2, tal que: 1. Existe otra relación R1 con clave primaria PK , y 2. Cada valor de FK en R2 es idéntico al de PK en alguna tupla de R1 Conjunto de atributos de una relación que hace referencia a la clave primaria de otra relación (o la misma) • PELICULA (título, género, duración, director, ...) DIRECTOR ((nombre, nacionalidad, ...)) • EMPLEADO (codEmp, nombre, jefe, nss, ...) • LIBRO (título, isbn, autor, editorial, edición, año, ...) ESCRITOR (dni, nombre, ...) ARTICULO (título, tema, autor, revista, página, ...) 23 Tema 2. Modelo relacional de datos 3 Características generales de integridad de datos Clave Ajena (Externa o Foránea) (2) • Cada componente de una FK debe estar definido sobre el mismo dominio que el correspondiente atributo de la PK a la que referencia PACIENTE (nss, nombre, dirección, ...) HISTORIAL (nss, especialidad, fechaApert, ...) VISITA (nss, especialidad, numVisita, fecha, ...) • Clave Ajena Simple o Compuesta • El uso de Claves Ajenas facilita... – Eliminación de la Redundancia: Integridad entre ficheros – Mecanismo del Modelo Relacional de datos para establecer VÍNCULOS ENTRE RELACIONES Tema 2. Modelo relacional de datos 24 12 3 Características generales de integridad de datos Clave Ajena (Externa o Foránea) CUENTA número saldo ... Cada cliente sólo puede tener una cuenta a su nombre. Una cuenta puede tener más de un cliente como titular. CLIENTE nombre (3) 200 35000 505 40000 821 50000 ... dirección ciudad cuenta G í A García, G Ví Gran Vía, 6 M i Murcia 200 López, B Ronda Norte, 3 Murcia 821 Azorín, C Paseo Nuevo, 9 Valencia 505 Pérez, C Plaza Mayor, 2 505 Valencia Vínculo ClienteCuenta ... 25 Tema 2. Modelo relacional de datos 3 Características generales de integridad de datos Clave Ajena (Externa o Foránea) (4) • Restricción de Integridad Referencial Todo valor de una FK debe coincidir con un valor en la correspondiente PK – La BD no debe contener claves ajenas sin correspondencia: Si una tupla en una relación hace referencia a otra relación, debe referirse a una tupla existente en esa relación ARTICULO FK ESCRITOR • 1 Puede existir algún valor de PK al que NO haga referencia ningún valor de la FK – ESCRITOR que no haya escrito artículos: ninguna tupla de ARTICULO hará referencia a la tupla correspondiente a dicho escritor Tema 2. Modelo relacional de datos 26 13 3 Características generales de integridad de datos Clave Ajena (Externa o Foránea) (y 5) • Diagrama Referencial – Expresión E ió de d la l existencia i t i de d Claves Cl Ajenas Aj • Camino Referencial LIBRO título isbn autor editorial ... ESCRITOR dni nombre ... editorial ARTICULO título tema autor revista pág ... EDITORIAL nombre dirección ... EMPL codEmp ... dep • Ciclo Referencial DEPTO codDep ... dire – Camino que empieza y acaba en la misma relación – Caso especial: Autorreferencia EMPLEADO codEmp ... jefe 27 Tema 2. Modelo relacional de datos 3 Características generales de integridad de datos Mantenimiento de la Integridad Referencial • Las operaciones que no satisfacen –violan– la Integridad R f Referencial, i l dejan d j la l BD en un estado t d incorrecto i t Ejemplo de un Hotel: – ¿Qué pasaría si se eliminara la tupla (501, D, ...) en HABITACIÓN? – ¿Y si se eliminara la tupla (100, D, ...)? – ¿Y si se anotara la ocupación de la habitación 900? OCUPACIÓN codClie habit ... HABITACIÓN numHabit tipo ... 100 115 I CLI02 420 420 I CLI05 115 100 D CLI10 100 304 D CLI04 Tema 2. Modelo relacional de datos 405 I 501 D 28 14 3 Características generales de integridad de datos Mantenimiento de la Integridad Referencial (2) • ¿Cómo evita el SGBD esos estados incorrectos? El SGBD puede... Rechazar toda operación que pueda provocar un estado ilegal, o Aceptar (y ejecutar) tales operaciones, pero realizar acciones que restauren la integridad de los datos Diseñador Di ñ d de d la l BD puede d especificar ifi all SGBD Acciones de Mantenimiento de la Integridad Referencial para que la BD SIEMPRE alcance un estado final legal 29 Tema 2. Modelo relacional de datos 3 Características generales de integridad de datos Mantenimiento de la Integridad Referencial (3) R2 ⎯→ R1 Operación: Eliminar una tupla t de R1 que es referenciada por otras de R2 Ejemplo: Eliminar la tupla (100, D, ...) de HABITACIÓN Acciones posibles: 1. Rechazar la operación (acción por defecto) Sólo permite borrar t si ninguna otra tupla hace referencia a t 2. Cascada. Propagar la eliminación 1º Borrar todas las tuplas de R2 que referencian a t 2º Eliminar t 3. Establecer nulos – (* se verá después *) Tema 2. Modelo relacional de datos 30 15 3 Características generales de integridad de datos Mantenimiento de la Integridad Referencial (4) R2 ⎯→ R1 Operación: Modificar el valor de una FK a un valor no existente en la PK de R1 Ejemplo: Modificar (CLI02, 420,...) a (CLI02, 900,...) en OCUPACIÓN Acción: 1. Rechazar la operación (SIEMPRE) Intento de violación de la restricción de Integridad Referencial 31 Tema 2. Modelo relacional de datos 3 Características generales de integridad de datos Mantenimiento de la Integridad Referencial (5) Operación: Modificar el valor de la PK de una tupla t de R1 que es referenciada f i d por otras t tuplas t l d de R2 Ejemplo: Modificar la tupla (100, D,...) a (130, D,...) en HABITACIÓN Acciones posibles: 1. Rechazar la operación (acción por defecto) Sólo permite modificar la PK de t si ninguna tupla referencia a t 2. Cascada. Propagar p g la modificación - Toda tupla de R2 que referencia a t seguirá haciendolo: modificar su valor de FK al nuevo valor de la PK de t - Modificar el valor de la clave primaria de t 3. Establecer nulos – (* se verá después *) Tema 2. Modelo relacional de datos 32 16 3 Características generales de integridad de datos Mantenimiento de la Integridad Referencial (6) R2 ⎯→ R1 Operación: Inserción de una tupla t en R2 cuyo valor de FK no se corresponde con ningún valor de la PK en ninguna tupla de R1 Ejemplo: Insertar una tupla (CLI03, 555, ...) en OCUPACIÓN Acciones posibles: - Rechazar ec a a la a operación ope ac ó (S (SIEMPRE)) Intento de violación de la restricción de Integridad Referencial 33 Tema 2. Modelo relacional de datos 3 Características generales de integridad de datos Mantenimiento de la Integridad Referencial (y 7) • Encadenamiento de eliminaciones (análogo para Modificación) R3 → R2 → R1 R2 → R1, Acción de Eliminación en Cascada R3 → R2, Acción de Eliminación X - Eliminar una tupla de R1 eliminar tuplas de R2 que la referencian - Pero existen tuplas en R3 que referencian esas tuplas de R2... ¿cómo afecta la Acción de Eliminación X en esta operación? Si X = en CASCADA, no-problemo! eliminar esas tuplas de R3 Si X = RECHAZAR La operación completa fallará • Las operaciones de actualización en una BD son siempre atómicas: se realiza “TODO o NADA” PROFESOR → ÁREA → DEPARTAMENTO ASIGNATURA → TITULACIÓN → UNIVERSIDAD Tema 2. Modelo relacional de datos 34 17 3 Características generales de integridad de datos Nulos • En el mundo real existe... – información perdida fechaNacimiento desconocida – ausencia de información ¿tiene teléfono? – valores no aplicables a ciertos atributos fechJubilac a empleado activo • Para representar estas situaciones en los sistemas de BD se utiliza el NULO (null) – Si una tupla tiene un atributo que contiene un nulo, significa que el valor real de tal atributo es desconocido – Es posible especificar si un atributo puede o no contener nulo nulo no es un valor en sí mismo, sino un indicador de ausencia de información No hay dos nulos iguales (num_telefono NULL ≠ edad NULL) Tema 2. Modelo relacional de datos 35 3 Características generales de integridad de datos Implicaciones de los nulos en la integridad • Nulo y Claves Primarias Restricción de Integridad de Entidad: Ningún atributo componente de una clave primaria puede contener nulo EMPLEADO (codEmp, nss, nombre, telefono, depto, jefe...) ¿Qué pasaría si codEmp pudiera contener NULO? • Nulo y Claves Ajenas El Modelo Relacional permite nulo como valor de clave ajena depto = null empleados no asignados a ningún departamento jefe = null empleados sin jefe Tema 2. Modelo relacional de datos 36 18 3 Características generales de integridad de datos Implicaciones de los nulos en la integridad (2) • Hemos de extender la definición de clave ajena Sea R2 una relación. FK es una clave ajena en R2 si es un subconjunto de sus atributos tal que: 1. Existe otra relación R1 con clave primaria PK y 2. En todo momento, cada valor de FK en R2 a) es NULO, o b) es idéntico a un valor de PK en alguna tupla de R1 • Restricción de Integridad Referencial La Base de Datos no debe contener valores no nulos de clave ajena sin correspondencia Tema 2. Modelo relacional de datos 37 3 Características generales de integridad de datos Implicaciones de los nulos en la integridad (3) • Hay que extender algunas acciones de mantenimiento de l Integridad la I t id d Referencial: R f i l R2 ⎯→ R1 Operación: Eliminar una tupla t de R1 que es referenciada por otras de R2 Acciones posibles: 1. Rechazar la operación (acción por defecto) 2. Cascada. Propagar la eliminación 3. Establecer nulos 1 Sólo si la FK de R2 permite NULO - Toda tupla de R2 que referencia a t pasa a contener NULL en FK - Eliminar la tupla t Tema 2. Modelo relacional de datos 38 19 3 Características generales de integridad de datos Implicaciones de los nulos en la integridad (y 4) R2 ⎯→ R1 Operación: Modificar el valor de la PK de una tupla t de R1 que es referenciada por otras tuplas de R2 Acciones posibles: 1. Rechazar la operación (acción por defecto) 2. Cascada. Propagar la modificación 3. Establecer nulos 1 Sólo si la FK de R2 permite NULO - Toda tupla de R2 que referencia a t pasa a contener NULL en FK - Modificar el valor de la PK de t Tema 2. Modelo relacional de datos 39 3 Características generales de integridad de datos Resumiendo, el SGBD se encarga de... • Comprobar las claves candidatas (primaria y alternativas): No existen dos tuplas distintas con igual valor para una clave Definición de BD : indicar los Atributos Componentes de las Claves Candidatas • Comprobar la restricción de Integridad de entidad Ningún atributo componente de una clave primaria contiene nulo Definición de BD : indicar los Atributos Componentes de la Clave Primaria • Comprobar la restricción de Integridad Referencial... El valor de la clave ajena en cualquier tupla, tupla o es nulo, nulo o coincide con un valor de clave primaria de alguna tupla en la relación referenciada Definición de BD : indicar los Atributos Componentes de las Claves Ajenas • ... y mantenerla frente operaciones que puedan violar la integridad Definición de BD : indicar Acciones de Mantenimiento de la Integridad Referencial Tema 2. Modelo relacional de datos 40 20 Recopilando… • Definir la restricción de integridad de entidad • Definir la restricción de integridad referencial • Explicar el papel desempeñado por los valores nulos y sus implicaciones en la integridad Tema 2. Modelo relacional de datos Dominio Definición del Dominio CODPEL CODGUI CODDIR CODDIS CODACT CODAGE SEXOS TEXTO PORCENT DINERO NIF TITULOS GENEROS PAISES AÑOS FECHAS NOMBRES APELLIDOS DOMICILIOS TELEFONOS TIPO_PAPEL enteros(3) enteros(3) enteros(3) enteros(2) enteros(4) enteros(2) { M, F } cadena caracteres variable (500) enteros (2) enteros(9) cadena caracteres fija (12) cadena caracteres variable (120) {comedia,drama,terror,suspense,accion,romantica,gore,pulp,roadmovie} {españa,francia,gran_bretaña,eeuu,australia,alemania,la_india,argentina} AÑO FECHA cadena caracteres variable (35) cadena caracteres variable (80) cadena caracteres variable (50) cadena caracteres variable (15) {protagonista, secundario, reparto, figuracion} Tema 2. Modelo relacional de datos 41 42 21 Esquema “PRODUCTORA” PELICULA (codP:CODPEL, titulo:TITULOS, año:AÑO, genero:GENEROS, guion:CODGUI, director:CODDIR, directorFotog:CODDIR, distrib:CODDIS, nacio:PAISES, estreno:FECHA, numOscar:enteros(2), taquilla:DINERO) DIRECTOR (codDir:CODDIR, nombre:NOMBRES, apellidos:APELLIDOS, nacio:PAISES, fechaNacim:FECHA operaPrima:CODPEL) fechaNacim:FECHA, DIREC_FOTOG (codDF:CODDIR, nombre:NOMBRES, apellidos:APELLIDOS, nacionalidad:PAISES, fechaNacim:FECHA, ultTrabajo:CODPEL) GUION (codG:CODGUI, titulo: TITULOS, resumen: TEXTO, nomAutorPpal:NOMBRES, fechaFin:FECHA, fechaEntrega:FECHA) DISTRIBUIDORA (codDis:CODDIS, nombre:NOMBRES, cif:NIF, direccion:DOMICILIO, telefono:TELEFONOS, porcentaje:PORCENT) ACTOR (codA:CODACT, nombre:NOMBRES, nomReal:NOMBRES, nacionalidad:PAISES, fechaNacim:FECHA, sexo:SEXOS, agencia:CODAGE, cache:DINERO) AGENCIA (codAg:CODAGE, nombre:NOMBRES, direccion:DOMICILIO, telefono:TELEFONOS) ACTUA_EN (actor:CODACT, film:CODPEL, papel:TIPO_PAPEL, paga:DINERO) Tema 2. Modelo relacional de datos 43 4 Manipulación de datos 4.1. Álgebra Relacional • Definida por Codd, 1972 • Colección de operadores que toman relaciones como operandos y devuelven relaciones como resultado – Operadores tradicionales sobre conjuntos unión intersección diferencia producto cartesiano Los operandos son relaciones, y NO conjuntos arbitrarios operaciones adaptadas a relaciones (tipo especial de conjuntos) – Operadores relacionales especiales restricción proyección reunión ( join ) división Tema 2. Modelo relacional de datos 44 22 Álgebra Relacional Clausura relacional El resultado de cualquier operación del álgebra relacional es otra relación ☺ la salida de una operación puede ser entrada (operando) de otra Expresiones Anidadas Sus operandos son otras expresiones del álgebra (en lugar de nombres de relación) Tema 2. Modelo relacional de datos 45 Álgebra Relacional Compatibilidad de tipos (o con la unión) • En matemáticas, A∪B = { e / e∈A y-o e∈B } • Relación = conjunto de tuplas es posible ibl hacer h la l unión ió de d dos d relaciones l i RyS • R∪S = { t / t∈R y-o t∈S } – Conjunto de todas las tuplas que están en R y/o en S – Sin embargo... PELICULA ∪ DIRECTOR es un conjunto, pero no es una relación Las relaciones deben ser homogéneas: no pueden contener mezcla de tuplas de distintos tipos – Ha de mantenerse la Propiedad de Clausura: el resultado de la operación DEBE ser una relación » Las relaciones de entrada deben ser de tipos compatibles Tema 2. Modelo relacional de datos 46 23 Álgebra Relacional Compatibilidad de tipos (y 2) Sean R ( r1, r2,..., rn ), S ( s1, s2, ..., sn ) • Relaciones R y S compatibles en tipo si tienen el “ i “mismo” ” esquema, es d decir: i 1. Igual número de atributos: grado(R) = grado(S) = n 2. Atributos correspondientes definidos sobre el mismo dominio: dom(ri) = dom(si) ,, i = 1, 2, ..., n Ejemplo DIRECTOR y DIR_FOTOG Ejemplo: DIR FOTOG son de tipos compatibles UNIÓN, INTERSECCIÓN, DIFERENCIA necesitan operandos compatibles en tipo PRODUCTO CARTESIANO no necesita compatibilidad de tipo en sus operandos Tema 2. Modelo relacional de datos 47 Álgebra Relacional Unión de relaciones R∪S, con R y S compatibles en tipo, es una relación tal que: Esquema: el de R (o S) Estado: conjunto de tuplas que están en R, en S o en ambas Las tuplas repetidas se eliminan (por definición) Ejemplo: DIRECTOR ∪ DIR_FOTOG Intersección de relaciones R∩S,, con R y S compatibles p en tipo, p , es una relación tal q que: Esquema: el de R (o S) Estado: conjunto de tuplas que están a la vez en R y en S Ejemplo: DIRECTOR ∩ DIR_FOTOG Tema 2. Modelo relacional de datos 48 24 Álgebra Relacional Diferencia entre relaciones R―S, con R y S compatibles en tipo, es una relación tal que: Esquema: el de R (o S) Estado: conjunto de tuplas que están á en R, pero NO en S operación con «cierta direccionalidad», como la resta aritmética Ejemplo: DIRECTOR ― DIR_FOTOG Secuencias de operaciones • La propiedad de clausura relacional permite aplicar una operación tras otra Sean R, S, T relaciones de tipos compatibles, – Única expresión: expresiones anidadas R∩(S∪T) – Varias expresiones: relaciones intermedias con nombre A←S∪T B←R∩A Tema 2. Modelo relacional de datos 49 Álgebra Relacional Renombramiento de atributos • Por defecto, los atributos de la relación resultado de una operación heredan los nombres de los del operando más a la izquierda DIR ← DIRECTOR ∪ DIR_FOTOG Los atributos de DIR tienen los mismos nombres que los de DIRECTOR • Se puede indicar una lista con nuevos nombres para los atributos de la relación resultado: DIR(codDir nomDir apeDir nacDir fechaNac pelic) ← DIRECTOR ∪ DIR_FOTOG DIR(codDir,nomDir,apeDir,nacDir,fechaNac,pelic) DIR FOTOG Tema 2. Modelo relacional de datos 50 25 Álgebra Relacional Producto Cartesiano entre relaciones • En matemáticas, A Χ B = { (a,b) / a∈A y b∈B } • Relación = conjunto de tuplas, es posible ibl ell producto d t cartesiano t i entre t relaciones l i RyS • R Χ S = { (tR,tS) / tR∈R y tS∈S } – Conjunto de pares ordenados de tuplas de R y S – Pero ha de conservarse la Propiedad de Clausura: » El resultado debe ser un conjunto de tuplas (no de pares de) Producto Cartesiano Ampliado, pues cada par ordenado es sustituido por la tupla resultante de la combinación de las dos tuplas origen Tema 2. Modelo relacional de datos 51 Álgebra Relacional Producto Cartesiano entre relaciones (2) • R Χ S, con R y S cualesquiera, es una relación tal que: Esquema: combinación (unión) de los esquemas de R y S Estado: conjunto de todas las tuplas formadas por las posibles combinaciones de cada tupla de R con cada tupla de S Ejemplo: PELICULA Χ DIRECTOR Obtiene un conjunto de tuplas tales que cada una es la combinación de una tupla de PELICULA y otra de DIRECTOR • Operación sin demasiada importancia práctica – No se tiene más información a la salida que a la entrada – pero es necesaria para definir la operación REUNIÓN (JOIN) Tema 2. Modelo relacional de datos 52 26 Álgebra Relacional Producto Cartesiano entre relaciones (y 3) • El esquema de la relación resultante de R Χ S debe estar bien formado (nombres de atributos únicos) • Si R y S tienen atributos con igual nombre, R Χ S tendría ¡dos atributos nombrados igual! ko! ACTOR Χ AGENCIA “colisión” de nombres en atributo “nombre” • Soluciones posibles: 1. Renombrar atributos de una relación, antes del producto AGENCIA_2(codAge, nomAge, direccion, telefono) ← AGENCIA RESULTADO ← ACTOR Χ AGENCIA_2 2. Prefijar atributos con el nombre de su tabla, en la tabla resultado RESULTADO(codA, ACTOR.nombre, nomreal,..., codAg, AGENCIA.nombre, ...) ← ACTOR Χ AGENCIA Tema 2. Modelo relacional de datos 53 Álgebra Relacional Propiedades de los operadores relacionales R, S, T relaciones de tipos compatibles • Asociativa (R∪S)∪T≡R∪(S∪T)≡R∪S∪T (R∩S)∩T≡R∩(S∩T)≡R∩S∩T ( R Χ S ) Χ T ≡ R Χ ( S Χ T) ≡ R Χ S Χ T L • Conmutativa R∪S ≡S∪R R∩S ≡S∩R RΧS ≡SΧR L • La diferencia no cumple ninguna de estas propiedades L El producto cartesiano “normal” no las cumple, pero sí el “ampliado” Tema 2. Modelo relacional de datos 54 27 Álgebra Relacional Restricción de una relación σ • Obtener un subconjunto de las tuplas de una relación para las cuales se satisface una condición de selección σ <condición> (<relación>) • Resultado: Relación (conjunto de tuplas) con atributos de <relación> • <condición> es una expresión booleana… – Especificada en términos de atributos de <relación> – Compuesta p por p una o más cláusulas,, del tipo: p <nomAtrib> <opComp> <cte> o bien <nomAtrib> <opComp> <nomAtrib> • <opComp> operador de comparación ∈ {=, <, ≤, >, ≥, ≠} • <cte> valor constante ∈ dominio del atributo <nomAtrib> • Cláusulas conectadas por operadores booleanos AND, OR, NOT Tema 2. Modelo relacional de datos 55 Álgebra Relacional Restricción de una relación (2) • Ejemplos: * Tuplas de actores representados por la agencia número 2 σ σ agencia=2 (ACTOR) * Actores cuyo caché rebasa los 30.000€ cache>30000 (ACTOR) * Actores representados por la agencia número 2, 2 cuyo cache no llega a los 22.000€, o bien por la agencia 4 y con caché superior a 32.000€ σ (agencia=2 AND cache<25000) OR (agencia=4 AND cache>35000) (ACTOR) Tema 2. Modelo relacional de datos 56 28 Álgebra Relacional Restricción de una relación (3) • Mecanismo de selección del sistema – Aplica <condición> a cada tupla individual de <relación>, sustituyendo cada d atributo t ib t por su valor l en la l tupla t l – Si <condición> es TRUE, la tupla se selecciona para el resultado • Operador Restricción: Unario – Sólo se aplica a UNA relación Nunca puede seleccionar tuplas de más de una relación – Se aplica a UNA sola tupla a la vez <condición> nunca se refiere a más de una tupla • Grado(Relación Resultado) = Grado(Relación Origen) – Tienen los mismos atributos • Nº Tuplas(Relación Resultado) ≤ Nº Tuplas(Relación Origen) 57 Tema 2. Modelo relacional de datos Álgebra Relacional Restricción de una relación (y 4) • La operación restricción es conmutativa σ (σ cond1 cond2 (R) )≡ σ (σ cond2 cond1 (R) ) Esto permite … ̶ Secuencia de restricciones (selecciones) en cualquier orden ̶ Combinación de una secuencia de restricciones en una única restricción con una condición conjuntiva: σ (σ (...(σ cond1 cond2 Tema 2. Modelo relacional de datos condn (R))...)) ≡σcond1 AND cond2 AND...AND condn(R) 58 29 Álgebra Relacional ∏ Proyección de una relación • Sólo interesan algunos atributos de una relación • Se proyecta la relación sobre esos atributos • Restricción R t i ió vs. Proyección P ió : – – σ selecciona algunas tuplas de la relación y desecha otras ∏ selecciona ciertos atributos y desecha los demás ∏<listAtrib>(<relación>) • Resultado: Relación (conjunto de tuplas) cuyos atributos son sólo ó los de <listAtrib> y en ese orden • <listAtrib> lista de nombres de atributos de <relación> * Obtener el código, nombre y el caché de todos los actores ∏codA, nombre, cache(ACTOR) 59 Tema 2. Modelo relacional de datos Álgebra Relacional Proyección de una relación (2) • Si <listAtrib> no contiene atributos clave ¡tuplas repetidas! * Obtener Obt lla agencia i y la l nacionalidad i lid d de d todos t d llos actores t ∏agencia, nacionalidad(ACTOR) » Eliminación implícita de duplicados – Resultado ≡ relación válida • Grado(Relación Resultado) = Nº atributos(<listAtrib>) • Nº Tuplas(Relación Resultado) ≤ Nº Tuplas(Relación Origen) y es igual (=) si <listAtrib> contiene una clave candidata Tema 2. Modelo relacional de datos 60 30 Álgebra Relacional Proyección de una relación (y 3) • La operación proyección no es conmutativa ∏lista1 (∏ lista2 (R) ) ≠ ∏lista2 (∏lista1 (R) ) • Además, siempre que lista1 ⊆ lista2, entonces... ∏lista1 (∏ lista2 (R) ) = ∏lista1 (R) Tema 2. Modelo relacional de datos 61 Álgebra Relacional Ejercicios Tema 2. Modelo relacional de datos 62 31 Álgebra Relacional Reunión o Join entre dos relaciones • Combina las tuplas relacionadas de dos relaciones en una sola tupla • Permite procesar vínculos entre relaciones * Datos de películas junto con los de su director correspondiente – Es necesario combinar cada tupla de PELÍCULA, p, con la tupla DIRECTOR, d, tal que el valor de codDir en d coincida con el de director en p – Se consigue aplicando la operación REUNIÓN a las dos relaciones R1 ← PELICULA director=codDir DIRECTOR 63 Tema 2. Modelo relacional de datos Álgebra Relacional Reunión o Join entre dos relaciones (2) PELICULA ( codP, título, año, genero, guión, director, directorFotog, distrib, nacio, estreno, numOscar, taquilla ) DIRECTOR ( codDir, nombre, apellido, nacio, fechaNacim, óperaPrima ) * Títulos de películas junto con nombre y apellido de su director – Se consigue aplicando la operación REUNIÓN a las dos relaciones – Y proyectando el resultado sobre los atributos requeridos R2←∏titulo,nombre,apellido (PELICULA R2 titulo La caja 507 nombre Enrique ) director=codDir DIRECTOR apellido Urbizu Mensaka Salvador Gª Ruiz El viaje de Carol Imanol Uribe Airbag Juanma Bajo Ulloa Tema 2. Modelo relacional de datos 64 32 Álgebra Relacional Reunión o Join entre dos relaciones (3) • Forma General para relaciones A(a1, a2, ... an) y B(b1, b2, ... bm): A < di ió d <condición de reunión> ió >B • Resultado: Relación con n+m atributos (a1, a2, ... an, b1, b2, ... bm) Esquema: unión de las cabeceras de A y B Estado: conjunto de tuplas, una por cada combinación de tuplas (una de A y otra de B) que satisface <condición de reunión> • Reunión vs. Producto Cartesiano – En el Producto Cartesiano aparecen todas las combinaciones posibles de tuplas de A y de B Tema 2. Modelo relacional de datos 65 Álgebra Relacional Reunión o Join entre dos relaciones (4) • <condición de reunión> – Expresión booleana especificada en términos de atributos de A y B – Evaluada para cada combinación (par) de tuplas: Si la cumplen, forman una nueva tupla de la relación resultado – Es de la forma: <condición> AND <condición> AND... AND <condición> donde: <condición> tiene la forma ai θ bj (condición de reunión general), y · ai es un atributo de A; bj es un atributo de B, · Dominio(ai) = Dominio(bj), · θ (theta) cumple que θ ∈ {=, <, ≤, >, ≥, ≠} • Reunión con condición de reunión general ≡ REUNIÓN THETA Tema 2. Modelo relacional de datos 66 33 Álgebra Relacional Reunión o Join entre dos relaciones (5) • La reunión más común es la que implica comparación de igualdad ( θ ≡ = ) EQUI-REUNIÓN (o REUNIÓN, a secas) * Actores A t y agencias i que los l representan t ACTOR agencia=codAg AGENCIA • Problema: colisión de nombres de atributos – Existen atributos nombrados igual en ACTOR y AGENCIA ko! – Resultado con varios atributos de igual nombre – Dos soluciones alternativas posibles: 1. Previo renombramiento de atributos de una relación AGENC(codAg, nomAg, dirAg, tel) ← AGENCIA R← ∏nombre, nomAg (ACTOR agencia=codAg AGENC) 2. Prefijar atributos con el nombre de su tabla R← ∏ACTOR.nombre,AGENCIA.nombre(ACTOR agencia=codAg AGENCIA) 67 Tema 2. Modelo relacional de datos Álgebra Relacional Reunión o Join entre dos relaciones (6) • Las tuplas cuyos atributos de reunión son nulos, NO aparecen en la relación resultado – Los actores que se auto-representan tienen NULL en atributo agencia – Sus tuplas no aparecen en ACTOR agencia=codAg AGENC • Las tuplas de una relación que no encuentran correspondencia en la otra, tampoco aparecen en la relación resultado – Los actores que no han actuado en ninguna película, no aparecen en ninguna tupla de la tabla ACTUA_EN – Sus tuplas no aparecen en ACTOR Tema 2. Modelo relacional de datos codA=actor ACTUA_EN 68 34 Álgebra Relacional Reunión o Join entre dos relaciones (y 7) • En general, sea A con nA tuplas y B con nB tuplas, entonces R← A <condición de reunión> B cumple p que q 0 ≤ nR ≤ nA *nB • Si ninguna combinación de tuplas de A y B cumple la <condición de reunión>, entonces – Relación Resultado = Relación vacía (cero tuplas) • Si NO se especifica <condición de reunión>, reunión> entonces – la <condición de reunión> es TRUE para todas las tuplas, y – ≡Χ (REUNIÓN ≡ PROD. CARTESIANO ≡ REUNIÓN CRUZADA) 69 Tema 2. Modelo relacional de datos Álgebra Relacional Reunión natural entre relaciones Ä AÄB • Caso particular de reunión, quizá el más importante • No «necesita» especificar condición de reunión, pues... • ... iguala todos los pares de atributos con igual nombre en A y B – Es una EQUI-REUNIÓN + eliminación de atributos superfluos Sólo conserva un atributo de reunión – La definición estándar de reunión natural exige que los atributos de reunión deben tener nombre idéntico en ambas relaciones operando – Si no es así, aplicar antes un renombramiento de atributos – 1 deben tener el mismo dominio Tema 2. Modelo relacional de datos 70 35 Álgebra Relacional Reunión natural entre relaciones (2) R a b c R(a, b, c) S(b, d) S b d 10 1 100 3 -4 20 3 100 1 -5 30 5 300 T1 ← R T1 R.b=S.b S, tiene a R.b c S.b d 10 1 100 1 -5 20 3 100 3 -44 el esquema T1 ( a, R.b, c, S.b, d ) T2 ← R Ä S, tiene el esquema T2 ( a, b, c, d ) T2 a b c d 10 1 100 -5 20 3 100 -4 Tema 2. Modelo relacional de datos 71 Álgebra Relacional Reunión natural entre relaciones (y 3) • Ejemplos: 1. Título de todas las películas junto con el título y resumen de su guión GUIO(guion, (g , titGuion,, resumen,, nomAutorPpal, p , fechaFin,, fechaEntrega) g ) ← GUION RESUMEN ← ∏titulo, titGuion, resumen (PELICULA Ä GUIO) 2. Títulos de películas junto con el nombre y apellidos de su director DIREC(director, nombre, apellidos, nacio, fechaNacim, operaPrima) ← DIRECTOR PELI_DIRE ← ∏titulo, nombre, apellidos (PELICULA Ä DIREC) 3. Nombre de actores y de las agencias que los representan AGENC(agencia, nomAg, direccion, telefono) ← AGENCIA ACT_AGEN ← ∏nombre, nomAg (ACTOR Ä AGENC) ¿A qué se debe el renombramiento en cada caso? Tema 2. Modelo relacional de datos 72 36 Álgebra Relacional ÷ División entre relaciones Sean las relaciones A(a1, a2, ... an, b1, b2, ... bm) y B(b1, b2, ...bm) • A÷B es una relación tal qque: Esquema: Relación con los atributos no comunes R( a1, a2, ... an ) Estado: Conjunto de tuplas { (ai1, ai2, ... ain) } tal que existe en A una tupla (ai1, ai2, ... ain, bj1, bj2, ... bjm) para TODAS las tuplas (bj1, bj2, ... bjm ) de B • Poco común. común Útil para consultas especiales ocasionales Nombres de los actores que trabajan en todas las películas dirigidas por los hermanos Cohen • Para que una tupla t aparezca en el resultado, los valores de t deben aparecer en A en combinación con todas las tuplas de B 73 Tema 2. Modelo relacional de datos Álgebra Relacional División entre relaciones A a y1 y1 y1 y1 y2 y2 y3 y3 3 y3 y4 y4 y4 b x1 x2 x3 x4 x1 x3 x2 x3 3 x4 x1 x2 x3 B Tema 2. Modelo relacional de datos b x1 x2 x3 (y 2) R a y1 y4 y1, y4 aparecen en A en combinación con p de B,, por p eso están en el las 3 tuplas resultado R=A÷B El resto de valores de y en A, no aparecen con todas las tuplas de B y no son seleccionadas: y2 no aparece con x2, e y3 no aparece con x1 74 37 Álgebra Relacional Otras operaciones del Álgebra Relacional • Algunas consultas comunes no pueden expresarse con las operaciones estándar del Álgebra Relacional – A Ampliación li ió de d su poder d expresivo i con operaciones i adicionales di i l – Incluidas en la mayoría de los lenguajes de consulta relacionales comerciales • Funciones de agregados – Funciones matemáticas de agregados sobre colecciones de valores de la base de datos Valor medio del caché de todos los actores Número de películas (almacenadas en la BD) Máximo porcentaje de comisión de las distribuidoras de películas Mínima recaudación en taquilla Cantidad total pagada a los actores de cierta película 75 Tema 2. Modelo relacional de datos Álgebra Relacional Funciones de agregados • Funciones aplicadas a un conjunto de tuplas – – – – – SUMA PROMEDIO MÁXIMO MÍNIMO CUENTA (número de tuplas en una relación) • Agrupación de tuplas según valor de ciertos atributos – Puede aplicarse una función agregada a cada grupo por separado * Media del caché de los actores agrupados g p ppor agencias g ¿Solución? Agrupar actores según su agencia representante (valor de atributo agencia) » Cada grupo incluye tuplas de actores representados por la misma agencia Cálculo del caché medio de cada grupo (función PROMEDIO) • El resultado es una relación Tema 2. Modelo relacional de datos R(agencia, PROMEDIO_caché) 76 38 Álgebra Relacional Funciones de agregados (2) AG1 a1 a4 ACTOR AG8 a9 a2 a7 AG2 a10 a8 R R PROMEDIO_cache Media del cache de a1... a10 a5 a6 a3 AG3 agencia PROMEDIO cache PROMEDIO_cache AG8 Media del cache de a9 y a2 AG3 Media del cache de a5, a6 y a3 AG1 Media del cache de a7, a1 y a4 AG2 Media del cache de a8 y a10 77 Tema 2. Modelo relacional de datos Álgebra Relacional Funciones de agregados (3) <atributos de agrupación> • • F <lista funciones>(<relación>) <atributos de agrupación> – Lista de nombres de atributos de <relación> – Indican atributos con los que construir los grupos – Puede estar vacía la relación es un (único) grupo <lista funciones> – Lista de pares <función> <atributo> donde <función> ∈ {SUMA, PROMEDIO, MÁXIMO, MÍNIMO, CUENTA} y <atributo> es uno de los atributos de <relación> • Resultado: una relación R, tal que Esquema: atributos de <atributos de agrupación> + un atributo por cada elemento de <lista funciones> Cuerpo: conjunto de tuplas tal que existe una por cada grupo Tema 2. Modelo relacional de datos 78 39 Álgebra Relacional Funciones de agregados (4) • Ejemplos: 1. Códigos de Películas, número de actores en cada película y su paga media R(codpeli numActores R(codpeli, numActores, pagaMedia)← film F CUENTA actor,PROMEDIO paga(ACTUA_EN) (ACTUA EN) 2. Códigos de agencias, número de actores en cada agencia y caché medio R(codAg, numActores, cacheMedio)←agencia F CUENTA codA,PROMEDIO cache(ACTOR) • Si no se indican nombres para los atributos de la relación resultado R, dicha relación incluirá... – un atributo por cada atributo incluido en <atributos de agrupación>, con el mismo nombre nombre, y – un atributo por cada función incluida en <lista funciones>, denominado FUNCIÓN_atributo Los esquemas de las relaciones resultado de los ejemplos anteriores serían: 1. R(film,CUENTA_actor, PROMEDIO_paga) 2. R(agencia, CUENTA_codA, PROMEDIO_cache) 79 Tema 2. Modelo relacional de datos Álgebra Relacional Funciones de agregados (y 5) • Si no se especifican atributos de agrupación – Toda la relación es un único grupo – Las L funciones f i se aplican li a todas t d las l tuplas t l – La relación resultado tendrá una sola tupla * Número de películas y recaudación media F CUENTA codP,PROMEDIO taquilla(PELICULA) • El resultado de aplicar una función agregada siempre es una relación, no un nº escalar, aunque tenga un único valor R MAXIMO_taquilla * Recaudación máxima obtenida F MÁXIMO taquilla(PELICULA) Tema 2. Modelo relacional de datos 232.850 80 40 Álgebra Relacional Operaciones de cierre recursivo • No pueden expresarse en el Álgebra Relacional • Se aplican a una referencia recursiva entre tuplas del mismo ti (empleado tipo ( l d y jefe j f en la l relación l ió EMPLEADO) * Códigos de los empleados que tienen como superior a “e”, en todos los niveles e e11 e12 ... e1n _________________Nivel 1 e21... e2 m ... ... ... e2p _________________Nivel 2 e31... e3q ... e3r ... ... ... e3t _________________Nivel 3 etc. ... 81 Tema 2. Modelo relacional de datos Álgebra Relacional Operaciones de cierre recursivo (y 2) • En Álgebra Relacional es sencillo especificar empleados cuyo jefe es “e” en cierto nivel conocido, pero no en todos los niveles Ejemplo para el nivel 2: código de los empleados cuyo jefe directo es “e” o bien su jefe es un empleado cuyo jefe es “e” EMP_JEF(codE, codJ) ← ∏codemp, codjefe (EMPLEADO) EMP 1(cod) ← ∏codE EMP_1(cod) (EMP JEF)) dE (σcodJ=“e” dJ “ ” (EMP_JEF)) Empleados de nivel 1 EMP_2(cod) ← ∏codE (EMP_JEF Empleados de nivel 2 codJ=cod (EMP_1)) RESULTADO ← EMP_1 ∪ EMP_2 Tema 2. Modelo relacional de datos 82 41 Álgebra Relacional Reunión externa (Outer-join) entre relaciones • Extensión de la operación REUNIÓN • Permiten conservar todas las tuplas en A o B o ambas, aunque... – No tengan tuplas coincidentes – Contengan nulos en los atributos de reunión * Nombres de actores y de sus agencias representantes, si tienen AGEN(codAg, nomAg, direccion,telefono) ← AGENCIA TEMP ← (ACTOR RESULTADO ← agencia=codAg AGEN) ∏nombre, nomAg (TEMP) 83 Tema 2. Modelo relacional de datos Álgebra Relacional Reunión externa entre relaciones (2) • REUNIÓN EXTERNA IZQUIERDA R=A B – Conserva en R todas las tuplas de A – Si no encuentra una tupla coincidente en B, B cada atributo de R (correspondiente a B) es NULO • REUNIÓN EXTERNA DERECHA R=A B – Conserva en R todas las tuplas de B – Si no encuentra una tupla coincidente en A, cada atributo de R (correspondiente a A) es NULO • REUNIÓN EXTERNA COMPLETA R=A B – Conserva en R todas las tuplas de A y de B – Cuando no encuentra tuplas coincidentes, rellena con NULO Tema 2. Modelo relacional de datos 84 42 Álgebra Relacional Reunión externa entre relaciones (3) ACTOR nomAc ... agencia ... AGENCIA codAg nomAg Carmelo Gómez A23 A10 AgeRep M í P María Pujalte j lt A03 A30 R A t ReprActors Pere Ponce A10 A03 ActorsMngr Javier Bardem NULL A23 ARA ... * Nombres de agencias y de los actores a los que representan, incluyendo... 1.- las agencias que no representan a ningún actor R1= πnomAc, nomAg (ACTOR agencia=codAg AGENCIA) 2.- los actores que no tienen agencia de representación R2 = πnomAc, nomAg ( ACTOR agencia=codAg AGENCIA 3.- tanto las agencias que no representan a ningún actor, como los actores que no tienen agencia R3 = πnomAc, nomAg ( ACTOR agencia=codAg AGENCIA 85 Tema 2. Modelo relacional de datos Álgebra Relacional Reunión externa entre relaciones (y 4) ACTOR AGENCIA nomAc nomAg C Carmelo l Gómez Gó ARA ACTOR María Pujalte ActorsMngr Pere Ponce AgeRep NULL ReprActors AGENCIA nomAc nomAg Carmelo Gómez ARA ACTOR nomAc AGENCIA nomAg Carmelo Gómez ARA María Pujalte ActorsMngr ActorsMngr Pere Ponce AgeRep Pere Ponce AgeRep Javier Bardem NULL Javier Bardem NULL NULL ReprActors María Pujalte Tema 2. Modelo relacional de datos 86 43 Álgebra Relacional Ejercicios II 87 Tema 2. Modelo relacional de datos Manipulación de datos Cálculo Relacional • Lenguaje formal para BD Relacionales • Basado en Cálculo de Predicados de Primer Orden (rama de Lógica Matemática) Cálculo Relacional - Expresiones Declarativas (lenguaje no procedimental) vs. Álgebra Relacional - Secuencias de Operaciones » Aunque se anidan para formar » No se indica CÓMO evaluar la una sola expresión, siempre se consulta sino QUÉ se desea consulta, d explícitamente lí cierto orden d indica obtener de las operaciones » Describe la información deseada » Estrategia parcial de sin dar un procedimiento evaluación de la consulta específico para obtenerla (≈ lenguaje procedimental de alto nivel ) Tema 2. Modelo relacional de datos 88 44 Cálculo Relacional • Poder expresivo idéntico de álgebra y cálculo relacionales Cualquier obtención de datos especificada en el Álgebra Relacional puede expresarse en el Cálculo Relacional (restringido a expresiones e p es o es segu seguras) as) y viceversa ce e sa • Definición: Lenguaje Relacionalmente Completo Lenguaje en el que es posible expresar cualquier consulta que pueda especificarse en el Cálculo Relacional – Cálculo Relacional como medida del poder selectivo de lenguajes relacionales • Formas de adaptar el Cálculo de Predicados de 1er Orden para crear un Lenguaje de Consultas para BDR: ̶ Cálculo Relacional de Tuplas (CRT) –– Codd, 1972 ̶ Cálculo Relacional de Dominios –– Lacroix y Pirotte, 1977 Tema 2. Modelo relacional de datos 89 Cálculo Relacional Expresiones de consulta • CRT basado en la especificación de variables de tupla • Toda variable de tupla «abarca» o recorre una relación puede tomar como valor cualquier tupla de esa relación { t | COND(t) } • Resultado: conjunto de tuplas t que satisfacen la condición COND(t) • COND(t): expresión condicional en la que interviene la var. de tupla t * Actores A t cuyo caché hé rebasa b los l 22.000€ 000€ { t | ACTOR(t) and t.cache>2000 } – ACTOR(t) indica que ACTOR es la Relación de Intervalo que t recorre – t.cache hace referencia al atributo caché de la variable de tupla t Tema 2. Modelo relacional de datos 90 45 Cálculo Relacional Expresiones de consulta (y 2) • Obtención de algunos atributos de las tuplas seleccionadas { <lista atributos> | COND(t) } • Ejemplos: * Nombre y nacionalidad de los actores cuyo caché rebasa los 2.000€ { t.nombre, t.nacionalidad | ACTOR(t) and t.cache>5000 } * Fecha de nacimiento y nombre real del actor “Javier Bardem” { t.fechaNacim, t.nombreReal | ACTOR(t) and t.nombre = “Javier Bardem” } 91 Tema 2. Modelo relacional de datos Cálculo Relacional Expresión del CRT: punto de vista formal • Expresión General { t1.a1, t2.a2, ... , tn.ap | COND(t1, t2, ..., tn, tn+1,tn+2,...tn+m) } donde: – t1, t2, ..., tn, tn+1, tn+2, ... tn+m son variables de tupla – ai es un atributo de la relación que tj recorre – COND(..) ( ): fórmula ((bien formada)) del Cálculo Relacional de Tuplas p constituida por átomos del Cálculo de Predicados Tema 2. Modelo relacional de datos 92 46 Cálculo Relacional Expresión del CRT: punto de vista formal (2) • Átomos – R(ti) el intervalo de la variable de tupla ti es la relación R – ti.a op tj.b b ,, op ∈ { =, ≠, <, ≤, >, ≥ } ti y tj variables de tupla a atributo de la relación que ti abarca b atributo de la relación que tj abarca – ti.a op c ,, c op tj.b ,, op ∈ { =, ≠, <, ≤, >, ≥ } ti y tj variables de tupla a atributo t ib t d de la l relación l ió que ti abarca b b atributo de la relación que tj abarca c valor constante Los átomos están ligados mediante operadores and, or, not y → Tema 2. Modelo relacional de datos 93 Cálculo Relacional Expresión del CRT: punto de vista formal (3) • Valor lógico de un átomo Evaluación del átomo para una combinación específica de tuplas valor TRUE o FALSE – R(ti) TRUE si se asigna una tupla de R a ti Si no, es FALSE – ti.a op tj.b ,, ti.a op c ,, c op tj.b TRUE si ti y tj se asignan a tuplas tales que los atributos especificados (a y b) satisfacen la condición Si no es así, será FALSE Tema 2. Modelo relacional de datos 94 47 Cálculo Relacional Expresión del CRT: punto de vista formal (4) • Fórmula bien formada (fbf) – Definición recursiva D1. Todo átomo es una fórmula bien formada R(ti) ,, ti.a op tj.b ,, ti.a op c ,, c op tj.b D2. Si F1 y F2 son fbf, también lo son... (F1 and F2), (F1 or F2), not(F1), not(F2) y (F1 → F2) y los valores lógicos de estas fórmulas se derivan de F1 y F2, según la Lógica Booleana Nota: (F1 → F2) ≡ (not(F1) or F2) continuará... 95 Tema 2. Modelo relacional de datos Cálculo Relacional Expresión del CRT: punto de vista formal (5) • Cuantificadores – Universal ∀ – Existencial ∃ (∀t) (BANCO(t) and not(t.ciudad = ‘Londres’)) (∃t) (BANCO(t) and t.ciudad = ‘Amsterdam’) • Variable de tupla libre y ligada en una fbf 1 informal t está ligada si está cuantificada ( aparece en cláusulas (∀t) o (∃t) ) si no, no está libre Tema 2. Modelo relacional de datos 96 48 Cálculo Relacional Expresión del CRT: punto de vista formal (6) • Variable de tupla libre y ligada en una fbf 1 formal – Si F ≡ átomo, átomo cualquier ocurrencia de una variable de tupla t, t está libre – En (F1 and F2), (F1 or F2), not(F1), not(F2) y (F1 → F2), una ocurrencia de t está libre o ligada según lo esté en F1 o F2 – Toda ocurrencia libre de t en F está ligada en F’, si F’=(∃t)F o bien F’=(∀t)F y t estará ligada al cuantificador especificado en F’ F1 : d.nombre = “Carmelo Gómez” F2 : (∃t) (d.agencia = t.codAg) La variable de tupla d está libre en F1 y en F2 t está ligada al cuantificador ∃ en F2 Tema 2. Modelo relacional de datos 97 Cálculo Relacional Expresión del CRT: punto de vista formal (7) • Fórmula bien formada (continuación) D3. Si F es una fbf, también lo es (∃t)F ( )F, donde t es una variable de tupla (∃t)F es TRUE si F es TRUE para al menos una tupla asignada a ocurrencias libres de t en F de lo contrario es FALSE D4. Si F es una fbf, también lo es (∀t)F, donde t es una variable de tupla (∀t)F es TRUE si F es TRUE para toda tupla (en el universo) asignada a ocurrencias libres de t en F de lo contrario es FALSE Tema 2. Modelo relacional de datos 98 49 Cálculo Relacional Expresión del CRT: punto de vista formal (8) • Fórmula bien formada (continuación) – Si la l fórmula fó l es cerrada d (toda (t d variable i bl ligada li d a cuantificadores), tifi d ) entonces representa una expresión que será TRUE o FALSE F3 : (∃a) (ACTOR(a) and a.nombre = “Javier Cámara”) F4 : (∀p) (PELICULA(p) (∃d) (DIRECTOR(d) and d.coddir=p.director) – Si la fórmula es abierta (tiene variables libres), entonces representa p una consulta cuya y evaluación devolverá los valores de sus variables libres que hacen TRUE la fórmula F5 : ACTOR(a) and a.fechaNacim > 31/12/1971 sirve para preguntar por los actores/actrices que nacieron en 1972 o después 99 Tema 2. Modelo relacional de datos Cálculo Relacional Expresión del CRT: punto de vista formal (y 9) • Expresión segura – Su resultado es un número finito de tuplas – Al usar cuantificadores (∃,∀) (∃ ∀) o negación (not), (not) la expresión ha de tener sentido: ser segura y no generar una relación infinita E= {t | not(ACTOR(t))} tuplas del universo que NO son de ACTOR ¡¡∞!! • Dominio de una expresión del CRT – Valores constantes en la expresión o que existen en cualquier tupla de las relaciones a las que se referencia en la expresión Dominio ( E={t | not(ACTOR(t))} )= todos los valores de atributos de tuplas ACTOR Una expresión es segura si todo valor del resultado ∈ dominio de la expresión E es insegura, ya que el resultado incluye tuplas (y, por tanto, valores) que no están en la relación ACTOR (es decir, que ∉ su dominio) Tema 2. Modelo relacional de datos 100 50 Cálculo Relacional Ejercicios 101 Tema 2. Modelo relacional de datos Manipulación de datos El lenguaje relacional SQL-92 Structured Query Language (lenguaje estructurado de consulta) • Primer lenguaje de BD de alto nivel. Años 70. – Diseñado e implementado en el IBM’s Research Laboratory (San José California), para el SGBD Relacional experimental System R • Definición de un lenguaje estándar para SGBDR ANSI (American National Standards Institute) + ISO (International Standardization Organization) – SQL1 (ANSI 1986), extendido en 1989 (SQL-89) – SQL-92 (SQL2), (SQL2) y – SQL:1999 (extensiones de Orientación a Objetos, disparadores, …) – SQL:2003 (incluye XML y otros conceptos recientes) • Primeras implementaciones: – ORACLE (finales 70) y poco después INGRES Tema 2. Modelo relacional de datos 102 51 SQL-92 • Lenguaje de bases de datos completo (no sólo «de consulta») – Definición y Manipulación de Datos (LDD + LMD) – Definición y destrucción de Vistas (LDV) – Creación y destrucción de índices (aunque en SQL-92 «ya no existen») – Incorporación de SQL dentro de código escrito con un Lenguaje de Programación de propósito general (Pascal, C, etc.) • Los proveedores de SGBDR comerciales (Oracle) implementan variaciones de SQL – Algunas incluyen características que no están estandarizadas (triggers /reglas activas incluidos en la versión SQL:1999) • Niveles de compatibilidad con el estándar de SQL – Entry SQL – Intermediate SQL – Full SQL Tema 2. Modelo relacional de datos 103 SQL-92 Lo que vamos a estudiar... • Consultas o Selección de datos • Modificación de datos • Vistas • Definición y Alteración de datos –Esquemas, Dominios, Tablas • Restricciones de Integridad Generales (Asertos) • Seguridad y Control de Acceso Tema 2. Modelo relacional de datos 104 52 SQL-92 Consultas básicas • (4) SQL-92 vs. Modelo Relacional Formal – No utiliza los términos formales relación, atributo, tupla…, sino tabla, columna, fila… – Permite que las tablas tengan 2 o más filas idénticas en todos los valores de sus columnas En general, tabla SQL ≠ conjunto de filas, sino que Tabla SQL = Multiconjunto de filas (saco, bag) • Es posible forzar que las tablas SQL sean conjuntos de filas: - con restricciones de clave o - mediante opción DISTINCT en una SELECT ((*se se verá verá*)) – Las columnas de una tabla están ordenadas, y es posible indicar un orden de visualización de las filas – Una clave ajena puede referenciar a una clave candidata 105 Tema 2. Modelo relacional de datos SQL-92 Esquema de base de datos COMPAÑÍA EMPLEADO NOMBRE APELLIDO NSS NIF FECHAN DIRECCION SEXO SALARIO NSSJEFE ND DEPARTAMEN TO NOMBRED NUMEROD NSSDIRE FECHAINICDIRE OFICINA_DEPT O NUMEROD OFICINA PROYECTO NOMBREP NUMEROP LUGARP NUMEROD TRABAJA_E N HORAS NUMP NSSE FAMILIAR NSSE NOMBRE_FAMILIAR SEXO FECHAN PARENTESCO Tema 2. Modelo relacional de datos 53 SQL-92 Consultas básicas • Orden SELECT: Instrucción básica de obtención de información donde: <lista columnas> <lista tablas> <condición> SELECT <lista columnas> FROM <lista tablas> WHERE <condición> columnas cuyos valores va a obtener la consulta tablas necesarias para realizar la consulta expresión booleana para identificar filas que obtendrá la consulta (expresión de reunión y/o de selección) Fecha de nacimiento y dirección del empleado llamado José Silva SELECT fechan, direccion FROM Empleado E l d WHERE nombre = ‘José’ AND apellido = ‘Silva’; • La consulta selecciona las filas de <lista tablas> que satisfacen <condición> y proyecta el resultado sobre las columnas de <lista columnas> 107 Tema 2. Modelo relacional de datos SQL-92 Consultas básicas • (2) La orden SELECT ... FROM ... WHERE... – No es igual a la operación restricción σ del Álgebra Relacional – SELECT de SQL Q tiene muchas más opciones p y matices – En caso de una única tabla T en <lista tablas> SELECT <lista columnas> FROM T WHERE <condición> es equivalente a... Π <lista columnas>(σ<condición> ( T )) * Nombre, apellido y dirección de los empleados del departamento de Investigación SELECT nombre, apellido, direccion FROM Empleado, Departamento → reunión o join de tablas WHERE nombred=‘Investigación’ → condición de selección AND numerod=nd; → condición de reunión entre tablas Tema 2. Modelo relacional de datos 108 54 SQL-92 Consultas básicas (3) • Cualquier nº de condiciones selección/reunión en SELECT * Para cada proyecto ubicado en Santiago, obtener el nº del proyecto, nº del departamento que lo controla y el apellido, llid dirección di ió y ffecha h dde nacimiento i i t ddell gerente t dde ese ddepartamento t t SELECT numerop, numd, apellido, direccion, fechan FROM Proyecto, Departamento, Empleado WHERE numd=numerod AND nssdire=nss AND lugarp=‘Santiago’; • Una SELECT puede obtener filas repetidas * Salario de los empleados de los departamentos de Administración y de Investigación SELECT salario FROM Empleado, Departamento WHERE (nombred = ‘Administración’ OR nombred = ‘Investigación’) AND numerod=nd; 109 Tema 2. Modelo relacional de datos SQL-92 Consultas básicas (5): uso de * • Obtención de los valores de todas las columnas de las filas seleccionadas –No es necesario listar todos los nombres tras cláusula SELECT –Uso del símbolo * (todas las columnas) SELECT * FROM Empleado WHERE nd=5; SELECT * FROM Departamento WHERE nombred=‘Investigación’; SELECT * FROM Empleado, Departamento WHERE nombred=‘Investigación’ AND nd=númerod; Tema 2. Modelo relacional de datos 110 55 SQL-92 Consultas básicas (6): omisión de WHERE • Selección incondicional –Equivale a una condición TRUE para todas las filas selección l ió de d todas t d las l filas fil de... d • una tabla (si la cláusula FROM sólo contiene una tabla), o • el producto cartesiano entre varias tablas (si FROM incluye más de una) * Seleccionar todos los nss de empleados SELECT nss FROM Empleado; * Obtener todas las combinaciones de nss de empleados y nombres de departamentos SELECT nss, nombred FROM Empleado, Departamento; 111 Tema 2. Modelo relacional de datos SQL-92 Consultas básicas (7): cadenas de caracteres • Operador LIKE – Comparación de cadenas de caracteres – Caracteres reservados: ‘%’ % y ‘_’ (comodines) *Nombres y apellidos de los empleados cuya dirección esté en Higueras, estado de México SELECT nombre, apellido FROM Empleado WHERE direccion LIKE ‘%Higueras, MX%’ ; • Operador || – Concatenación de cadenas de caracteres * Nombres N b completos l t en una sola l columna l de d empleados l d con dirección di ió en Higueras Hi (México) SELECT nombre || ‘ ’ || apellido FROM Empleado WHERE direccion LIKE ‘%Higueras, MX%’ ; Tema 2. Modelo relacional de datos 112 56 SQL-92 Consultas básicas (8): aritmética y tiempo • Operaciones aritméticas – Aplicación de operadores aritméticos ( + - * / ) sobre valores numéricos * Salarios de los empleados que trabajan en el proyecto ProductoX ProductoX, tras un aumento del 10% SELECT apellido, nombre, 1.1*salario FROM Empleado, Trabaja_en, Proyecto WHERE nss=nsse AND nump=numerop AND nombrep=‘ProductoX’ ; 1 el valor real de los salarios en la tabla EMPLEADO no cambia • Operaciones con fechas, horas, marcas de tiempo e intervalos – Especificación del valor de un INTERVAL como diferencia de dos valores DATE, TIME o TIMESTAMP – Incremento y Decremento de valores de columnas de tipo DATE, TIME, TIMESTAMP en un intervalo compatible con el tipo 113 Tema 2. Modelo relacional de datos SQL-92 Consultas básicas (9): calificación • En SQL los nombres de las columnas deben ser únicos dentro de cada tabla • Consulta que referencia a varias columnas de igual nombre, pero de tablas distintas... AMBIGÜEDAD --------------Solución: CALIFICACIÓN El esquema COMPAÑÍA incluye las siguientes tablas: DEPARTAMENTO (nombred, numerod, nssdire, fechainicdire) OFICINA_DEPTO (numerod, oficina) * Código, nombre y lugares de los departamentos de Marketing y de Investigación SELECT Departamento.numerod, nombred, oficina FROM Departamento, Oficina_depto WHERE Departamento.nombred IN (‘Marketing’, ‘Investigación’) AND Departamento.numerod = Oficina_depto.numerod; Tema 2. Modelo relacional de datos 114 57 SQL-92 Consultas básicas (10): seudónimos • Puede utilizarse seudónimos para acortar nombres de tabla dentro de las consultas con calificación: SELECT nombred, D.numerod, oficina FROM Departamento AS D, Oficina_depto L ← ‘AS’ es opcional WHERE D.nombred IN (‘Marketing’, ‘Investigación’) AND D.numerod = L.numerod; • Consulta que se refiere dos veces a la misma tabla AMBIGÜEDAD ------------------- Solución: SEUDÓNIMOS * Obtener nombre y apellido de cada empleado y de su supervisor inmediato SELECT E.nombre, E.apellido, S.nombre, S.apellido FROM Empleado E, Empleado S WHERE E.nssjefe=S.nss; 115 Tema 2. Modelo relacional de datos SQL-92 Consultas básicas (11): renombrar columnas • En el resultado de evaluar la consulta * Nombres de cada empleado y su supervisor, cambiando al mismo tiempo los nombres de las columnas resultantes a ‘nom nom_empleado empleado’ y ‘nom nom_supervisor supervisor’ SELECT E.nombre AS nom_empleado, S.nombre AS nom_supervisor FROM Empleado E, Empleado S WHERE E.nssjefe = S.nss; Nueva cabecera para la tabla resultado • Seudónimos de columnas (y/o tablas) en cláusula FROM SELECT nom, num, oficina FROM Departamento D(nom, num, dire, inidire), Oficina_depto WHERE nom IN (‘Marketing’, ‘Investigación’) AND num = numerod; Tema 2. Modelo relacional de datos 116 58 SQL-92 Consultas básicas (y 12): orden de presentación • SQL permite presentar las filas resultado de una consulta de forma ordenada: Cláusula ORDER BY – Ordenación según valores de una o varias columnas – Ascendente ASC (por defecto) o Descendente DESC – Suele ser una operación muy costosa las filas no se ordenan en disco: se ven ordenadas, pero no lo están *Nombre y apellido de los empleados, y proyectos en los que trabajan, en orden descendente por departamentos y, dentro de cada departamento, en orden alfabético ascendente por apellido y nombre SELECT nombred, apellido, nombre, nombre FROM Departamento, Empleado, Trabaja_en, Proyecto WHERE numerod=nd AND nss=nsse AND nump=numerop ORDER BY nombred DESC, apellido ASC, nombre ASC; Tema 2. Modelo relacional de datos 117 SQL-92 Tablas como conjuntos • SQL no elimina filas repetidas del resultado de una consulta, porque... • Operador DISTINCT: – Eliminación de duplicados costosa (ordenar+recorrer+eliminar) – El usuario puede desear ver las filas repetidas en el resultado – Si se aplica una función agregada a filas, rara vez deben eliminarse las duplicadas – Para eliminar duplicados del resultado de una consulta SQL » Resultado = Relación del Modelo Relacional Formal (conjunto de filas) * Salarios de todos los empleados SELECT salario FROM Empleado; * Salarios distintos de empleados, sin importar cuántos perciban cada cantidad SELECT DISTINCT salario FROM Empleado; Tema 2. Modelo relacional de datos 118 59 SQL-92 Tablas como conjuntos • (2) Operaciones de conjuntos – UNION( ∪ ), INTERSECT( ∩ ), EXCEPT ( — ) (minus en ORACLE) – Resultado: conjunto de filas las filas repetidas se eliminan – Las L tablas bl operando d han h de d ser compatibles ibl en tipo: i – igual nº de columnas, y – columnas “correspondientes” con el mismo dominio * Nombres de los proyectos en que participa el empleado de apellido ‘Silva’, ya sea como trabajador o como gerente del departamento que controla el proyecto ( SELECT nombrep FROM Proyecto, Trabaja_en, Empleado WHERE numerop=nump AND nsse=nss AND apellido=‘Silva’ ) UNION ( SELECT nombrep FROM Proyecto, Departamento, Empleado WHERE numd=numerod AND nssdire=nss AND apellido=‘Silva’ ); • Para no eliminar duplicados... – UNION ALL, INTERSECT ALL, EXCEPT ALL 119 Tema 2. Modelo relacional de datos SQL-92 Tablas como conjuntos (3): conjuntos explícitos • Un conjunto explícito de valores es una lista de valores encerrada entre paréntesis • Puede uede aparecer apa ece en e la a ccláusula áusu a WHERE * nss de los empleados que trabajan en los proyectos 1, 2 ó 3 SELECT DISTINCT nsse FROM Trabaja_en WHERE nump IN (1, 2, 3); • Operador IN v IN V –Indica si el valor v pertenece al conjunto de valores V –Devuelve TRUE si algún elemento e de V cumple que v = e * nss de los empleados que trabajan en algún proyecto que no sea el 4 ni el 6 SELECT DISTINCT nsse FROM Trabaja_en WHERE nump NOT IN (4, 6); Tema 2. Modelo relacional de datos 120 60 SQL-92 Tablas como conjuntos • (4): conjuntos explícitos Operador ANY (o SOME) v <op> ANY V o v <op> SOME V ,, <op> ∈ { >, ≥, <, ≤, <>, = } – Compara un valor individual v con los elementos de un conjunto V – Devuelve D l TRUE sii algún l ú elemento l t e de d V cumple l que v <op> e * nss de los empleados que trabajan en alguno de los proyectos 1, 2 ó 3 SELECT DISTINCT nsse FROM Trabaja_en WHERE nump = ANY (1, 2, 3); • Operador ALL v <op> ALL V,, <op> ∈ { >, ≥, <, ≤, <>, = } – Compara un valor v con los elementos de un conjunto V – Devuelve TRUE si para todo elemento e de V se cumple v <op> e * nss de los empleados que no trabajan en ninguno de los proyectos 1, 2 y 3 SELECT DISTINCT nsse FROM Trabaja_en WHERE nump <> ALL (1, 2, 3); Tema 2. Modelo relacional de datos 121 SQL-92 Consultas anidadas • Es una consulta SELECT completa, dentro de cláusula WHERE de otra consulta (consulta exterior) • Obtiene valores de la BD q que se usan en la condición de otra consulta,, para obtener otros datos * Números de los proyectos en que participa el empleado de apellido ‘Silva’, sea como trabajador o como gerente del departamento que controla el proyecto SELECT DISTINCT numerop FROM PROYECTO WHERE numerop IN ( SELECT nump FROM Trabaja_en, Empleado WHERE nsse=nss AND apellido=‘Silva’ ) OR numerop IN ( SELECT numerop FROM Proyecto, Departamento, Empleado WHERE numd=númerod AND nssdire=nss AND apellido=‘Silva’ ) ; • Es posible tener varios niveles de consultas anidadas Tema 2. Modelo relacional de datos 122 61 SQL-92 Consultas anidadas (2): comparar conjuntos • Operador IN (otro t IN S uso del mismo operador) – indica si la fila t pertenece al conjunto de filas S (subconsulta) * Nombre y dirección de los empleados que trabajan en algún proyecto. SELECT nombre, dirección FROM Empleado WHERE nss IN ( SELECT nsse FROM TRABAJA_EN ); * Números de seguridad social de aquellos empleados que trabajan en algún proyecto en el que trabaje el empleado ‘José B. Silva’, de forma que ambos tengan la misma combinación (proyecto, horas); es decir, todo empleado que trabaje las mismas horas que ‘José B. Silva’, en cada proyecto en el que trabajen ambos. El nss de ‘José B. Silva’ es ‘123456789’. SELECT DISTINCT nsse FROM Trabaja_en WHERE (númp, horas) IN ( SELECT númp, horas FROM Trabaja_en WHERE nsse=‘123456789’); 123 Tema 2. Modelo relacional de datos SQL-92 Consultas anidadas (3): comparar conjuntos • Operador ANY o SOME (otro uso del mismo operador) t <op> ANY S o t <op> SOME S,, <op> ∈ { >, ≥, <, ≤, ≠, = } – Compara una fila t con las filas resultado de una consulta anidada S – Devuelve TRUE si alguna fila e de S cumple que t <op> e • Operador ALL (otro uso del mismo t <op> ALL S,, <op> ∈ { >, ≥, <, ≤, ≠, = } operador) – Compara una fila t con filas resultado de una consulta anidada S – Devuelve TRUE si para toda fila e de S se cumple que t <op> e * Nombres y apellidos de los empleados cuyo salario es menor que el de todos los empleados del departamento 5 SELECT nombre, apellido FROM Empleado WHERE salario < ALL ( SELECT salario FROM Empleado WHERE nd=5 ); Tema 2. Modelo relacional de datos ¿”Mejor” con DISTINCT en la subconsulta? 124 62 SQL-92 Consultas anidadas (4): columnas ambiguas • Coincidencia de nombres de columnas en las consultas exterior y anidada Ambigüedad * Nombre y apellidos de cada empleado con familiares de igual nombre y sexo que él SELECT nombre, apellido FROM Empleado WHERE nss IN ( SELECT nsse FROM Familiar WHERE nsse=nss AND nombre_familiar=nombre AND sexo=sexo ); ¿cómo evitar esta ambigüedad? Regla: Una columna no calificada se refiere a la tabla declarada en la consulta anidada más interior Si en una consulta anidada es necesario usar columnas de tablas declaradas en una consulta exterior calificar * Nombre y apellidos de cada empleado con familiares de igual nombre y sexo que él SELECT nombre, apellido FROM Empleado E WHERE nss IN ( SELECT nsse FROM Familiar WHERE nss=nsse AND nombre_familiar=nombre AND sexo= E.sexo ); Tema 2. Modelo relacional de datos 125 SQL-92 Consultas anidadas (5): correlación • Una consulta exterior y otra anidada están correlacionadas si una condición de la anidada contiene columnas de una tabla declarada en la consulta exterior SELECT nombre, apellido FROM Empleado WHERE nss IN ( SELECT nsse FROM Familiar WHERE nss=nsse AND sexo=‘F’ ); • La consulta anidada se evalúa una vez para cada fila (o combinación de filas) de la consulta exterior – Evalúa la consulta anidada para cada fila de EMPLEADO, – Si el valor de nss de la fila EMPLEADO está en el resultado de la consulta anidada, selecciona la fila EMPLEADO para el resultado final • Una consulta anidada que use el operador = o IN siempre puede expresarse como una reunión (join) SELECT E.nombre, E.apellido FROM Empleado, Familiar D WHERE nss=nsse AND D.sexo=‘F’; Tema 2. Modelo relacional de datos 126 63 SQL-92 Consultas anidadas (6): EXISTS • Operador EXISTS (S): comprobación de tablas vacías –Devuelve TRUE si la tabla S contiene al menos una fila –Devuelve FALSE si S es una tabla vacía (sin filas) L S suele ser una consulta anidada correlacionada * Nombre y apellido de cada empleado con familiares de igual nombre y sexo que él SELECT E.nombre, E.apellido FROM Empleado E WHERE EXISTS ( SELECT * FROM Familiar WHERE nsse=nss AND nombre_familiar=nombre AND sexo sexo=E.sexo E.sexo ); * Nombres de empleados sin familiares SELECT nombre, apellido FROM Empleado E WHERE NOT EXISTS (SELECT * FROM Familiar WHERE nsse=nss); 127 Tema 2. Modelo relacional de datos SQL-92 Consultas anidadas (y 7): UNIQUE • Operador UNIQUE (S): Comprobación de filas duplicadas – Devuelve TRUE si NO hay filas repetidas en S L S suele ser una consulta anidada correlacionada * Nombres y apellidos de los empleados que trabajan en un único proyecto SELECT nombre, apellido FROM Empleado WHERE UNIQUE ( SELECT nsse FROM Trabaja_en WHERE nsse = nss ); * Nombres Nombres, apellidos y salario de los empleados con un solo familiar SELECT nombre, apellido, salario FROM Empleado WHERE UNIQUE ( SELECT * FROM Familiar WHERE nsse = nss ); Tema 2. Modelo relacional de datos 128 64 SQL-92 Nulos • Null – Ausencia o desconocimiento de información – Comparar NULL con cualquier cosa da FALSE • Operador IS NULL ,, IS NOT NULL v IS NULL – es TRUE si v es NULL v IS NOT NULL – es TRUE si v es un valor no NULL * Nombres de empleados sin supervisores SELECT nombre, apellido FROM Empleado WHERE nssjefe IS NULL; Tema 2. Modelo relacional de datos 129 SQL Ejercicios I Tema 2. Modelo relacional de datos 130 65 SQL-92 Funciones agregadas • Función COUNT( ) • Funciones SUM( ), MAX( ), MIN( ), AVG( ) – Cuenta el número de filas o de valores especificados en una consulta – Suma, S máximo, á i mínimo í i y media di aritmética it éti (promedio) ( di ) – Aplicadas a un multiconjunto (saco, bag) de valores numéricos L Pueden aparecer en cláusula SELECT * Suma de los salarios y salario máximo, mínimo y medio de los empleados SELECT SUM(salario), MAX(salario), MIN(salario), AVG(salario) FROM EMPLEADO; * Suma de los salarios y salario máximo, mínimo y medio de empleados del depto. de Investigación SELECT SUM(salario), MAX(salario), MIN(salario), AVG(salario) FROM Empleado, Departamento WHERE nd=númerod AND nombred=‘Investigación’; L También pueden aparecer en cláusula HAVING (*se verá*) 131 Tema 2. Modelo relacional de datos SQL-92 FUNCIONES AGREGADAS Funciones agregadas (2): uso de * y de DISTINCT • Uso de * * Número total de empleados de la compañía SELECT COUNT(*) ( ) FROM Empleado p ( cuenta filas)) * Contar el número de empleados de la compañía que tienen un jefe SELECT COUNT(nssjefe) FROM Empleado; ( cuenta filas con nssjefe no NULL) * Número de empleados en el departamento de Investigación SELECT COUNT(*) FROM Empleado, Departamento WHERE nd=númerod AND nombred=‘Investigación’; • Uso de DISTINCT * Contar el nº de valores distintos de salario que pueden cobrar los empleados SELECT COUNT(salario) FROM Empleado; Error: NO se eliminan duplicados, así que COUNT(salario) ≡ COUNT(*) SELECT COUNT(DISTINCT salario) FROM Empleado; OK !! Tema 2. Modelo relacional de datos 132 66 SQL-92 Funciones agregadas (y 3) y correlación • Es posible que una consulta anidada y correlacionada con otra exterior, incluya una función agregada * Nombres de los empleados con 2 o más familiares SELECT apellido, nombre FROM Empleado WHERE 2 ≤ ( SELECT COUNT(*) FROM Familiar WHERE nss=nsse ); Tema 2. Modelo relacional de datos 133 SQL-92 Agrupación • Cláusula GROUP BY – Para formar subgrupos de filas dentro de una tabla – Los grupos se forman según el valor de las columnas de agrupación – Las filas de cada grupo tendrán el mismo valor en las columnas de agrupación • Aplicación de funciones agregadas a grupos de filas * Para cada departamento, obtener su número, cuántos empleados tiene dicho departamento y el salario medio de los empleados del mismo SELECT nd, COUNT(*), AVG(salario) FROM Empleado GROUP BY nd ; ← una columna de agrupación Las columnas de agrupación deben aparecer en la cláusula SELECT, antes de cualquier función agregada, para que su valor (único para cada grupo) aparezca junto al resultado de aplicar la función al grupo Tema 2. Modelo relacional de datos 134 67 SQL-92 Agrupación (2) • Cláusula HAVING – Siempre junto a GROUP BY – Condición que deben cumplir los grupos de filas asociados a cada valor de las columnas de agrupación – Un grupo que no cumple la condición, no es seleccionado para el resultado * Para cada proyecto en el que trabajen más de dos empleados, obtener el número y nombre del proyecto, y el nº de empleados que trabajan en él SELECT numerop, nombrep, COUNT(*) FROM Proyecto, Trabaja_en WHERE numerop=nump GROUP BY numerop, nombrep HAVING COUNT(*) > 2 ; 135 Tema 2. Modelo relacional de datos SQL-92 Agrupación (y 3) • WHERE... se aplica a filas individuales • HAVING... se aplica a grupos de filas * Nº de empleados cuyos salarios superan los 1.800€ en cada departamento, pero sólo en el caso de departamentos en los que trabajen más de 5 empleados (* Consulta incorrecta ¿por qué? *) (* Consulta correcta *) SELECT nombred, COUNT(*) FROM Departamento, Empleado WHERE númerod númerod=nd nd AND salario>1800 GROUP BY nombred HAVING COUNT(*) > 5 ; SELECT nombred, COUNT(*) FROM Departamento, Empleado WHERE númerod=nd AND salario>1800 AND nd IN (SELECT nd FROM Empleado GROUP BY nd HAVING COUNT(*) > 5) GROUP BY nombred ; (* pista: orden de ejecución *) Tema 2. Modelo relacional de datos 136 68 SQL-92 Tablas reunidas • • Reunión especificada en la cláusula FROM de una consulta Hasta ahora la hemos especificado p en cláusulas FROM y WHERE * Nombres y dirección de empleados del departamento de Investigación SELECT nombre, apellido, direccion FROM Empleado, Departamento WHERE nombred=‘Investigacion’ AND nd=numerod; • ← reunión de tablas ← condición de reunión Consultas más comprensibles: separa condiciones de reunión y de selección * Nombres y dirección de empleados del departamento de Investigación SELECT nombre, apellido, direccion FROM (Empleado JOIN Departamento ON nd=numerod) WHERE nombred=‘Investigacion’; ← tabla reunida Tema 2. Modelo relacional de datos 137 SQL-92 Tablas reunidas (2): anidamiento • Es posible anidar varias especificaciones de reunión de tablas * Para cada proyecto ubicado en ‘Santiago’, obtener el nº de proyecto, el nº del departamento que lo controla y el apellido, dirección y fecha de nacimiento del gerente de ese departamento SELECT númerop, númd, apellido, dirección, fechan FROM ( ( Proyecto JOIN Departamento ON númd=númerod ) JOIN Empleado ON nssdire=nss ) WHERE lugarp=‘Santiago’; Tema 2. Modelo relacional de datos 138 69 SQL-92 Reunión Interna de tablas (inner join) • Es el tipo de reunión “por defecto” SELECT ... FROM ( R1 JOIN R2 ON <condición <condición_reunión> reunión> ) WHERE ... • Si existe una fila t1 en R1 y otra fila t2 en R2, tales que cumplen la condición de reunión, la tabla resultado (reunida) incluirá la fila obtenida al combinar t1 y t2 SELECT E.nombre AS nom_empleado, S.nombre AS nom_supervisor FROM (Empleado E JOIN Empleado S ON E.nssjefe E nssjefe = S.nss); S nss); –Son excluidas las filas EMPLEADO con NULL en nssjefe • También puede especificarse como R1 INNER JOIN R2 ON <condición_reunión> Tema 2. Modelo relacional de datos 139 SQL-92 Reunión Natural de tablas (natural join) • Sin condición de reunión explícita SELECT ... FROM ( R1 NATURAL JOIN R2 ) WHERE ... • Equi-reunión implícita para cada par de columnas con igual nombre en una y otra tabla ̶ Sólo se incluye una de estas columnas en el resultado ̶ Si no coinciden los nombres de las columnas, es necesario RENOMBRAR una de ellas mediante AS en la cláusula FROM SELECT nombre, b apellido, llid direccion di i FROM ( Empleado NATURAL JOIN (Departamento AS DEP(nombred, nd, dire, fech)) ) WHERE nombred=‘Investigacion’; Tema 2. Modelo relacional de datos 140 70 SQL-92 Reunión Externa de tablas (outer join) • Útil si en una reunión se necesita obtener las filas… – con valor NULL en las columnas de reunión, o – sin correspondencia en la otra tabla • Tipos de reunión externa: – LEFT [OUTER] JOIN – RIGHT [OUTER] JOIN – FULL [OUTER] JOIN Reunión externa izquierda Reunión externa derecha Reunión externa completa o total SELECT E.nombre AS nom_empleado, S.nombre AS nom_supervisor FROM (Empleado E LEFT OUTER JOIN Empleado S ON E.nssjefe=S.nss); ̶ Obtiene también los empleados sin supervisor (con NULL en nssjefe) 141 Tema 2. Modelo relacional de datos SQL-92 Evaluación de consultas • En una consulta SQL hay un máximo de 6 cláusulas • Sólo son obligatorias SELECT y FROM • Orden de especificación de las cláusulas: SELECT <lista columnas> columnas o funciones que se van a obtener FROM <lista tablas> tablas necesarias (incluso las reunidas) WHERE <condición para filas> condiciones para selección de filas GROUP BY <lista columnas agrupación> especificación del agrupamiento de filas HAVING <condición para grupos> condición para selección de grupos de filas ORDER BY <lista columnas ordenación> Tema 2. Modelo relacional de datos resultado orden de presentación del 142 71 SQL-92 Evaluación de consultas (2) • Orden de evaluación de las cláusulas: 1) FROM (es decir, la reunión o join de tablas, si se especifica más de una) 2) WHERE 3) GROUP BY 4) HAVING 5) SELECT 6) ORDER BY • Diversas formas de especificar una misma consulta Ejemplo: es posible expresar una consulta utilizando... a) condiciones de reunión en cláusula WHERE, o b) tablas reunidas en la cláusula FROM, o c) consultas anidadas y el operador de comparación IN ... Flexibilidad 143 Tema 2. Modelo relacional de datos SQL-92 Evaluación de consultas (y 3) • Ventajas e inconvenientes de esta flexibilidad: ☺ – el usuario elige la técnica o enfoque más cómodo – Confusión del usuario: ¿qué técnica uso? – Algunas técnicas son más eficientes que otras el usuario debe determinar cuál • En condiciones ideales... – Usuario: se preocupa sólo de especificar la consulta correctamente – SGBD: se ocupa de ejecutar la consulta de manera eficiente • Pero en la práctica á no suele ser así... í conviene saber qué tipos de consulta son más y menos costosos Recomendación (optimización de consultas): Consultas con mínimo anidamiento correlacionado y mínimo ordenamiento implícito Tema 2. Modelo relacional de datos 144 72 SQL-92 Inserción de datos • Orden INSERT – Añade una fila completa a una tabla – Incluye nombre de la tabla y lista de valores para las columnas, escritos en igual i l orden d all especificado ifi d en la l orden d CREATE TABLE INSERT INTO Empleado VALUES ( 'Ricardo', ‘C’, 'Martínez', '653298653123', ‘987654321’, '30-DIC-52', 'Olmo 98, Cedros, MX', ‘M’, 37000, '987654321321', 4 ) ; – Si se desea poner los valores de las columnas en cualquier orden, hay que especificar los nombres de las columnas en dicho orden INSERT INTO Empleado ( nombre, apellido, nss, nif, nd, salario, nssjefe, direccion, fechan, sexo ) VALUES ( 'Ricardo', ‘C’, 'Martínez', '653298653123', ‘987654321’, 4, 37000, '987654321321', 'Olmo 98, Cedros, MX', '30-DIC-52', ‘M’ ) ; Tema 2. Modelo relacional de datos 145 SQL-92 Inserción (2) • Inserción de varias filas en una sola orden INSERT – Filas separadas por comas – Cada C d fila fil se encierra i entre t paréntesis é t i • Especificación explícita de algunas columnas (y no todas) – Omisión de columnas cuyo valor se desconoce – Cada columna no especificada tomará el... · valor por omisión: valor tomado de su cláusula DEFAULT, o · NULL: si la columna permite nulos y no se definió cláusula DEFAULT para la misma * Inserción de un empleado del que sólo se conoce su nombre, apellidos, nss y nif INSERT INTO Empleado (nombre, apellido, nss, nif) VALUES ( 'Rubén', 'Ripoll', '553298653111‘, ‘11222333R’ ) ; Tema 2. Modelo relacional de datos 146 73 SQL-92 Inserción (3): Restricciones de Integridad • Si SGBD con implementación total de SQL-92 - El SGBD maneja e impone toda RI definida en esquema de BD (LDD) • Si SGBD con implementación p de algunas g RI - Menor complejidad, mayor eficiencia - SGBD implementa comprobaciones para imponer RI que sí maneja INSERT INTO Empleado (nombre, apellido, nd) VALUES ( 'Roberto', 'Huertas', 2); Inserción rechazada: no se incluye valor para nss, que debe ser NOT NULL - Programador debe asegurar la no violación de las RI no manejadas por el SGBD LSupongamos que no existe departamento con numerod=8 INSERT INTO Empleado (nombre, apellido, nss, nif, nd) VALUES ( 'Roberto', 'Huertas', '980760540222', ‘22333444H’, 8 ) ; Si el SGBD sí maneja la Integridad Referencial Inserción rechazada Si el SGBD NO soporta la Integridad Referencial Inserción permitida ¡el programador debe asegurar que esto no pase! Tema 2. Modelo relacional de datos 147 SQL-92 Inserción (y 4): filas resultado de una consulta • Carga de una tabla con información sinóptica de la BD Sea una tabla INFO_DEPTOS vacía. En ella queremos almacenar los nombres de cada departamento, su nº de empleados y el salario conjunto de los empleados del mismo. INFO_DEPTOS ( nombre_depto, num_emps, sal_total) INSERT INTO Info_deptos ( nombre_depto, num_emps, sal_total ) SELECT nombred, COUNT(*), SUM(salario) FROM Departamento, Empleado WHERE númerod=nd GROUP BY nombred ; – Es posible hacer SELECT ... FROM Info_deptos ... – 1 INFO_DEPTOS INFO DEPTOS puede contener información no actualizada Si se modifica información en EMPLEADO y/o DEPARTAMENTO, los cambios no se reflejarán en la tabla INFO_DEPTOS Una vista sí “contiene” siempre los datos más actuales (*se verá*) Tema 2. Modelo relacional de datos 148 74 SQL-92 Eliminación de datos • Orden DELETE – Elimina filas completas de una tabla – Sólo una tabla en cláusula FROM – Cláusula WHERE para seleccionar las filas que eliminar Si no hay WHERE, se eliminan todas las filas La tabla permanece, pero queda vacía DELETE FROM Empleado ; todas las filas DELETE FROM Empleado WHERE apellido=‘Bojórquez’; 0 filas DELETE FROM Empleado WHERE nss=‘123456789012’ ; 1 fila DELETE FROM Empleado E l d WHERE nd IN ( SELECT numerod FROM Departamento WHERE nombre=‘Investigación’) ; 4 filas • Propagación de eliminaciones – Según acciones de mantenimiento de la Integridad Referencial especificadas con LDD en los CREATE TABLE (esquema de BD) Tema 2. Modelo relacional de datos 149 SQL-92 Actualización de datos • Orden UPDATE – Modifica valores de columnas en una o más filas de una tabla – Se modifican filas de una sola tabla a la vez – Cláusula SET especifica columnas que modificar y nuevos valores – Cláusula WHERE para seleccionar filas que actualizar Si no hay WHERE, se aplica la modificación a todas las filas * Para el proyecto 10, cambiar el lugar a Belén y el nº de depto controlador al 5 UPDATE Proyecto SET lugarp = ‘Belen’, númd = 5 WHERE numerop=10 ; • Propagación de modificaciones – Si cambia un valor de clave candidata, este cambio se propaga a valores de clave ajena de filas de otras tablas, si así se especificó en las acciones de mantenimiento de la Integridad Referencial en la definición de la tabla con CREATE TABLE Tema 2. Modelo relacional de datos 150 75 SQL-92 Actualización (y 2) • Modificación de varias filas a la vez con UPDATE * Conceder a todo empleado del departamento de Investigación un aumento salarial del 10% UPDATE Empleado SET salario = salario*1.1 WHERE nd IN (SELECT númerod FROM Departamento WHERE nombred=‘Investigación’) ; • NULL o DEFAULT como nuevo valor de una columna UPDATE Empleado SET salario = DEFAULT; UPDATE Empleado SET nssjefe = NULL WHERE ... ; 151 Tema 2. Modelo relacional de datos SQL-92 LDD: Definición de datos • Esquema de Base de Datos Relacional - Agrupa tablas y otros elementos, de una misma aplicación - 1as versiones de SQL: todas las tablas dentro de un esquema q único y global a todas las aplicaciones que accedían a la BD • Orden CREATE SCHEMA: definición/creación de esquemas CREATE SCHEMA <nombre de esquema> AUTHORIZATION <identificador de autorización> • <nombre de esquema> identifica el esquema • <identificador de autorización> usuario/cuenta propietaria del esquema CREATE SCHEMA Compañía AUTHORIZATION JSILVA ; – A continuación puede especificarse las definiciones de los elementos contenidos en dicho esquema • Elementos del esquema: Tablas, Vistas, Dominios, Autorizaciones, Restricciones, etc. Tema 2. Modelo relacional de datos 152 76 SQL-92 Catálogo de base de datos relacional • Conjunto nombrado de esquemas de BD en un entorno SQL Contiene un esquema especial, INFORMATION_SCHEMA, que almacena datos sobre la definición de todos los elementos de todos los esquemas existentes en el catálogo El Diccionario de Datos (Data Dictionary) de ORACLE se corresponde con el INFORMATION_SCHEMA del estándar SQL-92 - Es posible compartir elementos (dominios, etc.) entre diferentes esquemas del mismo catálogo - Sólo pueden definirse restricciones de integridad referencial entre tablas que existan en esquemas dentro del mismo catálogo • Concepto incorporado en la versión SQL-92 del estándar 153 Tema 2. Modelo relacional de datos SQL-92 LDD: definición de tablas • Orden CREATE TABLE – Define ((crea)) una tabla: nombre,, columnas y restricciones – Nombre único dentro del esquema – Para cada Columna... • nombre, • tipo de datos (dominio) • restricciones de columna – Restricciones R ti i d tabla... de t bl • • • • de clave candidata, de integridad de entidad, de integridad referencial, o restricciones de otro tipo Tema 2. Modelo relacional de datos CREATE TABLE Empleado ( nombre ... apellido ... nss ... nif ... fechan ... direccion ... sexo ... salario ... nssjefe ... nd … ); 154 77 SQL-92 LDD: definición de tablas • Indicación del esquema al que pertenece una tabla – Esquema Explícito CREATE TABLE Compañia.Empleado Compañia Empleado ... – Esquema Implícito en el contexto CREATE TABLE Empleado ... • Ordenamiento de columnas y filas – Columnas ordenadas tal como aparecen en CREATE TABLE – Las L fil filas no están tá ordenadas d d • Las tablas creadas con CREATE TABLE son tablas BASE – El SGBD las almacena físicamente en algún fichero de la BD Tema 2. Modelo relacional de datos 155 SQL-92 LDD: definición de tablas • Especificación del tipo de datos de una columna 1.Especificar directamente el tipo de datos tras nombre de la columna l CREATE TABLE Empleado ( nombre VARCHAR(15) ... ... ); 2.Definir un dominio y usar su nombre como tipo de datos – Facilita cambio del tipo p de datos usado por p muchas columnas – Esquema más comprensible CREATE DOMAIN Nombres VARCHAR(15); ... CREATE TABLE Empleado ( nombre NOMBRES ... ... ); Tema 2. Modelo relacional de datos 156 78 SQL-92 LDD: tipos de datos • Numéricos –Enteros y Reales · INTEGER (también INT), INT) SMALLINT, SMALLINT · FLOAT, REAL, DOUBLE PRECISION –Con formato · DECIMAL(p,e) ( también DEC(p,e) ó NUMERIC(p,e) ) p: precisión, e: escala. El valor por omisión de la escala es e = 0 • Cadena de caracteres –Longitud fija CHAR(n) –Longitud variable VARCHAR(n) ( n: nº caracteres ) ( n: máximo nº caracteres ) • Cadena de Bits –Longitud fija BIT(n) (n: nº bits) –Longitud variable BIT VARYING(n) n:máx nº bits. Por omisión n=1 157 Tema 2. Modelo relacional de datos SQL-92 LDD: tipos de datos • Temporales · DATE (10 posiciones) = YEAR, MONTH, DAY · TIME (8 posiciones) = HOUR, MINUTE, SECOND (yyyy-mm-dd) (hh:mm:ss) – Sólo permitidas fechas y horas válidas · TIMESTAMP (marca de tiempo) – DATE, TIME, fracciones de segundo y desplazamiento respecto al huso horario estándar (WITH TIME ZONE) · INTERVAL – Período de tiempo, tiempo para incrementar/decrementar el valor actual de una fecha, hora o marca de tiempo – Se califica con YEAR/MONTH ó DAY/TIME para indicar su naturaleza Tema 2. Modelo relacional de datos 158 79 SQL-92 LDD: definición de dominios de datos CREATE DOMAIN <nombre dominio> <tipo de datos> [ DEFAULT <valor defecto> ] [ <lista de definición de restricciones de dominio> ] ; - <tipo de datos>: uno de los proporcionados por el SGBD (built-in) - <valor defecto>: (opcional) - Especifica el valor por omisión para columnas definidas de este dominio - Será asignado a cada columna con dicho dominio, si no tiene ya su propia cláusula DEFAULT - <lista de definición de restricciones de dominio>: (opcional) - R Restric. t i Integridad I t id d que se aplican li a toda t d columna l definida d fi id sobre b ell dominio d i i - Cada RI puede tener un nombre: cláusula CONSTRAINT <nombre_RI> * Ejemplo: enumeración de posibles valores componentes del dominio CREATE DOMAIN Color VARCHAR(8) DEFAULT ‘sinColor’ CONSTRAINT color_valido CHECK (VALUE IN ( ‘rojo’, ‘amarillo’, ‘azul’, ‘verde’, ‘sinColor’ ) ) ; Tema 2. Modelo relacional de datos 159 SQL Ejercicios II Tema 2. Modelo relacional de datos 160 80 SQL-92 LDD: definición de tablas • Especificación de restricciones de columna –Cláusula NULL o NOT NULL • Opción de nulo: indica si una columna puede contener o no NULL CREATE TABLE Empleado (... nombre VARCHAR(15) NOT NULL, ... ); • Por omisión, se asume NULL • La restricción NOT NULL es obligatoria para columnas componentes de una clave primaria –Cláusula DEFAULT <valor> • V Valor l por omisión i ió (o ( por defecto) d f t ) CREATE TABLE Empleado ( ... salario DECIMAL(5,2) DEFAULT 1000 NULL,... ); • Si una columna no tiene DEFAULT, su valor por defecto es... – El de su dominio, si su tipo es un dominio que incluye DEFAULT – NULL en cualquier otro caso, siempre que la columna permita NULL Tema 2. Modelo relacional de datos 161 SQL-92 LDD: definición de tablas • Especificación de restricciones de tabla –Cláusula PRIMARY KEY (<lista_columnas>) • Columnas que componen la clave primaria –Cláusula UNIQUE (<lista_columnas>) • Columnas que forman una clave alternativa –Cláusula FOREIGN KEY (<lista_columnas>) REFERENCES <tabla>(<lista_columnas>) • Columnas clave externa (Integridad Referencial) • SQL-92 permite que una clave externa se refiera a una clave primaria o una clave alternativa –Cláusula CHECK (<expresión>) • Condición sobre los valores de las columnas que debe cumplir toda fila de la tabla Tema 2. Modelo relacional de datos 162 81 SQL-92 LDD: definición de tablas CREATE TABLE Empleado ( nombre VARCHAR(15) NOT NULL, apellido VARCHAR(15) NOT NULL, nss CHAR(12) NOT NULL, nif CHAR(9) NOT NULL, fechan DATE NULL, direccion VARCHAR(30) , sexo CHAR(1) , salario DECIMAL(5,2) DEFAULT 1000 NULL, nssjefe CHAR(12) , nd NUMERIC(2) ( ) NOT NULL,, PRIMARY KEY ( nss ), UNIQUE ( nif ), CHECK ( nssjefe <> nss ), CHECK ( sexo IN (‘H’, ‘M’) ), FOREIGN KEY (nssjefe) REFERENCES Empleado(nss), FOREIGN KEY (nd) REFERENCES Departamento(numerod) ); Tema 2. Modelo relacional de datos 163 SQL-92 LDD: definición de tablas • Especificación de restricciones de tabla (cont.) - Dar nombre a una restricción es opcional, pero muy conveniente CONSTRAINT <nombre_RI> <restricción> - El nombre de restricción debe ser único dentro del mismo esquema - Identifica una restricción, por si después debe ser eliminada o sustituida por otra p ( CREATE TABLE Empleado ..., CONSTRAINT pk_empleado PRIMARY KEY ( nss ), CONSTRAINT nif_unico UNIQUE ( nif ), CONSTRAINT jefe_ok CHECK ( nssjefe <> nss ), ... ); Tema 2. Modelo relacional de datos 164 82 SQL-92 LDD: definición de tablas • Especificación de restricciones de tabla (cont.) - Si la restricción afecta sólo a una columna, puede especificarse en la definición de dicha columna (en la misma línea) - Por ejemplo, si una clave externa no es compuesta, no se necesita la cláusula FOREIGN KEY CREATE TABLE Empleado ( nombre VARCHAR(15) NOT NULL, nss CHAR(12) PRIMARY KEY, CHAR(9) ( ) NOT NULL UNIQUE, Q , nif nssjefe CHAR(12) NULL REFERENCES Empleado(nss), nd NUMERIC(2) NOT NULL REFERENCES Departamento(numerod), ..., CONSTRAINT jefe_ok CHECK ( nssjefe <> nss ), ... ); 165 Tema 2. Modelo relacional de datos SQL-92 LDD: definición de tablas • Acciones de mantenimiento de la integridad referencial Cláusulas ON DELETE <acción> y ON UPDATE <acción> <acción> ∈ { NO ACTION, CASCADE, SET NULL, SET DEFAULT } CREATE TABLE Empleado ( ..., CONSTRAINT jefe_emp FOREIGN KEY (nssjefe) REFERENCES Empleado(nss) ON DELETE SET NULL ON UPDATE CASCADE, CASCADE ); CONSTRAINT dep_emp FOREIGN KEY (nd) REFERENCES Departamento(numerod) ON DELETE NO ACTION ON UPDATE CASCADE Tema 2. Modelo relacional de datos 166 83 SQL-92 LDD: definición de vistas • Una vista es una tabla derivada de otras tablas • Son tablas virtuales, pues no necesariamente existen en forma física • Sentencia de definición o creación de una vista CREATE VIEW <nombre_vista> [ (<lista_nombres_columnas>) ] AS <consulta_de_definición> • La consulta de definición… – determina el contenido de la vista – contiene las tablas base: tablas o vistas de las que se deriva la vista (también llamadas tablas de definición) CREATE VIEW Familiar Familiar_de_Empleado de Empleado (empleado (empleado, familiar familiar, parentesco) AS SELECT nombre, nombre_familiar, parentesco FROM Empleado, Familiar WHERE nss = nsse; Tema 2. Modelo relacional de datos 167 SQL-92 LDD: definición de vistas • Por defecto, la vista ‘hereda’ los nombres de las columnas... - seleccionadas desde las tablas base - siempre que ninguna columna sea el resultado de una operación aritmética o función de agregados CREATE VIEW Empleado_en_Proyecto AS SELECT nombre, apellido, nombrep, horas nombres que FROM Empleado, Proyecto, Trabaja_en hereda la vista WHERE nss = nsse AND nump = numerop ; • Definición de nuevos nombres para columnas de la vista CREATE VIEW Info_Depto (nombre_depto, num_de_emps, sal_total) AS SELECT nombred, COUNT(*), SUM(salario) FROM Departamento, Empleado WHERE numerod = nd GROUP BY nombred ; Tema 2. Modelo relacional de datos 168 84 SQL-92 LDD: definición de vistas • Un estado de la vista EMPLEADO_EN_PROYECTO Empleado_en_Proyecto nombre apellido nombrep horas José Silva ProductoX 32.5 Ramón Nieto ProductoZ 40.0 José Silva ProductoY 07.5 Josefa Barceló ProductoX 20.0 Federico Vizcarra ProductoY 10.0 Federico Vizcarra ProductoZ 10 0 10.0 Josefa Barceló ProductoY 20.0 ... ... ... ... Tema 2. Modelo relacional de datos 169 SQL-92 LDD: definición de vistas • Las vistas pueden utilizarse como mecanismo de... - Simplificación de consultas - Seguridad (*se verá en el tema de seguridad*) - Adaptación de la información a las necesidades de cada usuario o grupo de usuarios • Característica fundamental de las vistas Actualización Permanente - El responsable de esta característica es el SGBD La vista ista no se crea c ea cuando c ando se define, define sino cuando c ando se consulta Una vista no “contiene información”, sino que “deja ver información” almacenada en sus tablas base Tema 2. Modelo relacional de datos 170 85 SQL-92 LDD: definición de vistas • El SGBD traduce cualquier sentencia SQL sobre la vista a una expresión equivalente sobre sus tablas base: reemplaza el nombre de la vista por su consulta de definición y ejecuta CREATE VIEW Veterano AS SELECT nombre, nif, nss, fechan, nd FROM Empleado WHERE fechan<’01/01/1970’; Sentencia de usuario Traducción SELECT * FROM VETERANO WHERE nombre LIKE ‘G%’; SELECT nombre, nif, nss, fechan, nd FROM EMPLEADO WHERE fechan < ‘01/01/1970’ AND nombre LIKE ‘G%’; INSERT INTO VETERANO INSERT INTO EMPLEADO ((nombre,, nif,, nss,, fechan,, nd)) VALUES (‘Eva’, ‘12345678E’, VALUES (‘Eva’ ‘12345678E’, ‘123456789012’, ‘14/11/1947’, 4); ‘123456789012’, ‘14/11/1947’, 4); UPDATE VETERANO SET nd=1 WHERE nd=2; UPDATE EMPLEADO SET nd=1 WHERE fechan < ‘01/01/1970’ AND nd=2; DELETE FROM VETERANO WHERE nif = ‘12345678E’; DELETE FROM EMPLEADO WHERE fechan < ‘01/01/1970’ AND nif = ‘12345678E’; Tema 2. Modelo relacional de datos 171 SQL-92 LDD: consulta a través de vistas • Las vistas no tienen ninguna limitación en operaciones de consulta • El usuario no distingue si el elemento al que accede es una tabla base o una vista * Nombres de los empleados y de sus hijos/as SELECT empleado, familiar FROM Familiar_de_empleado WHERE parentesco LIKE ‘Hij_’ ; * Datos del departamento ‘Investigación’ SELECT * FROM Info_Depto WHERE nombre_depto=‘Investigación’ ; * Nombres y apellidos de los empleados que trabajan en el proyecto 'ProductoX' SELECT nombre, apellido, nombrep FROM Empleado_en_Proyecto WHERE nombrep=‘ProductoX’ ; Tema 2. Modelo relacional de datos 172 86 SQL-92 LDD: modificación a través de vistas • La actualización de datos a través de vistas tiene algunas limitaciones - Por un lado, actualizar a través de una vista definida sobre varias tablas base suele dar problemas, pues puede haber ambigüedad UPDATE Empleado_en_Proyecto SET nombrep = ‘ProductoZ’ WHERE apellido=‘Silva’ AND nombre=‘José’ AND nombrep=‘ProductoX’; Esta modificación puede traducirse a dos actualizaciones distintas de las tablas base de la vista (EMPLEADO, PROYECTO y TRABAJA_EN), como se muestra en la siguiente diapositiva… Tema 2. Modelo relacional de datos 173 SQL-92 LDD: modificación a través de vistas UPDATE Trabaja_en SET nump = (SELECT numerop FROM Proyecto WHERE nombrep = ‘ProductoZ’) WHERE nsse = (SELECT nss FROM Empleado WHERE apellido = ‘Silva’ AND nombre = ‘José’) AND númp = (SELECT numerop FROM Proyecto WHERE nombrep = ‘ProductoX’) ; ☺ Modifica los vínculos en TRABAJA_EN: cada fila que relacionaba las filas de ‘José Silva’ en EMPLEADO y de ‘ProductoX’ en PROYECTO, pasa a relacionar tal empleado con la fila ‘ProductoZ’ de PROYECTO UPDATE P Proyecto t SET nombrep b = ‘P ‘ProductoZ’ d t Z’ WHERE nombrep = ‘ProductoX’ ; Produce igual efecto que pero modifica nombrep en PROYECTO: al calcular la vista, mostrará ‘ProductoZ’ para todos los que antes aparecían con ‘ProductoX’ Tema 2. Modelo relacional de datos 174 87 SQL-92 LDD: modificación a través de vistas - Por otro lado, algunas actualizaciones a través de vistas carecen de sentido UPDATE Info_depto SET sal_total = 100000 WHERE nombred=‘Investigación’ ; sal_total se define como la suma de salarios individuales de los empleados y muchas actualizaciones de las tablas base satisfarían esta actualización Así que no se garantiza que “toda vista sea actualizable” Tema 2. Modelo relacional de datos 175 SQL-92 LDD: modificación a través de vistas • Una vista sería actualizable si... - Implicara una única actualización posible de las tablas base, o bien - Hubiera varias actualizaciones posibles, pero existiera un procedimiento específico de actualización de tablas base, tal que... · El usuario pudiera elegir el procedimiento, especificándolo en la definición de la vista, o bien · El SGBD pudiera elegir el procedimiento, según la actualización más probable Tema 2. Modelo relacional de datos 176 88 SQL-92 LDD: modificación a través de vistas • En general... - Una vista con una sola tabla base SÍ es actualizable t li bl sii sus columnas l contienen ti l clave la l primaria u otra clave candidata de la tabla base – Pues se establece una correspondencia entre cada fila de la vista y una única fila de la tabla base - Una vista definida sobre varias tablas mediante reuniones NO es actualizable - Una vista definida mediante agrupación y funciones agregadas NO es actualizable Tema 2. Modelo relacional de datos 177 SQL-92 LDD: modificación a través de vistas • Opción de verificación de vistas CREATE VIEW Emp_Precario AS SELECT nombre, apellido, nss, nif, salario, nd FROM Empleado WHERE salario < 900 ; *¿Qué pasaría al ejecutar estas sentencias? INSERT INTO Emp_Precario VALUES (‘Dimas’, ‘Pi', ‘111222333444’, ‘12121212D’, 1025, 1); UPDATE Emp_Precario SET salario = 950 WHERE nif=‘12345678E’; • Cláusula WITH CHECK OPTION - En la definición de toda vista actualizable que se vaya a utilizar para la modificación de datos - Indica al SGBD que debe comprobar cada INSERT y UPDATE sobre la vista vista, y rechazarlo si su realización implicara que la fila nueva o modificada no cumpliera la condición de definición CREATE VIEW Emp_Precario AS SELECT nombre, apellido, nss, salario, nd FROM Empleado WHERE salario < 900 WITH CHECK OPTION ; Tema 2. Modelo relacional de datos 178 89 SQL-92 LDD: implementación de vistas 1. Estrategia de actualización de consultas de definición - Cada consulta sobre la vista se traduce a una consulta sobre las t bl base tablas b - La vista se rellena de filas a partir de la ejecución de la consulta - Poco eficiente cuando la <consulta_de_definición> es compleja, con tiempo de ejecución apreciable, y se aplican muchas consultas sobre la vista en poco tiempo 2. Estrategia de materialización de vistas - 1ª consulta sobre la vista creación de tabla temporal p física - Se conserva la tabla para posteriores consultas sobre la vista - Necesaria estrategia para actualización incremental de la tabla temporal tras cualquier modificación sobre las tablas base actualización permanente - Si no se hace referencia a la vista tras un tiempo, el sistema la eliminará (y la recalculará en una consulta futura) Tema 2. Modelo relacional de datos 179 SQL-92 LDD: Modificación de la estructura (alteración) de los elementos del esquema de base de datos • Alteración de tablas: ALTER TABLE <nombre_tabla> ... ; – Adición y Eliminación de Columnas – Modificación de la Definición de Columnas – Adición y Eliminación de Restricciones de Tabla • Alt Alteración ió de d dominios: d i i ALTER DOMAIN <nombre_dominio> ... ; – Eliminación y Adición de valor por defecto – Eliminación y Adición de Restricciones de Dominio Tema 2. Modelo relacional de datos 180 90 SQL-92 LDD: alteración de tablas • Adición de una columna a una tabla ya existente ALTER TABLE <nombre_tabla> ADD <definición_columna> ; – N No está tá permitido itid NOT NULL en la l definición d fi i ió de d una nueva columna l (si es necesaria esta restricción, podrá establecerse después) * Añadir una columna a EMPLEADO para contener el puesto de trabajo ALTER TABLE Empleado ADD puesto VARCHAR(12); • Todas las filas de EMPLEADO tendrán puesto a NULL – Para introducir un valor para la columna, en cada fila existente: • Especificar la cláusula DEFAULT al añadir la columna: ALTER TABLE Empleado ADD puesto VARCHAR(12) DEFAULT ‘aprendiz’; • Utilizar después una orden UPDATE Tema 2. Modelo relacional de datos 181 SQL-92 LDD: alteración de tablas • Eliminación de una columna de una tabla ALTER TABLE <nombre_tabla> DROP <nombre_columna> <opción>; <opción> puede ser... CASCADE: elimina la columna y toda restricción o vista que le hace referencia RESTRICT: sólo elimina la columna si ninguna vista ni restricción le referencia * Eliminación de la columna dirección de la tabla EMPLEADO ALTER TABLE Empleado p DROP direccion CASCADE;; ALTER TABLE Departamento DROP numerod <opción>; – Si <opción> = RESTRICT: no elimina la columna ‘numerod’, pues existe una columna ‘EMPLEADO.nd’ que le hace referencia – Si <opción> = CASCADE: elimina la columna y la restricción de integridad referencial que vincula ‘EMPLEADO.nd’ con DEPARTAMENTO. La columna ‘EMPLEADO.nd’ no es eliminada, pero deja de ser clave ajena Tema 2. Modelo relacional de datos 182 91 SQL-92 LDD: alteración de tablas • Modificación de la definición de una columna ALTER TABLE <nombre_tabla> ALTER <nombre_columna> <acción> ; <acción> indica la modificación que se desea realizar... – Eliminación de la cláusula DEFAULT existente ALTER TABLE Departamento ALTER nssdire DROP DEFAULT; – Definición de un nuevo valor por omisión ALTER TABLE Departamento ALTER nssdire SET DEFAULT ‘123456789012’; Tema 2. Modelo relacional de datos 183 SQL-92 LDD: alteración de tablas • Modificación de una restricción de tabla – La restricción que se desea modificar debe tener un nombre – Eliminación de una restricción de tabla ALTER TABLE <nombre_tabla> DROP CONSTRAINT <nombre_RI> <opción>; ALTER TABLE Empleado DROP CONSTRAINT jefe_emp CASCADE; – Adición de una restricción de tabla ALTER TABLE <nombre_tabla> ADD CONSTRAINT <nombre_RI> <definición_RI>; ALTER TABLE Empleado ADD CONSTRAINT salario_ok CHECK (salario > 0); ALTER TABLE Empleado ADD CONSTRAINT puesto_ok CHECK (puesto IS NOT NULL); Tema 2. Modelo relacional de datos 184 92 SQL-92 LDD: alteración de dominios • Orden ALTER DOMAIN <nombre_dominio> <acción>; <acción> indica la modificación que se desea realizar... realizar – Eliminación y Reemplazo del valor por omisión ALTER DOMAIN <nombre_dominio> DROP DEFAULT; ALTER DOMAIN <nombre_dominio> SET DEFAULT <valor>; – Eliminación y Definición de nuevas restricciones de dominio ALTER DOMAIN <nombre_dominio> DROP CONSTRAINT <nombre_RI_dominio>; ALTER DOMAIN <nombre_dominio> ADD [ CONSTRAINT <nombre_RI_dominio> ] <restricción>; Tema 2. Modelo relacional de datos 185 SQL-92 LDD: eliminación de elementos del esquema • Eliminación de una vista. Orden DROP VIEW – Destruye una tabla derivada, junto con su definición en el INFORMATION_SCHEMA del catálogo g DROP VIEW <nombre_vista> ; • Eliminación de un dominio. Orden DROP DOMAIN – Destruye un dominio de datos, junto con su definición en el INFORMATION_SCHEMA del catálogo DROP DOMAIN <nombre_dominio> <opción> ; <opción> puede ser... RESTRICT: destruye RESTRICT d t ell dominio d i i sii no hay h ninguna i columna l definida d fi id sobre b él CASCADE: se elimina el dominio y toda columna definida sobre él pasa a tener el tipo de datos sobre el que se había definido el dominio (este aspecto es ampliado en el tema “Integridad en sistemas de bases de datos relacionales”) Tema 2. Modelo relacional de datos 186 93 SQL-92 LDD: eliminación de elementos del esquema • Eliminación de una tabla. Orden DROP TABLE – Destruye una tabla base, junto con su definición en el INFORMATION_SCHEMA del catálogo g DROP TABLE <nombre_tabla> <opción>; <opción> puede ser... RESTRICT: Destruye la tabla sólo si no se le hace referencia desde ninguna otra tabla (clave ajena), ni es tabla base de una vista CASCADE: Elimina la tabla junto con restricciones y vistas que la referencian • Eliminación de un esquema. Orden DROP SCHEMA – Destruye un esquema de BD, junto con su definición en el INFORMATION O O _SC SCHEMA de del catálogo catá ogo DROP SCHEMA <nombre_esquema> <opción>; <opción> puede ser... RESTRICT: Destruye el esquema sólo si no contiene ningún elemento CASCADE: Elimina el esquema y las tablas, dominios y demás elementos contenidos en el esquema 187 Tema 2. Modelo relacional de datos JDBC • Java DataBase Connectivity y • API Java para ejecutar consultas SQL en Bases de Datos Relacionales. • Independiente del Sistema Gestor Relacional. – Similar en concepto a ODBC de Windows. • Distribuida en dos paquetes: – java.sql, dentro de J2SE – javax.sql extensión ió dentro d de d J2EE • Para acceder a una base de datos es necesario un driver. – Implementación de todas las interfaces del API. Tema 2. Modelo relacional de datos 188 94 JDBC • El API ofrece las clases e interfaces para: p – Establecer una conexión a una base de datos. – Ejecutar una consulta. – Procesar los resultados. // Establece la conexión Connection con = DriverManager.getConnection ( "jdbc:odbc:miBD", ”miLogin", ”miPassword"); // Ejecuta la consulta Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT nombre, edad FROM Empleados"); // Procesa los resultados while (rs.next()) { String nombre = rs.getString(”nombre"); int edad = rs.getInt(”edad"); } 189 Tema 2. Modelo relacional de datos Arquitectura ResultSet Statement Statement Statement Connection Connection Aplicación DriverManager Driver Driver JVM Access Tema 2. Modelo relacional de datos Oracle 190 95 Driver • • Conjunto de clases encargadas de implementar las interfaces del API y acceder a la base de datos datos. Tipos: – Driver Tipo 1: • Utilizan un API nativa estándar • Ejemplo: puente JDBC:ODBC – Driver Tipo 2: • Utilizan un API nativa de la base de datos • Ejemplo: Oracle OCI – Driver Tipo 3: • Se Servidor do remoto e oto co con u un API ge genérica. é ca • Útil para aplicaciones en internet. – Driver Tipo 4: • Totalmente desarrollado en Java • Ejemplo: Oracle Thin. 191 Tema 2. Modelo relacional de datos Driver • • • • Los drivers Tipo 1 y 2 utilizan código nativo vía JNI. – Son más eficientes. Diseño Driver Tipo 3: – En aplicaciones enterprise favorecen la gestión de las bases de datos, que se realiza en el servidor. Carga de un driver: Class.forName(“acme.db.Driver”); Repositorio de drivers: – http://industry.java.sun.com/products/jdbc/drivers Tema 2. Modelo relacional de datos 192 96 Conexión • Representa p una conexión con una base de datos. • Se obtienen a partir de la clase DriverManager: – DriverManager.getConnection(“URL”, “login”, “password”) – Mantiene un registro de todos los drivers cargados en la JVM. • URL identifica el driver y su tipo, la localización de la base de datos y su nombre: – jdbc:oracle:oci:dis.um.es/MiBD • Alternativa a DriverManager: DataSource 193 Tema 2. Modelo relacional de datos DataSource • • • • Actúa como factoría de conexiones. – Método getConnection() Abstrae los detalles de acceso: – Cargar los drivers, URL, login, etc. – Aplicaciones más portables. Suelen mantener un pool de conexiones. Proporcionado por el contenedor utilizando el API JNDI (Java Naming and Directory Interface). – Los detalles de acceso se indican en ficheros de configuración. – Acceso a los servicios de nombres y directorios. – Ejemplo: acceso a recursos, LDAP. Tema 2. Modelo relacional de datos 194 97 Consultas SQL • • • • El API JDBC no restringe las sentencias que se envían a la BD. En principio, todos los drivers deben ser compatibles con ANSI SQL-2 Entry Level. Tipos de sentencias: – Statement: para sentencias sencillas en SQL. – PreparedStatement: para consultas preparadas, • Ejemplo: las que tienen parámetros. – CallableStatement: para ejecutar procedimientos almacenados en la BD. El API distingue dos tipos de consultas: – Consultas: SELECT – Actualizaciones: INSERT, UPDATE, DELETE, sentencias DDL. 195 Tema 2. Modelo relacional de datos Statement • Son creadas a p partir de la conexión: – Statement stmt = conexion.createStatement(); • Ejecución de una consulta: – stmt.executeQuery(“SELECT * FROM Pedidos”); – Devuelve un objeto ResultSet. • Ejecución de una actualización: – stmt.executeUpdate(“DELETE FROM Pedidos WHERE codigo = 15”) – Devuelven un entero indicando los registros actualizados ó 0 si es una consulta DDL. Tema 2. Modelo relacional de datos 196 98 ResultSet • Es un p proxy y sobre los registros g del resultado de la búsqueda. q – Controla la recuperación de los registros. • Representa un cursor (iterador) sobre los resultados. – Movimiento: métodos next() y previous() – Inicialmente el cursor está posicionado antes del primer registro. • Depende del objeto consulta: – Cada vez que se realice una consulta se pierden los resultados. 197 Tema 2. Modelo relacional de datos ResultSet • Tenemos dos alternativas p para acceder a las columnas del resultado: – rs.getString(“nombre”); ⇒ Nombre de la columna – rs.getString(1); ⇒ Posición en la consulta • El acceso por posición es útil cuando: – Acceso a una columna derivada, ej. calcular la media – Cuando hay columnas con los mismos nombres (join) • Recuperación ó de los valores de las columnas: – Métodos de acceso (getXXX). – Es conveniente leer los datos de izquierda a derecha. – Para averiguar si se ha leído un nulo: wasNull() Tema 2. Modelo relacional de datos 198 99 ResultSet – Métodos de Acceso Tipo de dato SQL CHAR VARCHAR LONGVARCHAR NUMERIC DECIMAL BIT TINYINT SMALLINT INTEGER BIGINT REAL FLOAT DOUBLE BINARY VARBINARY DATE TIME TIMESTAMP Método de Acceso String getString() String getString() InputStream getAsciiStream() ó getUnicodeString() java.math.BigDecimal getBigDecimal() java.math.BigDecimal getBigDecimal() boolean getBoolean() byte getByte() short getShort() int getInt() l long getLong() tL () float getFloat() double getDouble() double getDouble() byte[] getBytes() InputStream getBinayStream() java.sql.Date getDate() java.sql.Time getTime() java.sql.TimeStamp getTimeStamp() Tema 2. Modelo relacional de datos 199 PreparedStatement • Problema con Statement: – Cuando la consulta se realiza dentro de un bucle y varía sólo en unos valores: • stmt.executeQuery(“SELECT * FROM Cliente WHERE codigo = “ + i); • La base de datos planifica cada consulta. – Conviene disponer de una consulta con parámetros. • PreparedStatement: – Especialización de Statement que permite definir consultas parametrizadas. – La BD sólo planifica la consulta cuando se crea. – Evitan tener que formatear los datos al construir la cadena de consulta: ‘ ’ para cadenas, fechas y horas. Tema 2. Modelo relacional de datos 200 100 PreparedStatement • • • También se crean a p partir de la conexión: – PreparedStatement pstmt = conexion.prepareStatement(“SELECT * FROM Cliente WHERE codigo = ?”) Los parámetros de entrada se especifican por posición utilizando métodos setXXX: – psmt.setInt(1, 20); – Misma equivalencia que los getXXX de ResultSet. – Los L valores l se conservan entre t ejecuciones. j i • Borrar parámetros: clearParameters() Ejecución: – Consulta: executeQuery(). – Actualización: executeUpdate(). Tema 2. Modelo relacional de datos 201 Transacciones • Ejecución j de bloques q de consultas SQL Q manteniendo las propiedades ACID (Atomicy-Consistency-Isolation-Durability) • Una conexión funciona por defecto en modo autocommit: – Cada consulta representa una sola transacción. – Método: conexion.setAutocommit(false); • Definimos bloques de consultas: – Deshabilitando el modo autocommit. – Finalizamos la transacción ó ejecutando commit() o rollback() sobre la conexión. Tema 2. Modelo relacional de datos 202 101 Nivel de Aislamiento Transaccional • • Niveles de aislamiento: – TRANSACTION_NONE: • Sin soporte transaccional. – TRANSACTION_READ_UNCOMMITED: • Permite lecturas sobre datos no consolidados. – TRANSACTION_READ_COMMITED: • Permite lecturas sólo sobre datos consolidados. • Nivel por defecto. – TRANSACTION_REPEATABLE_READ. • Bloquea los datos leídos. – TRANSACTION_SERIALIZABLE. • Sólo una transacción al mismo tiempo. Suelen estar disponibles read commited y serializable. 203 Tema 2. Modelo relacional de datos Concurrencia • • Establecer el modo de aislamiento: – conexion.setTransactionIsolation( Connection.TRANSACTION_SERIALIZABLE); Consejos de uso: – Bloque con sólo actualizaciones: • TRANSACTION_READ_COMMITED – Bloque donde leamos varias veces el mismo registro: • TRANSACTION_REPEATABLE_READ – Bloque en el que leamos un valor para actualizarlo: • TRANSACTION_SERIALIZABLE – Bloque donde realicemos varias veces la misma consulta (varios registros): • TRANSACTION_SERIALIZABLE Tema 2. Modelo relacional de datos 204 102 Resumen • ¿Qué es ODBC? • Rol del ResultSet • ¿Cómo se parametrizan consultas? • ¿Cómo se controla la concurrencia de transacciones? Tema 2. Modelo relacional de datos 205 103