Capitulo 2: Modelo relacional Capitulo 2: Modelo relacional Estructuras de las bases de datos relacionales Operaciones fundamentales del algebra relacional Operaciones adicionales del algebra relacional Operaciones extendidas del algebra relacional Valores nulos Modificación de la base de datos Ejemplo de una relación Estructura básica Formalmente, dado los conjuntos D1, D2, …. Dn una relación r es un subconjunto de D1 x D2 x … x Dn Así, una relación es un conjunto de n-tuplas (a1, a2, …, an) donde cada ai Di Las relaciones se definen como subconjuntos del producto cartesiano de la lista de dominios. Variable tupla es una variable que representa una tupla. Estructura básica Ejemplo: Si nombre_cliente={ana, pedro, luis, jose, …} /* Conjunto de todos los nombres */ calle_cliente = {Álamos, San José, Retiro, …} /* Conjunto de todos los nombres de calle*/ ciudad_cliente = {Cusco, Lima, Puno, …} /* Conjunto de todos los nombres de ciudades*/ Entonces r = { (ana, Álamos, Cusco), (Pedro, San José, Lima), (Luis, San José, Lima), (José, Retiro, Puno) } es una relación sobre: nombre_cliente x calle_cliente x ciudad_cliente Tipos de Atributos Cada atributo de una relación tiene un nombre El conjunto de valores permitidos para cada atributo se denomina dominio del atributo Los valores de los atributos normalmente son atómicos; es decir, indivisibles Ejm. El valor de un atributo puede ser un numero de cuenta, pero no puede ser un conjunto de números de cuentas Se dice que un dominio es atómico si todos sus elementos son atómicos o indivisibles El valor especial null es miembro de todos los dominios Los valores nulos pueden causar complicaciones en la definición de muchas operaciones Esquema de una Relación A1, A2, …, An son atributos R = (A1, A2, …, An ) es un esquema de relación Ejemplo: Esquema_cliente = (nombre_cliente, calle_cliente, ciudad_cliente) r(R) denota una relación r sobre el esquema de relación R Ejemplo: cliente (Esquema_cliente) Ejemplar de la relación Los valores actuales (ejemplar de la relación) de una relación son especificados en una tabla. Un elemento t de r es una tupla, representado por una fila en un tabla Atributos (o columnas) nombre_cliente Jones Smith Curry Lindsay calle_cliente Main North North Park cliente ciudad_cliente Harrison Rye Rye Pittsfield tuplas (o filas) Relaciones desordenadas El ordén de las tuplas es irrelevante (las tuplas pueden ser almacenadas en un orden arbitrario) Ejemplo: La relación cuenta con tuplas desornadas Esquema de la base de datos Una base de datos comprende múltiples relaciones La información de una empresa es dividida en varias partes, la información de cada parte se almacena en una relación cuenta : almacena información referente a cuentas impositor o depositante: almacena información sobre que clientes son propietarios de determinadas cuentas. cliente : Almacena información de clientes Almacenar toda la información en una única relación tales como: banco(numero_cuenta, saldo, nombre_cliente, ..) el resultado es Repetir varias veces la información Necesidad de utilizar valores nulos Ejm. , Si dos clientes son propietarios de una misma cuenta Ejm., representar a clientes que no tengan una cuenta en el banco Teoría de la normalización indica como diseñar los esquemas de relación La relación cliente La relación impositor o depositante Claves Una superclave es un conjunto de uno o varios atributos que, considerados conjuntamente, permiten identificar de manera univoca una tupla de la relación. Sea K R K es una superclave de R si los valores de K son suficientes para identificar de manera única una tupla de cada posible relación r(R) por “posible r ” entendemos una relación r que puede existir dentro de la empresa que nosotros modelamos. Ejemplo: {nombre_cliente, calle_cliente} y {nombre_cliente} ambos son superclaves de Cliente, si no es posible que dos clientes tengan el mismo nombre En la vida real no se da. Si C es una superclave, entonces también lo es cualquier superconjunto de C. Claves (Cont.) A menudo resultan interesantes superclaves para las que ninguno de sus subconjuntos constituye una superclave. Esas superclaves mínimas se denominan claves candidatas Ejemplo: {nombre_cliente} es una clave candidata para Cliente, también es una superclave donde ninguno de sus subconjuntos constituye una superclave. Clave primaria: es una clave candidata que ha elegido el diseñador de la base de datos como medio principal para la identificación de tuplas de una relación. Una clave primaria debe escogerse de manera que los valores de sus atributos no se modifique nunca o muy rara vez.. Ejemplo la dirección de correo es única, pero puede cambiar Foreign Keys - Claves externas Un esquema de relación puede tener un atributo que hace referencia a la clave primaria de otra relación. El atributo es llamado foreign key o clave extraña. Ejm. nombre_cliente y numero_cuenta atributos de depositor son foreign keys a cliente y cuenta respectivamente. relación referenciada (Cliente y Cuenta) relación referenciante. (Impositor) Diagrama de esquema Lenguaje de consulta Es un lenguaje en el que los usuarios solicitan información a la base de datos. Categorías de los lenguajes: Procedimental No-procedimental, o declarativo Lenguajes de consulta puros: Algebra relacional Calculo relacional de tuplas Calculo relacional de dominios Estos lenguajes de consultas puros son rígidos y formales, y carecen del “Azúcar sintáctico” de los lenguajes comerciales, pero ilustran las técnicas fundamentales para la extracción de datos de la base de datos. Algebra Relacional Lenguaje procedimental Seis operaciones básicas select: project: union: set difference: – Cartesian product: x rename: Las operaciones toman uno o dos relaciones como entrada y producen una nueva relación resultante. Operación Select – Ejemplo Relación r A=B ^ D > 5 (r) A B C D 1 7 5 7 12 3 23 10 A B C D 1 7 23 10 Select Operation Notación: p(r) p se conoce como el predicado de selección Definido como: p(r) = {t | t r and p(t)} Donde p es una formula de términos que son proposiciones condicionales conectados por: (and), (or), (not) Cada termino tiene el formato siguiente: <atributo> op [<atributo> | <constante>] donde op es un signo: =, , >, . <. Ejemplo de selección: nombre_sucursal=“Perryridge”(cuenta) Ejemplo de Operación Project Relación r: A,C (r) A B C 10 1 20 1 30 1 40 2 A C A C 1 1 1 1 1 2 2 = Operación Project Notación: A1 , A2 ,, Ak (r ) donde A1, A2 son nombres de atributos y r es un nombre de relación. El resultado esta definido como una relación de k columnas obtenidas por eliminar las columnas que no están en lista Las filas duplicadas son removidas del resultado, porque la relación es un conjunto Ejemplo de la operación Union Relaciones r, s: A B A B 1 2 2 3 1 s r r s: A B 1 2 1 3 Operación Union Notación: r s Definido como: r s = {t | t r o t s} Para r s debe ser valido. 1. r, s deben tener la misma aridad (mismo numero de atributos) 2. Los dominios de atributo deben ser compatibles (ejemplo: 2nd columna de r deben ser del mismo tipo que la 2nd columna de s) Ejemplo: Determinar el nombre de todos los clientes del banco que tienen una cuenta, un prestamo o ambas cosas. nombre_cliente (prestatario) nombre_cliente (impositor) Ejemplo de la operación Set Difference Relaciones r, s: A B A B 1 2 2 3 1 s r r – s: A B 1 1 Operación Set Difference Notación r – s Definido como: r – s = {t | t r and t s} La diferencia de conjuntos debe ser efectuada entre relaciones compatibles. r y s deben tener la misma aridad Los dominios de atributos de r y s deben ser compatibles Ejemplo de producto cartesiano Relaciones r, s: A B C D E 1 2 10 10 20 10 a a b b r s r x s: 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 Operación producto cartesiano Notación r x s Definido como: r x s = {t q | t r and q s} Asume que los atributos de r(R) y s(S) son disjuntos. (si, R S = ). Si los atributos de r(R) y s(S) no son disjuntos, entonces debemos usar la operación de renombramiento. Composición de operaciones Pueden construirse expresiones utilizando múltiples operaciones Ejemplo: A=C(r x s) rxs 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 10 20 a a b A=C(r x s) Operación Rename A diferencia de las relaciones de base de datos, los resultados de las expresiones del algebra relacional no tienen un nombre que se puede usar para referirse a ellas. La operación de renombramiento, permite ponerle mas de un nombre a una relación o expresión de algebra relacional. Ejemplo: x (E) devuelve la expresión E con el nombre X Suponga que una expresión de algebra relacional E tiene aridad n, entonces x ( A ,A 1 2 ,...,An ) (E ) devuelve el resultado de la expresión E con el nombre X, y con los atributos con el nombre cambiado a A1 , A2 , …., An . Ejemplos del Banco sucursal (nombre_sucursal, ciudad_sucursal, activos) cliente (nombre_cliente, calle_cliente, ciudad_cliente) cuenta (numero_cuenta, nombre_sucursal, saldo) préstamo (numero_prestamo, nombre_sucursal, importe) impositor (nombre_cliente, numero_cuenta) prestatario(nombre_cliente, numero_prestamo) Ejemplos de consultas Encontrar todos los prestamos superiores a $1200 importe > 1200 (préstamo) Encontrar el numero de prestamo para cada prestamo de una cantidad superior a $1200 numero_prestamo (importe > 1200 (prestamo)) Encontrar los nombres de todos los clientes quienes tienen un prestamo, o una cuenta, o ambos, en el banco nombre_cliente (prestatario) nombre_cliente (impositor) Ejemplo de consultas Encontrar el nombre de todos los clientes quienes tienen un préstamo en la sucursal Perryridge. nombre_cliente (nombre_sucursal=“Perryridge” (prestatario.numero_prestamo = prestamo.numero_prestamo(prestatario x prestamo))) Encontrar los nombres de todos los cliente quienes tienen un préstamo en la sucursal Perryridge pero que no tengan una cuenta en ninguna sucursal del banco. nombre_cliente (nombre_sucursal = “Perryridge” (prestatario.numero_prestamo = prestamo.numero_prestamo(prestatario x prestamo))) – nombre_cliente(impositor) Ejemplo de consultas Encontrar el nombre de todos los clientes quienes tienen un prestamo en la sucursal Perryridge. Query 1 nombre_cliente (nombre_sucursal=“Perryridge” (prestatario.numero_prestamo = prestamo.numero_prestamo(prestatario x prestamo))) Query 2 nombre_cliente (prestamo.numero_prestamo = prestatario.numero_prestamo ( ( nombre_sucursal=“Perryridge”(prestamo)) x prestatario)) Ejemplo de consultas Buscar el saldo máximo de las cuentas del banco Estrategia: Encontrar los saldos que no son máximos – Renombrar la relación cuenta como d así podemos comparar cada saldo de cuenta con los otros Utilizar la operación set difference para encontrar los saldos de cuenta que no se encuentran en el paso anterior. La consulta es: saldo(cuenta) - cuenta.saldo (cuenta.saldo < d.saldo (cuenta x d (cuenta))) Definición formal del algebra relacional Las expresiones fundamentales del algebra relacional se componen de alguno de los siguientes elementos: Una relación de la base de datos Una relación constante {(“Downtown” ), (“Uptown” )} Sea E1 and E2 expresiones del algebra relacional. Todas las expresiones siguientes son también expresiones de algebra relacional: E1 E2 E1 – E2 E1 x E2 p (E1), P es un predicado de atributos de E1 s(E1), S es una lista que se compone de algunos de los atributos de E1 x (E1), x es el nuevo nombre del resultado de E1 Operaciones adicionales Se definen otras operaciones que no añaden potencia al algebra, pero simplifican las consultas habituales. Intersección de conjuntos (Set intersection) Unión natural (Natural join) División (Division) Asignación (Assignment) Operación Set-Intersection Notación: r s Definido como: r s = { t | t r and t s } Asume: r, s tienen la misma aridad Atributos de r y s son compatibles Utilizar operaciones fundamentales para la intersección: Nota: r s = r – (r – s) Ejemplo de la operación Set-Intersection Relaciones r, s: A B 1 2 1 r rs A B 2 A B 2 3 s Operación Natural-Join Notación: r s Sea r y s relaciones del los esquemas R y S respectivamente. Entonces , r s es una relación en el esquema R S determinado de la siguiente manera: Considera cada par de tuplas tr de r y ts de s. Si tr y ts tienen el mismo valor en cada uno de los atributos de R S, adicionar una tupla t al resultado, donde t tiene el mismo valor que tr en r t tiene el mismo valor que ts en s Ejemplo: R = (A, B, C, D) S = (E, B, D) Esquema resultante = (A, B, C, D, E) r s es definido como: r.A, r.B, r.C, r.D, s.E (r.B = s.B r.D = s.D (r x s)) Ejemplo de la operación Natural Join Relaciones 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 r r s s A B C D E 1 1 1 1 2 a a a a b Reunión Zeta Es una extensión de la operación reunión natural que permite combinar una selección y un producto cartesiano en una sola operación. Considere las relaciones r(R) y s(S), y sea Ѳ un predicado de los atributos del esquema R U S. La operación reunión zeta r Ѳ s = Ѳ(r x s) Operación Division Notación: rs Resulta adecuada para las consultas que incluyen la expresión “Para todos”. Sea r y s relaciones 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 ) } Donde tu significa la concatenación de tuplas t y u para producir una simple tupla Ejemplo de la operación Division Relaciones r, s: r s: A A B B 1 2 3 1 1 1 3 4 6 1 2 1 2 s r R – S = (A1, …, Am) r s = { t | t R-S (r) u s ( tu r ) } Otro ejemplo de la operación Division Relaciones r, s: 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 r r s: A B C a a s Operación Division (Cont.) Propiedad Sea q = r s Entonces q es la máxima relación que satisface q x s r Definición en términos de operaciones básicas del algebra relacional Sea r(R) and s(S) son relaciones, y sea S R r s = R-S (r ) – R-S ( ( R-S (r ) x s ) – R-S,S(r )) a ver porque R-S,S (r) simplemente atributos de r R-S (R-S (r ) x s ) – R-S,S(r) ) dadas estas tuplas t en R-S (r ) tales que para algunas tuplas u s, tu r. Operación de asignación (Assignment) La operación de asignación () provee una conveniente manera de expresar consultas complejas. Con la operación de asignación se pueden escribir las consultas como programas secuenciales que constan de una serie de asignaciones seguida de una expresión cuyo valor se muestra como resultado de la consulta La asignación siempre debe hacerse a una variable de relación temporal Ejemplo: Escribir r s como temp1 R-S (r ) temp2 R-S ((temp1 x s ) – R-S,S (r )) result = temp1 – temp2 El resultado de la derecha de es asignado a la variable relación en la izquierda . Puede utilizar variables en las sub siguientes expresiones. Ejemplos de consulta de banco Encontrar los nombres de todos los clientes quienes tienen un préstamo y una cuenta en el banco. nombre_cliente (prestatario) nombre_cliente (impositor) Encontrar el nombre de todos los cliente que tienen un préstamo en el banco y el importe del prestamo nombre_cliente, numero_prestamo, importe (prestatario prestamo) Ejemplos de consulta de banco Encontrar a todos los clientes quienes tienen una cuenta en las sucursales “Downtown” y “Uptown”. Query 1 nombre_cliente (nombre_sucursal = “Downtown” (impositor nombre_cliente (nombre_sucrusal = “Uptown” (impositor cuenta)) cuenta)) Query 2 nombre_cliente, nombre_sucursal (impositor cuenta) temp(nombre_sucursal) ({(“Downtown” ), (“Uptown” )}) Nota que esta consulta utiliza una relación constante Ejemplo de consultas del banco Encontrar todos los clientes quienes tienen una cuenta en todas las sucursales localizadas en la ciudad de Brooklyn. nombre_cliente, nombre_sucursal (impositor cuenta) nombre_sucursal (ciudad_sucursal = “Brooklyn” (Sucursal)) Operaciones del algebra relacional extendidas Proyección generalizada Funciones de agregación Reunión externa Proyección generalizada Extiende la proyección permitiendo que se utilicen funciones aritméticas en la lista de proyecciones. F1 ,F2 ,..., Fn (E ) E es cualquier expresión del algebra relacional y F1, F2, …, Fn son expresiones aritméticas que incluyen constantes y atributos del esquema de E. Suponga que se dispone de una relación información_crédito que proporciona el límite de crédito y el importe consumido actualmente (saldo_credito). Si se desea determinar el importe disponible por cada persona, se puede escribir la expresión siguiente: nombre_cliente, limite_credito – saldo_credito (información_crédito) Operaciones y funciones de agregación Funciones de agregación toman un conjunto de valores y devuelven como resultado un único valor. avg: valor promedio min: valor mínimo max: valor máximo sum: suma de valores count: numero de valores Operación de agregación en algebra relacional G1,G2 ,,Gn F ( A ),F ( A ,,F ( A ) (E ) 1 1 2 2 n n E es cualquier expresión del algebra relacional G1, G2 …, Gn es una lista de atributos sobre los cuales se agrupa (puede estar vacio) Cada Fi es una función de agregación Cada Ai es un nombre de atributo Ejemplo de la operación de agregación Relación r: g sum(c) (r) A B C 7 sum(c ) 27 7 3 10 Ejemplo de la función de agregación A Relación cuenta agrupado por nombre_sucursal: Nombre_sucursal Numero_cuenta Perryridge Perryridge Brighton Brighton Redwood saldo A-102 A-201 A-217 A-215 A-222 400 900 750 750 700 nombre_sucursalg sum(saldo) (cuenta) Nombre_sucursal Perryridge Brighton Redwood sum(saldo) 1300 1500 700 Funciones de agregación (Cont.) El resultado de la agregación no tiene nombre Podemos utilizar la operación de renombrar para darle un nombre Como conveniencia notacional, los atributos de las operaciones de agregación se pueden renombrar como se indica: Nombre_sucursal g sum(saldo) as saldo_suma (cuenta) Reunión externa Es una ampliación de la operación reunión para trabajar con información ausente. Calcula la reunión y al resultado se añade tuplas de una relación que no coincide con las tuplas de otra relación. Uso de valores nulos: null significa que el valor no es conocido o no existe Todas las comparaciones que involucran null son (mas o menos) falsas por definición. Ejemplo de reunión externa Relación prestamo numero_prestamo nombre_sucursal Downtown Redwood Perryridge L-170 L-230 L-260 importe 3000 4000 1700 Relación prestatario nombre_cliente Jones Smith Hayes numero_prestamo L-170 L-230 L-155 Ejemplo de reunión externa Reunión préstamo numero_prestamo L-170 L-230 prestatario nombre_sucursal Downtown Redwood importe 3000 4000 nombre_cliente Jones Smith Reunión externa por la Izquierda préstamo numero_prestamo L-170 L-230 L-260 prestatario nombre_sucursal Downtown Redwood Perryridge importe 3000 4000 1700 nombre_cliente Jones Smith null Ejemplo de reunión externa Reunión externa por derecha prestamo numero_prestamo L-170 L-230 L-155 prestatario nombre_sucursal Downtown Redwood null importe 3000 4000 null nombre_cliente Jones Smith Hayes Reunión externa completa prestamo numero_prestamo L-170 L-230 L-260 L-155 Prestatario nombre_sucursal Downtown Redwood Perryridge null importe 3000 4000 1700 null nombre_cliente Jones Smith null Hayes Valores nulos Es posible que las tuplas tengan valores nulos, representado por null, para algunos de sus atributos null significa un valor desconocido o un valor que no existe. Cualquier operación aritmética que incluya valores nulos debe devolver un valor nulo. Las funciones de agregación simplemente ignoran los valores nulos (también en SQL) Valores nulos Las operaciones y las comparaciones con valores nulos se deben evitar siempre que sea posible. Un valor nulo indica “Valor desconocido o no existente” Cualquier operación aritmética que incluya valores nulos debe devolver un valor nulo. Cualquier comparación (<, >, >=, <= y ≠) que incluya un valor nulo tiene como resultado el valor especial desconocido. Tres valores lógicos utilizando el valor lógico desconocido: OR: (desconocido or true) = true, (desconocido or false) = desconocido (desconocido or desconocido) = desconocido AND: (true and desconocido) = desconocido, (false and desconocido) = false, (desconocido and desconocido) = desconocido NOT: (not desconocido) = desconocido Modificación de la base de datos El contenido de la base de datos puede ser modificada utilizando las siguientes operaciones: Eliminar Insertar Actualizar Las modificaciones de la base de datos se expresan mediante la operación de asignación. Eliminar Las solicitudes de borrado se expresan básicamente igual que las consultas. Sin embargo, en lugar de mostrar las tuplas al usuario, se eliminan de la base de datos las tuplas seleccionadas. Solo se pueden eliminar tuplas enteras; no se pueden borrar valores de atributos concretos. En el algebra relacional los borrados se expresan mediante: rr–E donde r es una relación y E es una consulta del algebra relacional. Ejemplo de eliminación Eliminar todas las cuentas de la sucursal Perryridge. cuenta cuenta – nombre_sucursal = “Perryridge” (cuenta ) Eliminar todos los prestamos con importe entre rango de 0 a 50 prestamo prestamo – importe 0 and importe 50 (prestamo) Eliminar todas las cuentas de las sucursales localizadas en Needham. r1 ciudad_sucursal = “Needham” (cuenta sucursal ) r2 numero_cuenta, nombre_sucursal, saldo (r1) r3 nombre_cliente, numero_cuenta (r2 cuenta cuenta – r2 impositor impositor – r3 impositor) Inserción Para insertar datos en una relación hay que especificar la tupla que se va a insertar o escribir una consulta cuyo resultado sea el conjunto de tuplas que se va a insertar El algebra relacional expresa la inserción mediante: r r E donde r es una relación y E es una expresión del algebra relacional. La inserción de una única tupla se expresa haciendo que E sea una relación constante que contiene una tupla. Ejemplos de Inserción Insertar información en la base de datos especificando que Smith tiene $1200 en la cuenta A-973 de la sucursal de Perryridge. cuenta cuenta {(“A-973”, “Perryridge”, 1200)} impositor impositor {(“Smith”, “A-973”)} Actualización Cambiar los valores de una tupla Podemos utilizar la siguiente expresión r F1,F2 ,,Fl , (r ) Cada Fi es cualquier Es el i-ésimo atributo de r, en el caso de que este atributo no se vaya a actualizar o; en caso contrario, una expresión sólo con constantes y atributos de r que proporcionen el nuevo valor el atributo Ejemplos de actualización Hacer los pagos de intereses mediante el aumento de todos los saldos en un 5 por ciento. cuenta numero_cuenta, nombre_sucursal, saldo * 1.05 (cuenta) Fin del capitulo 2