Download Tema 3: El Modelo Relacional Ejemplo de una relación Estructura
Document related concepts
Transcript
Tema 3: El Modelo Relacional Ejemplo de una relación Estructura de bases de datos relacionales Conversión de diseños E-A a relaciones numero-cuenta nombre-sucursal saldo A-101 Vigo 500 A-102 Pontevedra 400 A-201 Ourense 900 Modificaciones de la base de datos A-215 Santiago 700 Vistas A-217 Ourense 750 Cálculo relacional de tuplas A-222 Lugo 700 Cálculo relacional de dominios A-305 Ferrol 350 Integridad de dominio y referencial Álgebra relacional Operaciones del álgebra relacional extendida Bases de datos 1 Bases de datos 2 Estructura básica Tipos de atributo Formalmente, dados los conjuntos D1, D2, …. Dn una relación r es un subconjunto de se denomina dominio del atributo Los valores de los atributos deben ser (normalmente) Ejemplo: Si atómicos, es decir, indivisibles nombre-cliente = {López, Veiga, Suárez, Diéguez} calle-cliente = {Príncipe, Norte, Diagonal} ciudad-cliente = {Madrid, Vigo, Barcelona} Entonces r = { (López, Príncipe, Madrid), (Veiga, Norte, Vigo), (Suárez, Norte, Vigo), (Diéguez, Diagonal, Barcelona)} es una relación sobre nombre-cliente x calle-cliente x ciudad-cliente Bases de datos Cada atributo de una relación tiene un nombre El conjunto de valores permitidos para cada atributo D1 x D 2 x … x Dn Es decir, una relación es un conjunto de n-tuplas (a1, a2, …, an) donde cada ai ∈ Di + P.e. atributos con valores multivaluados no son atómicos + P.e. atributos con valores compuestos no son atómicos El valor especial null pertenece a cualquier dominio El valor nulo complica la definición de algunos operadores 3 Bases de datos Esquema de una relación 4 Instancia de una relación Los valores actuales (instancia) de una relación se especifican A1, A2, …, An son atributos mediante una tabla R = (A1, A2, …, An ) es un esquema de relación Un elemento t de r es una tupla, y está representado por una P.e. Esquema-cliente = (nombre-cliente, calle-cliente, ciudad-cliente) columna en una tabla r(R) es una relación sobre el esquema de relación R P.e. atributos (o columnas) cliente (Esquema-cliente) nombre-cliente calle-cliente ciudad-cliente López Veiga Suárez Diéguez Príncipe Norte Norte Diagonal Madrid Vigo Vigo Barcelona tuplas (o filas) cliente Bases de datos 5 Bases de datos 6 Las relaciones no tienen orden Base de datos El orden de las tuplas no es relevante (las tuplas se pueden Una base de datos está formada por un conjunto de relaciones almacenar en un orden arbitrario) La información sobre una organización se divide en partes y cada relación almacena una parte de la información P.e.: cuenta: almacena información sobre cuentas depositante: almacena información sobre que cliente tiene asignada que cuenta cliente: almacena información sobre clientes P.e. la relación cuentas con tuplas no ordenadas numero-cuenta nombre-sucursal saldo A-101 Vigo 500 A-215 Santiago 700 A-102 Pontevedra 400 A-305 Ferrol 350 A-201 Ourense 900 A-222 Lugo 700 A-217 Ourense 750 Almacenar toda la información en una sola relación: banco(numero-cuenta, saldo, nombre-cliente, ..) da lugar a + información repetida (p.e. dos clientes tienen una misma cuenta) + necesidad de valores nulos (p.e. información sobre un cliente sin cuenta) La teoría de la normalización se encarga de como diseñar esquemas relacionales correctos Bases de datos 7 8 Determinación de claves a partir de conjuntos E-A Claves Dado K ⊆ R Conjunto entidad fuerte. La clave primaria del conjunto entidad pasa a ser la clave primaria de la relación. K es una superclave de R si los valores de K son suficientes para identificar cada una de las tuplas de cada relación posible r(R) + por “posible r” indicamos una relación r que pueda existir en la Conjunto entidad débil. La clave primaria de la relación está formada por la unión de la clave primaria del conjunto entidad fuerte y el discriminador del conjunto entidad débil. organización que estamos modelando. Conjunto asociación. La unión de las claves primarias de los + Ejemplo: {nombre-cliente, calle-cliente} y conjuntos entidad participantes es una superclave de la relación. + Para conjuntos asociación varios-a-uno, la clave primaria del {nombre-cliente} son ambas superclaves de Cliente, si consideramos que dos clientes no pueden tener el mismo nombre. conjunto entidad “varios” pasa a ser la clave primaria de la relación. K es una clave candidata si K es mínima + Para conjuntos asociación uno-a-uno, la clave primaria de la Ejemplo: {nombre-cliente} es una clave candidata para Cliente, dado que es una superclave (asumiendo que dos clientes no pueden tener el mismo nombre), y ningún subconjunto es una superclave. Bases de datos Bases de datos relación puede ser la de cualquiera de los conjuntos entidad. + Para conjuntos asociación varios-a-varios, la unión de las claves primarias pasa a ser la clave primaria de las relación. 9 Conversión de esquemas EE-A a relaciones Bases de datos 10 Representación de conjuntos entidad como relaciones Un conjunto entidad fuerte se transforma en una relación con los mismos Las claves primarias permiten representar tanto los atributos. conjuntos entidad como los conjuntos asociación como relaciones que representan los contenidos de la base de datos. Id-cliente Una base de datos que sigue el esquema E-A se puede 192-83-7465 representar mediante un conjunto de relaciones. Para cada conjunto entidad y cada conjunto asociación existe una única relación a la que se le asigna el nombre del conjunto entidad o conjunto asociación correspondiente. Cada relación tiene columnas (normalmente una por nombre-cliente calle-cliente ciudad-cliente Sánchez Alma Santiago 019-28-3746 Rodríguez Norte Vigo 677-89-9011 Gómez Príncipe Madrid 182-73-6091 Fernández Alcalá Madrid 321-12-3123 Veiga Príncipe Madrid 336-66-9999 López Diagonal Barcelona 019-28-3746 Rodríguez Norte Vigo atributo), que tienen nombres únicos. Convertir un diagrama E-A a relaciones es la base para conseguir un diseño relacional a partir de ese diseño E-A Bases de datos 11 Bases de datos 12 Atributos compuestos y multivalorados Representación de conjuntos entidad débiles Un conjunto entidad débil se transforma en una relación a la Los atributos compuestos se eliminan creando un nuevo atributo para cada uno de los campos componentes + P.e. dado el conjunto entidad cliente con atributo compuesto nombre con atributos componentes nombre-comun y primer-apellido, la relación correspondiente al conjunto entidad tendrá dos columnas nombre.nombre-comun y nombre.primer-apellido Un atributo multivalorado M de una entidad E se representa mediante una nueva relación EM + La relación EM tendrá como columnas la clave primaria de E y un atributo que se corresponderá con el atributo multivalorado M + P.e. El atributo multivalorado telefonos de empleado se representa mediante la relación empleado-telefonos ( id-empleado, numerot) + Cada valor de un atributo multivalorado se corresponde con una fila diferente de la relación EM P.e., una entidad empleado con clave primaria “Pérez” y teléfonos que se le añade una columna para la clave primaria del conjunto entidad fuerte identificador numero-cuenta numero-pago fecha-pago cantidad-pago L-11 53 7-junio-2001 125 L-14 69 28-mayo-2001 500 L-15 22 23-mayo-2001 300 L-16 58 18-junio 2001 135 L-17 5 10-mayo-2001 50 L-17 6 7-junio-2001 50 L-17 7 17-junio-2001 100 L-23 11 17-mayo-2001 75 L-93 103 3-junio-2001 900 L-93 104 13-junio-2001 200 “123456” y “234567” se corresponde con dos filas: (Pérez, 123456) and (Pérez, 234567) Bases de datos 13 Bases de datos Representación de conjuntos asociación como relaciones Redundancia de relaciones Un conjunto asociación varios a varios se representa con una Los conjuntos asociación varios-a-uno y uno-a-varios se relación con columnas para las claves primarias de los dos conjuntos entidad participantes, y también para los atributos descriptivos del conjunto asociación. pueden representar añadiendo un atributo extra a la parte de “varios”, conteniendo la clave primaria de la parte de “uno” Para resolver problemas de inconsistencia se utiliza el P.e.: relación para el conjunto asociación prestatario Id-cliente numero-prestamo 019-28-3746 L-11 019-28-3746 L-23 244-66-8800 L-93 321-12-3123 L-17 335-57-7991 L-16 555-55-5555 L-14 677-89-9011 L-15 963-96-3963 L-17 Bases de datos concepto de clave foránea que definiremos al hablar de integridad referencial P.e.: En vez de crear una relación para la asociación cuentasucursal, añadimos un atributo sucursal al conjunto entidad cuenta ciudad-sucursal saldo numero-cuenta cuenta 15 nombre-sucursal cuenta-sucursal activo sucursal Bases de datos 16 Representación de especializaciones con relaciones Redundancia de relaciones (Cont.) Método 1: Para conjuntos asociación una-a-uno, cualquiera de las + Crear una relación para la entidad de nivel alto participaciones se puede seleccionar para actuar como “varios” + Es decir, se puede añadir un atributo extra a cualquiera de las relaciones correspondientes a los dos conjuntos entidad Si la participación es parcial en la parte de varios, el reemplazar una relación por un atributo extra en la relación correspondiente a la parte de “varios” puede dar lugar a valores nulos (null) La relación correspondiente al conjunto asociación que enlaza un conjunto entidad débil con su conjunto entidad fuerte identificador es redundante. + P.e. La relación pago ya contiene la información que debería + Crear una relación para cada conjunto entidad de nivel bajo, que incluirá la clave primaria del conjunto entidad de nivel alto y los atributos locales tabla persona cliente empleado atributos nombre, calle, ciudad nombre, tipo nombre, salario + Problema: obtener información sobre, por ejemplo, empleados requiere acceder a dos relaciones aparecer en la tabla prestamo-pago (las columnas numeroprestamo y numero-pago). Bases de datos 14 17 Bases de datos 18 Representación de especializaciones con relaciones (Cont.) Método 2: Relaciones correspondientes a agregaciones Para representar una agregación, se crea una + Crear una relación para cada conjunto entidad con todos los atributos relación conteniendo locales y heredados tabla atributos persona nombre, calle, ciudad cliente nombre, calle, ciudad, tipo empleado nombre, calle, ciudad, salario la clave primaria de la asociación agregada, La clave primaria del conjunto entidad asociado Cualquier atributo descriptivo + Si la especialización es total, la relación para la entidad generalizada (persona) no tiene que almacenar información Se puede definir como una relación “vista” que contenga la unión de las relaciones de especializaicón Pero aún puede ser necesaria una relación para restricciones de tipo clave foránea + Problema: la información sobre calle y ciudad puede almacenarse de manera redundante para personas que son a la vez clientes y empleados Bases de datos 19 Relaciones correspondientes a agregaciones (Cont.) Bases de datos 20 Diagrama EE-A para la entidad bancaria P.e. para representar la asociación dirige entre la asociación trabaja-en y ciudad-sucursal el conjunto entidad director, creamos una relación dirige (id-empleado, nombre-sucursal, id-puesto, nombre-director) numero-cuenta La relación trabaja-en es redundante siempre que permitamos almacenar nombre-sucursal saldo cuenta sucursal cuenta-sucursal valores nulos en el atributo nombre-director en la relación dirige puesto empleado trabaja-en activos prestamo -sucursal depositante oficina cliente dirige nombre-cliente prestatario prestamo ciudad-cliente numero-prestamo cantidad calle-cliente Bases de datos director 21 Bases de datos La relación cliente 22 La relación depositante nombre-cliente calle-cliente Suárez Príncipe ciudad-cliente Vigo Vázquez Diagonal Barcelona nombre-cliente numero-cuenta Veiga Norte Santiago Suárez A-102 Rodríguez Real Ourense Vázquez A-101 Fernández Parque Lugo Veiga A-201 Sánchez Independencia Ponferrada Veiga A-217 Gómez Colón Madrid Rodríguez A-222 Díaz Norte Santiago Fernández A-215 Pazo Pazos Ferrol Gómez A-305 González Navas Granada Rial Reina Lugo García Ensanche Barcelona Bases de datos 23 Bases de datos 24 Restricciones de dominio Diagrama del esquema para la entidad bancaria Las restricciones de integridad nos protegen ante daños accidentales en sucursal cuenta depositante cliente nombre-sucursal numero-cuenta nombre-cliente nombre-cliente ciudad-sucursal nombre-sucursal numero-cuenta calle-cliente activos saldo la base de datos, asegurando que los cambios autorizados en la base de datos no van a producir una pérdida de consistencia en los datos Las restricciones de dominios son la forma más elemental de restricciones de integridad. ciudad-cliente Comprueban los valores insertados en la base de datos, y comprueban las consultas para asegurar que las comparaciones tienen sentido. Se pueden crear nuevos dominios a partir de los tipos de datos existentes prestamo prestatario numero-prestamo nombre-cliente nombre-sucursal numero-prestamo P.e. create domain Euros numeric(12, 2) create domain Libras numeric(12,2) No se puede asignar o comparar un valor de tipo Euros con un valor de cantidad tipo Libras. + No obstante, se pueden convertir tipos: (cast r.A as Libras) (Se debería también multiplicar por la conversión euro-a-libra) Bases de datos 25 Bases de datos Integridad referencial 26 Integridad referencial en el modelo EE-A Asegura que un valor que aparece en una relación para un conjunto de atributos determinado también aparece en un conjunto de atributos de otra relación. + Ejemplo: Si “Vigo” es un nombre de sucursal que aparece en una de Consideremos el conjunto asociación R entre los conjuntos entidad E1 y E2. El esquema relacional de R incluye las claves primarias K1 de E1 y K2 de E2. Entonces K1 y K2 son claves foráneas sobre los esquemas relacionales de E1 y E2 respectivamente. las tuplas de la relación cuentas, entonces existe una tupla en la relación sucursales para la sucursal “Vigo”. E1 Definición formal + Dadas las relaciones r1(R1) y r2(R2) con claves primarias K1 y K2 respectivamente. E2 de integridad referencial. + El esquema de relación de un conjunto entidad débil debe incluir los + El subconjunto α de R2 es una clave foránea referenciando K1 en la relación r1, si para cada t2 en r2 debe haber una tupla t1 en r1 tal que t1[K1] = t2[α]. + Las restricciones de integridad referencial también se denominan dependencias de subconjunto ya que se pueden expresar como ∏α (r2) ⊆ ∏K1 (r1) Bases de datos R Los conjuntos entidad débiles también dan lugar a restricciones 27 Comprobación de integridad referencial durante una modificación atributos que forman la clave primaria del conjunto entidad del que depende Bases de datos 28 Modificaciones de la base de datos (Cont.) Actualizaciones. Hay dos casos: + Se deben realizar las siguientes comprobaciones con el fin de preservar la siguiente restricción de integridad referencial: Si se actualiza una tupla t2 en la relación r2 y la actualización modifica los valores de la clave foránea α,entonces se debe hacer un test similar al caso de inserción: ∏α (r2) ⊆ ∏K (r1) Insertar. Si una tupla t2 se inserta en r2, el sistema se debe asegurar de que hay una tupla t1 en r1 tal que t1[K] = t2[α]. Es decir Si t2’ denota el nuevo valor de la tupla t2, el sistema se debe asegurar de que t2’[α] ∈ ∏K(r1) + t2 [α] ∈ ∏K (r1) Eliminar. Si se elimina una tupla t1 de r1, el sistema debe hallar el conjunto de tuplas de r2 que referencian t1: Si se actualiza una tupla t1 en r1, y la actualización modifica el valor de la clave primaria (K), entonces se debe realizar un test similar a la del caso de eliminación: 1. El sistema debe calcular σα = t1[K] (r2) utilizando el valor anterior de t1 (el valor antes de hacer la actualización). 2. Si el conjunto no es vacío 1. σα = t1[K] (r2) la actualización se puede rechazar como un error, o 2. La actualización se puede hacer en cascada sobre las tuplas del conjunto, o Si el conjunto no es vacío + o bien se rechaza el comando como un error, + o bien se deben eliminar las tuplas que referencian a t1 3. Las tuplas del conjunto se pueden eliminar. (se permiten eliminaciones en cascada) Bases de datos 29 Bases de datos 30 Lenguajes de consulta Álgebra relacional Lenguajes con los que el usuario obtiene información Lenguaje procedimental almacenada en la base de datos. Seis operadores básicos Tipos de lenguajes + selección + procedimentales + proyección + No procedimentales + unión Lenguajes “puros”: + diferencia de conjuntos + Álgebra relacional + producto cartesiano + Cálculo relacional de tuplas + renombrar + Cálculo relacional de dominios Los operadores se aplican sobre dos o más relaciones y dan Los lenguajes puros son la base de los lenguajes que se utilizan como resultado una nueva relación. habitualmente Bases de datos 31 Bases de datos Operación de selección Notación: 32 Operación de selección – Ejemplo σ p(r) • p se denomina predicado de la selección Relación r Se define como: σp(r) = {t | t ∈ r y p(t)} donde p es una fórmula en calculo proposicional formada por términos unidos por : ∧ (y), ∨ (o), ¬ (no) Cada término tiene la forma: <atributo> op <atributo> o <constante> donde op es: =, ≠, >, ≥. <. ≤ A B C D α α 1 7 α β 5 7 β β 12 3 β β 23 10 A B C D α α 1 7 β β 23 10 • σA=B ^ D > 5 (r) Ejemplo de selección: σ nombre-sucursal=“Vigo”(cuenta) Bases de datos 33 Operación de proyección Bases de datos 34 Operación de proyección – Ejemplo Notación: ∏A1, A2, …, Ak (r) Relación r: donde A1, A2 son nombres de atributos y r en un nombre de relación. El resultado es la relación de k columnas que se obtiene eliminando las columnas no listadas Las filas duplicadas del resultado se eliminan, ya que las relaciones son conjuntos ∏A,C (r) P.e. Eliminar el atributo nombre-sucursal de cuentas ∏numero-cuenta, saldo (cuenta) Bases de datos 35 Bases de datos A B C α 10 1 α 20 1 β 30 1 β 40 2 A C A C α 1 α 1 α 1 β 1 β 1 β 2 β 2 = 36 Operación de unión Operación de unión – Ejemplo Notación: r ∪ s Relaciones r, s: Se define como: r ∪ s = {t | t ∈ r o t ∈ s} Para que r ∪ s sea válida. 1. r, s deben tener el mismo número de atributos 2. Los dominios de los atributos deben ser compatibles (p.e., la 2ª columna de r contiene el mismo tipo de valores que la segunda columna de s) A B A B α 1 α 2 α 2 β β 1 r r ∪ s: P.e. encontrar todos los clientes con cuentas o préstamos ∏nombre-cliente (depositante) ∪ ∏nombre-cliente (prestatario) Bases de datos 37 Operación diferencia de conjuntos B α 1 α 2 β 1 β 3 Bases de datos 38 Relaciones r, s: Se define como: r – s = {t | t ∈ r y t ∉ s} La diferencia de conjuntos se debe realizar entre relaciones compatibles. + r y s deben tener el mismo número de atributos + Los dominios de los atributos de r y s deben ser compatibles A B A B α 1 α 2 α 2 β β 1 3 s r r – s: 39 A B α 1 β 1 Bases de datos Operación producto cartesiano 40 Operación producto cartesiano - Ejemplo Notación r x s Relaciones r, s: Se define como: r x s = {t q | t ∈ r y q ∈ s} Se asume que los atributos de r(R) y s(S) son disjuntos. (Es A B C D E α 1 β 2 α β β γ 10 10 20 10 a a b b r decir, R ∩ S = ∅). Si los atributos de r(R) y s(S) no son disjuntos, se debe utilizar la operación de renombrar. Bases de datos A Operación diferencia de conjuntos – Ejemplo Notación r – s Bases de datos 3 s 41 s r x s: Bases de datos A B C D E α α α α β β β β 1 1 1 1 2 2 2 2 α β β γ α β β γ 10 10 20 10 10 10 20 10 a a b b a a b b 42 Combinación de operaciones Operación de renombrado Se pueden construir expresiones utilizando varias operaciones Permite nombrar, y por tanto referirnos a, los resultados de las expresiones de álgebra relacional. Ejemplo: σA=C(r x s) rxs σA=C(r x s) Bases de datos A B C D E α α α α β β β β 1 1 1 1 2 2 2 2 α β β γ α β β γ 10 10 20 10 10 10 20 10 a a b b a a b b A B C D E 1 2 2 α 10 β 20 β 20 a a b α β β Permite referirse a una relación con más de un nombre. Ejemplo: ρ x (E) devuelve la expresión E con el nombre X Si la expresión E en álgebra relacional tiene un orden n, entonces ρx (A1, A2, …, An) (E) devuelve la expresión E con el nombre X, y con los atributos renombrados a A1, A2, …., An. 43 Bases de datos Ejemplo de banco 44 Ejemplo de consultas Encontrar todos los préstamos de más de 1200 € sucursal (nombre-sucursal, ciudad-sucursal, activos) σcantidad > 1200 (prestamo) cliente (nombre-cliente, calle-cliente, ciudad-cliente) cuenta (numero-cuenta, nombre-sucursal, saldo) Encontrar el número de préstamos para cada préstamo de una cantidad mayor de 1200 € prestamo (numero-prestamo, nombre-sucursal, cantidad) depositante (nombre-cliente, numero-cuenta) ∏numero-prestamo (σcantidad > 1200 (prestamo)) prestatario (nombre-cliente, numero-prestamo) Bases de datos 45 Bases de datos Ejemplo de consultas 46 Ejemplo de consultas Encontrar los nombres de todos los clientes que tengan un préstamo en la sucursal de Vigo. Encontrar los nombres de todos los clientes que tengan una cuenta, un préstamo, o ambas cosas en el banco. ∏nombre-cliente (prestatario) ∪ ∏nombre-cliente (depositante) Encontrar los nombres de todos los clientes que tienen una ∏nombre-cliente (σnombre-sucursal=“Vigo” (σprestatario.numero-prestamo = prestamo.numero-prestamo(prestatario x prestamo))) Encontrar los nombres de todos los clientes que tengan un préstamo cuenta y un préstamos en el banco. en la sucursal de Vigo pero no tengan una cuenta en ninguna sucursal del banco. ∏nombre-cliente (prestatario) ∩ ∏nombre-cliente (depositante) ∏nombre-cliente (σnombre-sucursal = “Vigo” (σprestatario.numero-prestamo = prestamo.numero-prestamo(prestatario x prestamo))) - ∏nombre-cliente(depositante) Bases de datos 47 Bases de datos 48 Ejemplo de consultas Ejemplo de consultas Encontrar los nombres de todos los clientes que tengan un préstamo en la sucursal de Vigo. Encontrar la cuenta con el mayor saldo Renombramos la relación cuenta como d −Consulta 1 Consulta: ∏nombre-cliente(σnombre-sucursal = “Vigo” ( σprestatario.numero-prestamo = prestamo.numero-prestamo(prestatario x prestamo))) ∏saldo(cuenta) - ∏cuenta.saldo (σcuenta.saldo < d.saldo (cuenta x ρd (cuenta))) − Consulta 2 ∏nombre-cliente(σprestamo.numero-prestamo = prestatario.numero-prestamo( (σnombre-sucursal = “Vigo”(prestamo)) x prestatario)) Bases de datos 49 Bases de datos 50 Definición formal Otras operaciones Una expresión básica en álgebra relacional puede ser: Podemos definir más operaciones que no proporcionan nueva funcionalidad al álgebra relacional pero que simplifican consultas habituales. + Una relación de la base de datos + Una relación constante Dadas dos expresiones en álgebra relacional E1 y E2 también Intersección de conjuntos son expresiones en álgebra relacional: Reunión (join) natural + E1 ∪ E2 División + E1 - E2 Asignación + E1 x E2 + σp (E1), P es un predicado sobre los atributos de E1 + ∏s(E1), S es una lista que contiene algunos atributos de E1 + ρ x (E1), x es el nuevo nombre del resultado de E1 Bases de datos 51 Operación intersección de conjuntos Notación: r ∩ s Bases de datos 52 Operación intersección de conjuntos Ejemplo Relaciones r, s: Se define como: r ∩ s ={ t | t ∈ r and t ∈ s } Asumiendo: B α α β 1 2 1 r + r, s tienen el mismo número de atributos + Los atributos de r y s con compatibles r∩s Nota: r ∩ s = r - (r - s) Bases de datos A 53 Bases de datos A B α 2 A B α β 2 3 s 54 Operación join natural Notación: r Operación join natural - Ejemplo s Relaciones r, s: Dadas dos relaciones r y s sobre los esquemas R y S respectivamente. Entonces, r s es una relación sobre el esquema R ∪ S que se obtiene de la siguiente manera: + Se considera cada par de tuplas tr de r y ts de s. + Si tr y ts tienen el mismo valor para cada uno de los atributos en R ∩ S, A B C D B D E α β γ α δ 1 2 4 1 2 α γ β γ β a a b a b 1 3 1 2 3 a a a b b α β γ δ ∈ se añade una tupla t al resultado, donde t tiene el mismo valor que t sobre r r t tiene el mismo valor que t Ejemplo: r s sobre s r s s R = (A, B, C, D) S = (E, B, D) + Esquema de relación = (A, B, C, D, E) + r s se define como: (σr.B = s.B ∧ r.D = s.D (r x s)) ∏ Bases de datos r.A, r.B, r.C, r.D, s.E 55 A B C D E α α α α δ 1 1 1 1 2 α α γ γ β a a a a b α γ α γ δ Bases de datos Operación división 56 Operación división - Ejemplo r÷s Relaciones r, s: Adecuada para consultas que incluyan la expresión “para todos”. Dadas las relaciones r y s sobre los esquemas R y S respectivamente, donde + R = (A1, …, Am, B1, …, Bn) + S = (B1, …, Bn) El resultado de r ÷ s es una relación sobre el esquema R – S = (A1, …, Am) r ÷ s = { t | t ∈ ∏ R-S(r) ∧ ∀ u ∈ s ( tu ∈ r ) } r ÷ s: A A B B α α α β γ δ δ δ ∈ ∈ β 1 2 3 1 1 1 3 4 6 1 2 1 2 s r α β Bases de datos 57 Bases de datos Otro ejemplo de división 58 Operación asignación La operación asignación (←) facilita un modo conveniente de Relaciones r, s: expresar consultas complejas. A B C D E D E α α α β β γ γ γ a a a a a a a a α γ γ γ γ γ γ β a a b a b a b b 1 1 1 1 3 1 1 1 a b 1 1 + Escribir consultas como un programa secuencial consistente en un conjunto de asignaciones Seguido por una expresión cuyo valor se muestre como el resultado de la consulta. + La asignación siempre se debe realizar a una variable relación temporal. s Ejemplo: r ÷ s se puede expresar como temp1 ← ∏R-S (r) temp2 ← ∏R-S ((temp1 x s) – ∏R-S,S (r)) result = temp1 – temp2 r r ÷ s: A α γ Bases de datos + El resultado de la expresión a la derecha de ← se asigna a la variable B a a relación de la izquierda de ←. C + La variable se puede utilizar en las expresiones que vienen a γ γ continuación. 59 Bases de datos 60 Ejemplo de consultas Ejemplo de consultas Encontrar todos los clientes que tengan una cuenta al menos en las sucursales de “Vigo” y “Pontevedra”. sucursales de Madrid. Consulta 1 ∏NC(σNS=“Vigo”(depositante ∏nombre-cliente, nombre-sucursal (depositante cuenta) ÷ ∏nombre-sucursal (σciudad-sucursal = “Madrid” (sucursal)) cuenta)) ∩ ∏NC(σNS=“Pontevedra”(depositante Encontrar todos los clientes que tengan una cuenta en todas las cuenta)) donde NC representa nombre-cliente y NS nombre-sucursal. Consulta 2 ∏nombre-cliente, nombre-sucursal (depositante cuenta) ÷ ρtemp(nombre-sucursal) ({(“Vigo”), (“Pontevedra”)}) Bases de datos 61 Bases de datos 62 Proyección generalizada Operaciones del Álgebra Relacional Extendida Extiende la operación de proyección permitiendo funciones aritméticas en la lista de proyección. Proyección generalizada ∏ F1, F2, …, Fn(E) Reunión (join) externa E es cualquier expresión en álgebra relacional Funciones agregadas F1, F2, …, Fn son expresiones aritméticas que incluyen constantes y atributos del esquema de E. P.e. Dada la relación info-credito(nombre-cliente, limite, saldo- credito), encontrar cuanto puede gastar cada persona: ∏nombre-cliente, limite – saldo-credito (info-credito) Bases de datos 63 Funciones y operaciones agregadas Las funciones de agregación toman como argumentos un conjunto de valores y devuelven un valor simple como resultado. Bases de datos Operación agregada - Ejemplo Relación r: avg: valor medio min: valor mínimo max: valor máximo sum: suma de valores count: número de valores Operación agregada en álgebra relacional G1, G2, …, Gn A B C α α β β α β β β 7 7 3 10 g F1( A1), F2( A2),…, Fn( An) (E) + E es cualquier expresión en álgebra relacional + G1, G2 …, Gn es una lista de atributos sobre los que agrupar (puede estar vacía) g sum(c) (r) + Cada Fi es una función agregada + Cada Ai es un nombre de atributo Bases de datos 64 65 Bases de datos sum-C 27 66 Operación agregada - Ejemplo Funciones agregadas (Cont.) El resultado de la agregación no tiene nombre + Se puede utilizar la operación de renombrado para darle un nombre Relación cuenta agrupada por nombre-sucursal: nombre-sucursal numero-cuenta Vigo Vigo Madrid Madrid Pontevedra nombre-sucursal Bases de datos + Por conveniencia, se permite el renombrado como parte de la operación de agregación saldo A-102 A-201 A-217 A-215 A-222 400 900 750 750 700 Nombre-sucursal g sum(saldo) as sum-saldo (cuenta) g sum(saldo) (cuenta) nombre-sucursal saldo Vigo Madrid Pontevedra 1300 1500 700 67 Bases de datos Join externo 68 Join externo – Ejemplo Es una extensión de la operación de join que evita la Relación prestamo pérdida de información. numero-prestamo nombre-sucursal Calcula el join y después añade las tuplas de una Vigo Ourense Madrid L-170 L-230 L-260 relación que no coinciden con las tuplas de la otra relación al resultado del join. cantidad 3000 4000 1700 Utiliza valores null: Relación prestatario + null significa que el valor es desconocido o no existe nombre-cliente + Todas la comparaciones en las que participa un valor null son falsas por definición. Bases de datos López Vázquez García 69 Join externo derecho prestamo Vigo Ourense cantidad 3000 4000 numero-prestamo nombre-sucursal nombre-cliente L-170 L-230 L-155 López Vázquez Bases de datos prestamo prestatario numero-prestamo nombre-sucursal Vigo Ourense Madrid Vigo Ourense null cantidad 3000 4000 null nombre-cliente López Vázquez García Join externo total Join externo izquierdo L-170 L-230 L-260 prestatario prestatario numero-prestamo nombre-sucursal prestamo 70 Join externo – Ejemplo Join interno L-170 L-230 L-170 L-230 L-155 Bases de datos Join externo – Ejemplo prestamo numero-prestamo cantidad 3000 4000 1700 nombre-cliente prestatario numero-prestamo nombre-sucursal López Vázquez null L-170 L-230 L-260 L-155 71 Bases de datos Vigo Ourense Madrid null cantidad 3000 4000 1700 null nombre-cliente López Vázquez null García 72 Valores nulos Valores nulos Las comparaciones con valores null devuelven un valor especial Las tuplas pueden contener valores nulos, denotados por null, de verdad denominado desconocido + Si se usa falso en vez de desconocido, entonces en algunos de sus atributos null significa valor desconocido o que el valor no existe. El resultado de cualquier expresión aritmética en la que participe null es null. no sería equivalente a not (A < 5) Lógica trivalorada utilizando el valor de verdad desconocido: + OR: (desconocido or verdad) = verdad, (desconocido or falso) = desconocido, (desconocido or desconocido) = desconocido Las funciones agregadas ignoran los valores null + Es una decisión arbitraria. Alternativamente se podría haber devuelto como resultado null. + Seguimos la semántica de SQL respecto al manejo de valores nulos Para eliminación de duplicados y agrupamientos, null recibe el mismo tratamiento que cualquier otro valor, y se asume que dos nulos son iguales + Alternativa: asumir que cada nulo es distinto de los demás + Ambas son decisiones arbitrarias. Nosotros seguimos SQL Bases de datos A >= 5 73 + AND: (verdad and desconocido) = desconocido, (falso and desconocido) = falso, (desconocido and desconocido) = desconocido + NOT: (not desconocido) = desconocido + En SQL “P es desconocido” se evalúa a verdad si el predicado P se evalúa a desconocido El resultado de un predicado de selección se trata como falso si se evalúa como desconocido Bases de datos Modificación de la base de datos 74 Borrado El contenido de la base de datos se puede modificar utilizando Una petición de borrado se expresa de manera similar a una las siguientes operaciones: + Borrado + Inserción + Actualización consulta, excepto que, en vez de mostrar las tuplas al usuario, las tuplas seleccionadas se eliminan de la base de datos. Sólo se pueden eliminar tuplas completas; no se pueden eliminar solo determinados atributos Un borrado se expresa en álgebra relacional como: Todas estas operaciones se expresan mediante el operador de r←r–E asignación. donde r es una relación y E es una consulta en álgebra relacional. Bases de datos 75 Bases de datos Ejemplos de borrado 76 Inserción Para insertar datos en una relación podemos: Borrar todas las cuentas de la sucursal de Vigo. + o bien especificar la tupla a insertar cuentas ← cuentas – σ nombre-sucursal = “Vigo” (cuenta) + O bien escribir una consulta cuyo resultado esté formado por las tuplas a insertar Borrar todos los préstamos con cantidades entre 0 y 50 En álgebra relacional, una inserción se expresa: r← r ∪ E prestamo ← prestamo – σ cantidad ≥ 0 and cantidad ≤ 50 (prestamo) donde r es una relación y E es una expresión en álgebra relacional. Borrar todas las cuentas de sucursales de Madrid. r1 ← σ ciudad-sucursal = “Madrid” (cuenta La inserción de una sola tupla se realiza cuando E es una sucursal) relación constante que contiene una tupla. r2 ← ∏ciudad-sucursal, numero-cuenta, saldo (r1) r3 ← ∏ nombre-cliente, numero-cuenta (r2 depositante) cuenta ← cuenta – r2 depositante ← depositante – r3 Bases de datos 77 Bases de datos 78 Ejemplos de inserción Actualización Insertar información en la base de datos especificando que Permite cambiar el valor de una tupla sin cambiar todos los López tiene 1200€ en la cuenta A-973 en la sucursal de Vigo. valores de la tupla Para ello se utiliza la operación de proyección generalizada cuenta ← cuenta ∪ {(“Vigo”, A-973, 1200)} r ← ∏ F1, F2, …, FI, (r) depositante ← depositante ∪ {(“López”, A-973)} Cada Fi es + el atributo i de r, si el atributo i no se quiere actualizar, o, Dar un premio a todos los préstamos de la sucursal de Vigo + si se va a actualizar el atributo i, Fi es una expresión en la que una cuenta de ahorro con 200€. El número de préstamo se utilizará como numero de cuenta de ahorro. r1 ← (σnombre-sucursal = “Vigo” (prestatario intervienen solamente constantes y los atributos de r, que proporciona el nuevo valor del atributo prestamo)) cuenta ← cuenta ∪ ∏nombre-sucursal, numero-cuenta,200 (r1) depositante ← depositante ∪ ∏nombre-cliente, numeor-prestamo(r1) Bases de datos 79 Bases de datos 80 Ejemplos de actualización Vistas Pagar intereses aumentando un 5% todos los saldos. En algunos casos no es deseable que todos los usuarios vean el modelo lógico completo (es decir, todas las relaciones almacenadas en la base de datos) cuenta ← ∏ NC, NS, SAL * 1.05 (cuenta) donde NC, NS y SAL significan numero-cuenta, nombre-sucursal y saldo, respectivamente. Pagar a todas las cuentas con saldos de más de 10.000€ un 6% de interés y un 5% al resto cuenta ← préstamo de un cliente pero no necesita ver la cantidad prestada. Esta persona debería ver la siguiente relación descrita en álgebra relacional ∏nombre-cliente, numero-prestamo (prestatario prestamo) Cualquier relación que no existe en el modelo conceptual pero ∏ NC, NS, SAL * 1.06 (σ SAL > 10000 (cuenta)) ∪ ∏NC, NC, SAL * 1.05 (σSAL ≤ 10000 (cuenta)) Bases de datos Consideremos una persona que necesita saber un número de se necesita proporcionar a un usuario como una “relación virtual” se denomina vista. 81 Bases de datos Definición de vistas 82 Ejemplos de vistas Definir una vista (denominada todos-los-clientes) formada por Una vista se define utilizando una sentencia create view que sucursales y sus clientes. tiene la siguiente forma create view v as <consulta> create view todos-los-clientes as ∏nombre-sucursal, nombre-cliente (depositante donde <consulta> es cualquier consulta válida en álgebra relacional. El nombre de la vista es v. cuenta) ∪ ∏nombre-sucursal, nombre-cliente (prestatario prestamo) Una vez definida una vista, el nombre de la vista se utiliza para referirse a la relación virtual que genera la vista. Podemos encontrar todos los clientes de la sucursal de Vigo con: Definir una vista no es lo mismo que crear una nueva relación evaluando la consulta + La definición de una vista hace que se guarde una expresión de una ∏nombre-sucursal (σnombre-sucursal = “Vigo” (todos-los clientes)) consulta; la expresión se substituye en las consultas que utilicen la vista. Bases de datos 83 Bases de datos 84 Modificaciones a través de vistas Modificaciones a través de vistas (Cont.) La inserción anterior se debe representar mediante una inserción Las modificaciones de la base de datos que se expresan mediante en la relación prestamo a partir de la cual se construyó la vista sucursal-prestamo. vistas se deben traducir a modificaciones de las relaciones de la base de datos. Una inserción en prestamo requiere un valor para cantidad. El Consideremos la persona que necesita ver todos los datos de tratamiento de la inserción puede ser + Rechazar la inserción y devolver un mensaje de error al usuario. + Insertar una tupla (“L-37”, “Vigo”, null) en la relación prestamo Algunas actualizaciones a través de vistas son imposibles de transformar en actualizaciones de relaciones en la base de datos préstamos en la relación prestamo excepto cantidad. La vista que le demos a esa persona, sucursal-prestamo, se define como: create view sucursal-prestamo as ∏nombre-sucursal, numero-prestamo (prestamo) Dado que permitimos utilizar un nombre de vista en cualquier lugar donde pueda aparecer un nombre de relación, el usuario podría escribir: + create view v as (σnombre-sucursal = “Vigo” (cuenta)) v ← v ∪ (L-99, Ourense, 23) Otras no se pueden transformar de manera única sucursal-prestamo ← sucursal-prestamo ∪ {(“Vigo”, L-37)} + todos-los-clientes ← todos-los-clientes ∪ {(“Vigo”, “López”)} ¡Tenemos que elegir préstamo o cuenta y crear un nuevo número de cuenta/préstamo! Bases de datos 85 Bases de datos Vistas definidas utilizando otras vistas 86 Cálculo relacional de tuplas Es un lenguaje de consulta no procedimental, en el que cada Una vista se puede utilizar en la expresión que define otra vista consulta tiene la forma {t | P (t) } Una relación vista v1 se dice que depende directamente de una relación vista v2 si v2 se utiliza en la relación que define v1 Es el conjunto de todas las tuplas t tales que el predicado P es Una relación vista v1 se dice que depende de una relación vista verdadero para t v2 si, o bien v1 depende directamente de v2, o bien hay un camino de dependencias desde v1 a v2 t es una variable tupla, t[A] denota el valor de la tupla t en el atributo A Una relación vista v se dice que es recursiva si depende de si t ∈ r denota que la t está en la relación r misma. P es una fórmula similar a las del cálculo de predicados Bases de datos 87 Bases de datos Fórmulas en el cálculo de predicados 1. Conjunto de atributos y constantes 88 Ejemplo de consultas Encontrar el numero-prestamo, nombre-sucursal, y cantidad de los préstamos de más de 1200€ 2. Conjunto de operadores de comparación: (p.e., <, ≤, =, ≠, >, ≥) {t | t ∈ prestamo ∧ t [cantidad] > 1200} 3. Conjunto de conectivas: y (∧), o (v)‚ no (¬) 4. Implicación (⇒): x ⇒ y, si x es verdad, entonces y es verdad Encontrar el número de préstamo de cada préstamo de más de x ⇒ y ≡ ¬x v y 1200€ 5. Conjunto de cuantificadores: y ∃ t ∈ r (Q(t)) ≡ ”existe” una tupla t en la relación r tal que el predicado Q(t) es verdad y ∀t ∈ r (Q(t)) ≡ Q es verdad “para todas” las tuplas t en la relación r Bases de datos {t | ∃ s ∈ prestamo (t[numero-prestamo] = s[numero-prestamo] ∧ s [cantidad] > 1200)} Notar que la consulta define implícitamente una relación sobre el esquema [numero-prestamo] 89 Bases de datos 90 Ejemplo de consultas Ejemplo de consultas Encontrar los nombres de todos los clientes que tienen un Encontrar los nombres de todos los clientes que tengan un préstamo, una cuenta o ambas cosas en el banco préstamo en la sucursal de Vigo {t | ∃s ∈ prestatario( t[nombre-cliente] = s[nombre-cliente]) ∨ ∃u ∈ depositante( t[nombre-cliente] = u[nombre-cliente]) Encontrar los nombres de todos los clientes que tienen un préstamo y una cuenta en el banco {t | ∃s ∈ prestatario( t[nombre-cliente] = s[nombre-cliente]) ∧ ∃u ∈ depositante( t[nombre-cliente] = u[nombre-cliente]) Bases de datos 91 Ejemplo de consultas Encontrar los nombres de todos los clientes que tengan un préstamo en la sucursal de Vigo, pero no tengan una cuenta en ninguna sucursal del banco {t | ∃s ∈ prestatario( t[nombre-cliente] = s[nombre-cliente] ∧ ∃u ∈ prestamo(u[nombe-sucursal] = “Vigo” ∧ u[numero-prestamo] = s[numero-prestamo])) ∧ not ∃v ∈ depositante (v[nombre-cliente] =t[nombre-cliente]) } Bases de datos 92 Seguridad de las expresiones Encontrar los nombres de todos los clientes que tengan un En cálculo de tuplas es posible escribir expresiones que generen préstamo en la sucursal de Vigo , y las ciudades donde viven infinitas relaciones. {t | ∃s ∈ prestamo(s[nombre-sucursal] = “Vigo” ∧ ∃u ∈ prestatario (u[numero-prestamo] = s[numero-prestamo] ∧ t [nombre-cliente] = u[nombre-cliente]) ∧ ∃ v ∈ cliente (u[nombre-cliente] = v[nombre-cliente] ∧ t[ciudad-cliente] = v[ciudad-cliente])))} Encontrar los nombres de todos los clientes que tengan una cuenta en todas las sucursales de Madrid: {t | ∃ c ∈ cliente (t[nombre-cliente] = c[nombre-cliente]) ∧ Bases de datos {t | ∃s ∈ prestatario(t[nombre-cliente] = s[nombre-cliente] ∧ ∃u ∈ prestamo(u[nombre-sucursal] = “Vigo” ∧ u[numero-prestamo] = s[numero-prestamo]))} Por ejemplo, {t | ¬ t ∈ r} da lugar a una relación infinita si el dominio de algún atributo de la relación r es infinito Para prevenir este problema, se restringe el conjunto de expresiones permitidas a expresiones seguras. Una expresión {t | P(t)} en el cálculo relacional de tuplas es segura si cada componente de t aparece en una de las relaciones, tuplas, o constantes que aparecen en P + NOTA: esto es más que una simple condición de sintaxis. ∨ true } no es segura --- define un conjunto infinito con valores de atributo que no aparecen en ninguna relación, tupla o constante en P. P.e. { t | t[A]=5 ∀ s ∈ sucursal(s[ciudad-sucursal] = “Madrid” ⇒ ∃ u ∈ cuenta ( s[nombre-sucursal] = u[nombre-sucursal] ∧ ∃ s ∈ depositante ( t[nombre-cliente] = s[nombre-cliente] ∧ s[numero-cuenta] = u[numero-cuenta] )) )} 93 Bases de datos Cálculo relacional de dominios 94 Ejemplo de consultas Es un lenguaje de consulta no procedimental equivalente en Encontrar el numero-prestamo, nombre-sucursal, y cantidad para capacidad expresiva al cálculo relacional de tuplas préstamos de más de 1200€ {< l, b, a > | < l, b, a > ∈ prestamo ∧ a > 1200} Cada consulta es una expresión de la siguiente forma: Nombre los clientes que tienen un préstamo de más de 1200€ { < x1, x2, …, xn > | P(x1, x2, …, xn)} {< c > | ∃ l, b, a (< c, l > ∈ prestatario ∧ < l, b, a > ∈ prestamo ∧ a > 1200)} + x1, x2, …, xn representan variables de dominio Encontrar los nombres de todos los clientes que tienen un préstamo + P representa una formula similar a las del cálculo de predicados en la sucursal de Vigo y la cantidad del préstamo: {< c, a > | ∃ l (< c, l > ∈ prestatario ∧ ∃b(< l, b, a > ∈ prestamo ∧ b = “Vigo”))} o {< c, a > | ∃ l (< c, l > ∈ prestatario ∧ < l, “Vigo”, a > ∈ prestamo)} Bases de datos 95 Bases de datos 96 Ejemplo de consultas Encontrar los nombres de todos los clientes que tengan una cuenta, un préstamo o ambas cosas en la sucursal de Vigo: {< c > | ∃ l ({< c, l > ∈ prestatario ∧ ∃ b,a(< l, b, a > ∈ prestamo ∧ b = “Vigo”)) ∨ ∃ a(< c, a > ∈ prestatario ∧ ∃ b,n(< a, b, n > ∈ cuenta ∧ b = “Vigo”))} Fin del tema 3 Encontrar los nombres de todos los clientes que tienen una cuenta en todas las sucursales de Madrid: {< c > | ∃ s, n (< c, s, n > ∈ cliente) ∧ ∀ x,y,z(< x, y, z > ∈ sucursal ∧ y = “Vigo”) ⇒ ∃ a,b(< x, y, z > ∈ cuenta ∧ < c,a > ∈ depositante)} Bases de datos 97 Bases de datos Manuel Ramos Cabrer 98