Modelo Relacional TEMA 4: MODELO RELACIONAL 4.1 Introducción Los modelos Entidad-Relación y Relacional son representaciones abstractas de porciones del mundo real. Los dos modelos emplean principios de diseño similares, se puede convertir un diseño Entidad-Relación en un diseño relacional (se puede derivar el modelo relacional a partir de un diagrama Entidad-Relación). El modelo E-R, se considera un modelo conceptual ya que permite a un nivel alto ver con claridad la información utilizada en algún problema o negocio. En este capítulo nos centraremos en desarrollar un buen modelo "lógico" que se conoce como "esquema de la base de datos" (database schema) a partir del cual se podrá realizar el modelado físico en el DBMS, es importante mencionar que es un paso necesario, no se puede partir de un modelo conceptual para realizar un físico. El modelo relacional fue propuesto por Edgar Codd en 1970 en los laboratorios de IBM en California. Se trata de un modelo lógico, que establece una estructura sobre los datos, aunque posteriormente éstos puedan ser almacenados de múltiples formas para aprovechar características físicas concretas de la máquina sobre la que se implante la base de datos realmente. Es algo así como guardar unos libros en una biblioteca; dependiendo del número de salas de la biblioteca, del tamaño y forma de cada una de ellas, su número de estanterías, y en definitiva, de las características físicas del recinto, podremos disponer los libros de una forma u otra para hacer más cómoda y fácil su consulta y acceso. Los libros son los mismos, pero pueden ubicarse de muy distintas formas. 4.2 Objetivos del modelo relacional Independencia física. El modo en el que se almacenan los datos no influyen en su manipulación lógica y por tanto, los usuarios que acceden a esos datos no tienen que modificar sus programas por cambios en el almacenamiento físico. Independencia lógica. El añadir, eliminar o modificar objetos de la base de datos no repercute en los programas y/o usuarios que están accediendo a subconjuntos parciales de los mismos (vistas). Flexibilidad. En el sentido de poder presentar a cada usuario los datos de la forma en que esté prefiera. Uniformidad. Las estructuras lógicas de los datos presentan un aspecto uniforme, lo que facilita la concepción y manipulación de la base de datos por parte de los usuarios. Sencillez. Las características anteriores, así como los lenguajes de usuario muy sencillos, producen como resultado que el modelo de datos relacional sea fácil de comprender y de utilizar por parte del usuario final. 4.3 Estructura de las bases de Datos Relacionales Una base de datos relacional consiste en una colección de tablas, a cada una de las cuales se le asigna un nombre único. Cada fila de una tabla representa una relación entre un conjunto de valores. Dado que cada una de las tablas es una colección de dichas relaciones podemos ver a una tabla como un conjunto relación. La estructura de los datos del modelo relacional se basa, entonces, en el concepto de relación. 1 Modelo Relacional 4.3.1 Componentes del modelo y notación ⇒ Relación: En el modelo relacional, las relaciones se utilizan para almacenar información sobre los objetos que se representan en la base de datos. Una relación se representa gráficamente como una tabla bidimensional en la que las filas corresponden a registros individuales y las columnas corresponden a los campos o atributos de esos registros. Las tablas: • Representan tanto las entidades como las relaciones del modelo E-R. • Tienen la forma de una matriz rectangular bidimensional (filas y columnas). • Cada elemento o casilla de la matriz es un ítem de datos elemental. Es el mínimo elemento lógico de acceso y modificación. • Una columna representa un atributo de la entidad: o Debe tener un nombre único en cada tabla. o Cada atributo tiene asociado un espacio de valores o dominio. o Un valor nulo indica valor desconocido o no aplicable. o Su captura puede ser opcional (puede tomar valores nulos) u obligatoria. • Una fila o tupla representa un objeto del mundo real: o Nunca pueden estar duplicadas. o Es la mínima unidad de borrado. o Representa un registro lógico. o Su número varía según se realicen operaciones de inserción y borrado en la tabla. o Pueden estar dispuestas en cualquier orden. ⇒ Esquema: nombre de la relación y sus atributos. ⇒ Atributo: Es cada una de las columnas de la tabla las cuales, independientemente, brindan un nivel de especificación mayor a la tabla. Ejemplo: Cédula, Teléfono, Edad, Nombre, etc. Hay un atributo particular que se le llama atributo clave primaria, que sirve para identificar de manera única, a una tabla. Es decir, ninguna tabla tiene una tupla, cuyo atributo clave primaria, es igual al de otra tupla. ⇒ Tupla: Renglón de una relación que no es un encabezado. Debe tener un componente por cada atributo. Pueden considerarse como funciones de atributos a sus valores. Una variable t puede representar una tupla de una tabla o relación de modo que t є r indica que la tupla representada por la variable t está en la relación r. Ahora bien si u es el nombre de un atributo, t[u] representa un determinado valor para ese atributo. Sea la tabla Estudiante: no_carnet 01-00567-0 07-08976-0 08-09876-0 nombre Juan Pedro María edad 22 32 24 carrera Matemática Estadística Computación Tabla Estudiante 2 Modelo Relacional Entonces si t es una variable de tupla para esta relación o tabla tienen sentido las expresiones, t[no_carnte] = 07-08976-0, t[nombre] = Pedro, t[edad] = 32, t[narrera] = Estadística. ⇒ Dominio: Es el conjunto de valores que podría tomar cada uno de los atributos. Por ejemplo, en un atributo de tipo rh_sanguíneo, estos valores tendrían el siguiente dominio: A+, A-, B+, B-, AB+, AB-, O+, O. ⇒ Instancia de una relación: Conjunto de tuplas de la relación. 4.3.2 Esquema o estructura de una relación Es una lista compuesta de los nombres de sus atributos y sus correspondientes dominios. Ejemplo: Esquema o estructura de la relación Suc_Cliente: {Nombre_Sucursal: Cadena, Número_Cuenta: Entero, Nombre_Cliente: Cadena, Saldo:Decimal } 4.3.3 Lenguajes de Consulta Son aquellos lenguajes en que el usuario interroga o solicita información a la base de datos. En general estos lenguajes son normalmente de más alto nivel que los lenguajes estándar de programación o de uso general. Los lenguajes de consulta se clasifican en procedimentales y no procedimentales. En un lenguaje procedimental, el usuario indica al sistema que realice una secuencia de operaciones en la base de datos con el fin de obtener el resultado deseado. En un lenguaje no procedimental, el usuario describe la información deseada sin un procedimiento específico para obtener dicha información. En este modelo relacional se cuentan con lenguajes de los dos tipos así el Älgebra Relacional es Procedimental mientras que el Cálculo relacional de Tuplas y el cálculo relacional de Dominios son no procedimentales. 4.3.4 Álgebra Relacional El algebra relacional es un lenguaje de consulta procedimental. Consta de un conjunto de operaciones que toman como entrada una o dos relaciones y producen como resultado una nueva relación. Las operaciones fundamentales del álgebra relacional son: Selección (σ) Proyección (∏) Producto Cartesiano (x) Unión (U) Diferencia de conjuntos (-) Renombramiento (ρ). Además de las operaciones fundamentales hay otras operaciones, por ejemplo; Intersección de Conjuntos (∩), Reunión Natural (|X|), División (÷) y Asignación (<-). 3 Modelo Relacional 4.3.5 Operaciones fundamentales del Álgebra Relacional Las operaciones selección, proyección y renombramiento se denominan operaciones unarias porque operan sobre una sola relación. Las otras operaciones trabajan sobre pares de relaciones y se denominan, por tanto, operaciones binarias. 4.3.5.1 Operación Selección Esta operación permite seleccionar tuplas que satisfacen un predicado dado. Se utiliza la letra griega sigma minúscula (σ) para denotar la selección. El predicado aparece como subíndice de σ. La relación del argumento se da entre paréntesis a continuación de σ. Sean R una relación o tabla y sea cond una condición lógica sobre los atributos de R que determina un sub conjunto de R, entonces esta nueva relación o tabla se representa por: σcond (R). Ejemplo 1: Para seleccionar las tuplas de la relación “Cliente” en que la ciudad es “León” hay que escribir: σ ciudad_cliente=”León” (Cliente) Tabla Cliente id_cliente nombre_cliente calle_cliente ciudad_cliente 281-160482-0012G Carlos El Coyolar León 002-120367-0009P Carmen Ermita Masaya 281-130472-0016S Luis Rubén Darío Granada 281-160690-0034Y Luis Sutiava León 281-020565-0011F Carla El Coyolar León 001-151263-0010T Carlos Guadalupe Matagalpa 281-160482-0012G Ema El Calvario León 281-230273-0006D Guadalupe La Paz Boaco 001-161278-0015S Bruna El Coyolar León El resultado sería: id_cliente nombre_cliente calle_cliente ciudad_cliente 281-160482-0012G Carlos El Coyolar León 281-160690-0034Y Luis Sutiava León 281-020565-0011F Carla El Coyolar León 281-160482-0012G Ema El Calvario León 001-161278-0015S Bruna El Coyolar León Ejemplo 2: Para seleccionar las tuplas de la Relación “Préstamo” en que la Sucursal es “Subtiava” hay que utilizar la siguiente consulta: σ nombre_sucrusal=”Subtiava” (Prestamo) Relación Prestamo numero_prestamo nombre_sucursal importe P-11 Casa Salud de Bayle 900 P-14 Centro 1200 P-15 Centro 1500 P-16 La Fuente 2000 P-17 Subtiava 2100 P-23 Proquinsa 4500 4 Modelo Relacional P-93 Subtiava 2200 El resultado sería: numero_prestamo nombre_sucursal importe P-17 Subtiava 2100 P-93 Subtiava 2200 Para seleccionar todas las tuplas en las que el importe prestado sea mayor que C$ 2000 se puede escribir la siguiente consulta: σ importe>2000(Prestamo) El resultado sería: numero_prestamo P-17 P-23 P-93 nombre_sucursal Subtiava Proquinsa Subtiava importe 2200 4500 2200 En general se permiten las comparaciones que utilizan =,≠,<,<=,>,>= en el predicado de selección. Además se pueden combinar varios predicados en uno mayor utilizando las conectivas y (ˆ) y o (ˇ). Por ejemplo: Para encontrar las tuplas correspondientes a préstamos de más de C$2000 concedidos en la sucursal “Subtiava”, se escribe la siguiente consulta: σ nombre_sucursal = “Subtiava” ˆ importe>2000(Prestamo) El resultado sería: numero_prestamo nombre_sucursal importe P-17 Subtiava 2100 P-93 Subtiava 2200 El predicado de selección puede incluir comparaciones entre dos atributos. 4.3.5.2 Operación Proyección Permite extraer columnas (atributos) de una relación, dando como resultado un subconjunto vertical de atributos de la relación eliminando filas duplicadas en el resultado, esto es: . Donde son atributos de la relación R . Ejemplo: La consulta para crear una lista de todos los números de préstamo y del importe de los mismos puede escribirse de la siguiente manera: ∏ numero_prestamo, importe (Prestamo) El resultado sería: numero_prestamo P-11 P-14 P-15 P-16 P-17 P-23 P-93 5 importe 900 1200 1500 2000 2200 4500 2200 Modelo Relacional 4.3.5.3 Combinación de Operaciones Relacionales Dado que cada una de las operaciones básicas del Álgebra Relacional generan una relación es por tanto permisible aplicarlas en cualquier orden y las veces que sean necesarias para obtener el resultado deseado, así por ejemplo podemos realizar un producto cartesiano y a ese resultado aplicarle la operación de Selección y posteriormente la operación de Proyección. Es precisamente este hecho el que le da la potencia requerida a este lenguaje. Ejemplo: Encontrar los clientes que viven en León: ∏ nombre_cliente (σ ciudad_cliente=”León”(Cliente)) El resultado sería: nombre_cliente Carlos Luis Carla Ema Bruna Tomar en cuenta que, en vez de dar en el argumento de la operación proyección el nombre de una relación, se utiliza una expresión relacional que se evalúa como una relación. En general, dado que el resultado de una operación del álgebra relacional es del mismo tipo (relación) que los datos de entrada, las operaciones del álgebra relacional pueden componerse para formar una expresión del álgebra relacional. 4.3.5.4 Operación Unión Sean A, B dos relaciones, entonces A υ B es una nueva relación que consiste en la unión de conjunto de ambas relaciones, en otras palabras si una tupla t está en ambas relaciones solo aparecerá una sola vez en la relación A υ B. Ejemplo: Considerar la consulta para averiguar el nombre de todos los clientes del banco que tienen una cuenta, un préstamo o ambas cosas. Para contestar esta consulta hace falta la información de la relación “impositor” y de la relación “Prestatario”. Para averiguar los nombres de todos los clientes con préstamos en el banco: ∏nombre_cliente (Prestatario) Para averiguar los nombres de todos los clientes con cuenta en el banco: ∏ (Impositor) nombre_cliente Para dar solución a esta consulta hay que hacer la unión de estos dos conjuntos; es decir hacen falta todos los nombres de clientes que aparecen en alguna de las dos relaciones o en ambas. Estos datos se pueden obtener mediante la operación binaria unión. Por tanto la consulta sería: ∏nombre_cliente (Prestatario) U ∏ nombre_cliente (Impositor) 6 Modelo Relacional Relación Impositor nombre_cliente numero_cuenta Carlos C-102 Carlos C-101 Luis C-201 Ema C-217 Bruna C-222 Carla C-215 Guadalupe C-305 Relación Prestatario nombre_cliente numero_prestamo Carlos P-16 Carlos P-23 Luis P-15 Ema P-14 Bruna P-17 Carla P-11 Carla P-17 El resultado de la consulta sería: nombre_cliente Carlos Luis Carla Ema Bruna Guadalupe Para que una operación de Unión sea válida hay que exigir que se cumplan dos condiciones: Las relaciones r y s deben ser de la misma aridad. Es decir, deben tener el mismo número de atributos. Los dominios de los atributos i-ésimos de r y s deben ser iguales para todo i. 4.3.5.5 Operación Diferencia de Conjuntos La operación diferencia de conjuntos, denotada por “-” permite buscar las tuplas que estén en una relación pero no en la otra. La expresión r-s da como resultado una relación que contiene las tuplas que están en r pero en s. Ejemplo: Seleccionar todos los clientes del banco que tienen una cuenta pero no tienen concedido ningún préstamo. ∏ nombre_cliente (Impositor) - ∏nombre_cliente (Prestatario) El resultado sería: nombre_cliente Guadalupe Como en la operación de unión, hay que asegurarse de que las diferencias de conjuntos se realicen entre relaciones compatibles. Por tanto, para que la operación r-s sea válida hay que exigir que las relaciones r y s sean de la misma aridad y que los dominios de los atributos i-ésimos de r y s sean iguales. 7 Modelo Relacional 4.3.5.6 Operación Producto Cartesiano El producto cartesiano A x B donde A y B son relaciones, genera una nueva relación con las siguientes particularidades: Conjunto de Atributos de A x B = Conjunto de atributos de A υ Conjunto de atributos de B En cuanto al número de tuplas o filas de A x B, estas se obtienen combinando cada fila de A con todas las de B de modo que si A tiene N filas y B tiene M filas el número de filas de A x B es N x M. Este es un operador binario, se aplica a dos relaciones y el resultado es otra relación. El resultado es una relación que contendrá todas las combinaciones de las tuplas de los dos operandos. Esto es: si partimos de dos relaciones, R y S, cuyos grados son n y m, y cuyas cardinalidades a y b, la relación producto tendrá todos los atributos presentes en ambas relaciones, por lo tanto, el grado será n+m. Además la cardinalidad será el producto de a y b. Para ver un ejemplo usaremos dos tablas: tabla1(id, nombre, apellido) tabla2(id, número) tabla1 apellido id nombre 15 Fulginio Liepez 26 Cascanio Suanchiez tabla2 id número 15 12345678 26 21222112 15 66525425 El resultado del producto cartesiano de tabla1 y tabla2: tabla1 x tabla2 es: tabla1 x tabla2 id nombre apellido id número 15 Fulginio Liepez 15 12345678 26 Cascanio Suanchiez 15 12345678 15 Fulginio Liepez 26 21222112 26 Cascanio Suanchiez 26 21222112 15 Fulginio Liepez 15 66525425 26 Cascanio Suanchiez 15 66525425 Ejemplo 2: Supongáse que se desea averiguar los nombres de todos los clientes que tienen concedido un préstamo en la sucursal “León”. Recuérdese que el producto cartesiano toma todos los emparejamientos posibles de una tupla de Prestatario con una tupla de Préstamo. 8 Modelo Relacional σ nombre_sucursal=”Subtiava”(Prestatario 4.3.5.7 X Préstamo) Definición formal del álgebra relacional Las expresiones fundamentales del álgebra relacional se componen de: 1. Una relación de la base de datos. 2. Una relación constante. Una relación constante se escribe listando sus tuplas entre llaves ({}). Por ejemplo: {(Carlos,P-16),(Carlos,P-23)….} Las expresiones generales del álgebra relacional se construyen a partir de subexpresiones menores. Sean E1 y E2 expresiones del álgebra relacional: E1 U E2 E1 - E2 E1 X E2 σp(E1), donde P es un predicado de atributos de E1 ∏S(E1), donde S es una lista que se compone de algunos de los atributos de E1 ρx(E1), donde X es el nuevo nombre del resultado de E1 9