Capitulo 2 - Modelo Relacional

download Capitulo 2 - Modelo Relacional

of 33

description

-

Transcript of Capitulo 2 - Modelo Relacional

P A R T E

1

Bases de datos relacionales

Un modelo de datos es un conjunto de herramientas conceptuales para la descripcin de los datos, las relaciones entre ellos, su semntica y las restricciones de consistencia. Esta parte centra la atencin en el modelo relacional. El modelo relacional utiliza un conjunto de tablas para representar tanto los datos como las relaciones entre ellos. Su simplicidad conceptual ha conducido a su adopcin generalizada; actualmente, una amplia mayora de los productos de bases de datos se basan en el modelo relacional. En la Parte 9 se expone una visin general de cuatro sistemas de bases de datos relacionales muy utilizados. Aunque el modelo relacional, que se trata en el Captulo 2, describe los datos en los niveles lgico y de vistas, es un modelo de datos de nivel inferior comparado con el modelo entidad-relacin, que se explica en la Parte 2. Para poner a disposicin de los usuarios los datos de una base de datos relacional hay que abordar varios aspectos. Uno de ellos es determinar uno de los distintos lenguajes de consultas para expresar las peticiones de datos. Los Captulos 3 y 4 tratan el lenguaje SQL, que es el lenguaje de consultas ms utilizado hoy en da. El Captulo 5 trata en primer lugar dos lenguajes de consultas formales, el clculo relacional de tupias y el clculo relacional de dominios, que son lenguajes declarativos basados en la lgica matemtica. Estos dos lenguajes formales constituyen la base de un lenguaje ms amigable para los usuarios: QBE, que se estudia en ese captulo. Otro aspecto es la integridad y la proteccin de los datos; las bases de datos deben proteger sus datos del dao que puedan causar las acciones de los usuarios, sean involuntarias o intencionadas. El componente de mantenimiento de la integridad de la base de datos garantiza que las actualizaciones no violen las restricciones de integridad que se hayan especificado para los datos. El componente de proteccin de la base de datos incluye el control de acceso para restringir las acciones permitidas a cada usuario. El Captulo 4 trata los problemas de integridad y de proteccin. Los problemas de proteccin y de integridad estn presentes independientemente del modelo de datos pero, en aras de la concrecin, se estudiarn en el contexto del modelo relacional.

El modelo relacional es hoy en da el principal modelo de datos para las aplicaciones comerciales de procesamiento de datos. Ha conseguido esa posicin destacada debido a su simplicidad, lo cual facilita el trabajo del programador en comparacin con modelos anteriores, como el de red y el jerrquico. En este captulo se estudian en primer lugar los fundamentos del modelo relacional. A continuacin se describe el lgebra relacional, que se usa para especificar las solicitudes de informacin. El lgebra relacional no es cmoda de usar, pero sirve de base formal para lenguajes de consultas que s lo son y que se estudiarn ms adelante, incluido el ampliamente usado lenguaje de consultas SQL, el cual se trata con detalle en los Captulos 3 y 4. Existe una ampla base terica para las bases de datos relacinales. En este captulo se estudia la parte de esa base terica referida a las consultas. En los Captulos 6 y 7 se examinarn aspectos de la teora de las bases de datos relacionales que ayudan en el diseo de esquemas de bases de datos relacionales.

2.1 La estructura de las bases de datos relacionalesUna base de datos relacional consiste en un conjunto de tablas, a cada una de las cuales se le asigna un nombre exclusivo. Cada fila de la tabla representa una relacin entre un conjunto de valores. De manera informal, cada tabla es un conjunto de entidades, y cada fila es una entidad, tal y como se estudi en el Captulo 1. Dado que cada tabla es un conjunto de tales relaciones, hay una fuerte correspondencia entre el concepto de tabla y el concepto matemtico de relacin, del que toma su nombre el modelo de datos relacional. A continuacin se introduce el concepto de relacin. En este captulo se usarn varias relaciones diferentes para ilustrar los diversos conceptos subyacentes al modelo de datos relacional. Estas relaciones representan parte de una entidad bancaria. Puede que no se correspondan con el modo en que se pueda estructurar realmente una base de datos bancaria, pero as se simplificar la presentacin. Los criterios sobre la adecuacin de las estructuras relacinales se estudian con gran detalle en los Captulos 6 y 7.

2.1.1 Estructura bsicaConsidrese la tabla cuenta de la Figura 2.1. Tiene tres cabeceras de columna: nmero_cuenta, nombre _sucursal y saldo. Siguiendo la terminologa del modelo relacional, se puede hacer referencia a estas cabeceras como atributos. Para cada atributo hay un conjunto de valores permitidos, denominado dominio de ese atributo. Para el atributo nombre_sucursal, por ejemplo, el dominio es el conjunto de todos los nombres de sucursal. Supngase que Di denota el conjunto de todos los nmeros de cuenta, D2 el conjunto de todos los nombres de sucursal y D3 el conjunto de todos los saldos. Todas las filas de cuenta deben consistir en una tupia (v\, u2, vz)> donde v\ es un nmero de cuenta (es decir, v\ est en29

)

Captulo 2

El modelo relacional

nmero_cuenta C-101 C-102 C-201 C-215 C-217 C-222 C-305

nombre_sucursal Centro Navacerrada Galapagar Becerril Galapagar Moralzarzal Collado Mediano

Saldo 500 400 900 700 750 700 350

Figura 2.1

La relacin cuenta.

el dominio Di), v2 es un nombre de sucursal (u2 en D2) y v3 es un saldo (v3 en D5). En general, cuenta slo contendr un subconjunto del conjunto de todas las filas posibles. Por tanto, cuenta ser un subconjunto de Dx x D2 x D3 En general, una tabla de n atributos debe ser un subconjunto de Di x D2 x x Dn_i x Dn Los matemticos definen las relaciones como subconjuntos del producto cartesiano de la lista de dominios. Esta definicin se corresponde de manera casi exacta con la definicin de tabla dada anteriormente. La nica diferencia es que aqu se han asignado nombres a los atributos, mientras que los matemticos slo usan "nombres" numricos, usando el entero 1 para denotar el atributo cuyo dominio aparece en primer lugar de la lista de dominios, 2 para el atributo cuyo dominio aparece en segundo lugar, etc. Como las tablas son, esencialmente, relaciones, se usarn los trminos matemticos relacin y tupia en lugar de los trminos tabla y fila. Una variable tupia es una variable que representa una tupia; en otras palabras, una variable tupia es una variable cuyo dominio es el conjunto de todas las tupias. En la relacin cuenta de la Figura 2.1 hay siete tupias. Supngase que la variable tupia t hace referencia a la primera tupla de la relacin. Se usa la notacin t[nmero_cuenta] para denotar el valor de t en el atributo nmero_cuenta. Por tanto, t[nmero_cuenta] = "C-101" y t[nombre_sucursal] = "Centro". De manera alternativa, se puede escribir t[1] para denotar el valor de la tupia en el primer atributo (numero _cuenta), [2] para denotar nombre_sucursal, etc. Dado que las relaciones son conjuntos de tupias, se usa la notacin matemtica r para denotar que la tupla t est en la relacin r. El orden en que aparecen las tuplas en cada relacin es irrelevante, dado que una relacin es un conjunto de tupias. Por tanto, no importa si las tupias de una relacin aparecen ordenadas, como en la Figura 2.1, o desordenadas, como en la Figura 2.2; las relaciones de las dos figuras son la misma, ya que las dos contienen el mismo conjunto de tupias. Se exige que, para todas las relaciones r, los dominios de todos los atributos de r sean atmicos Un dominio es atmico si los elementos del dominio se consideran unidades indivisibles. Por ejemplo el conjunto de los enteros es un dominio atmico, pero el conjunto de todos los conjuntos de enteros Nmero_cuenta C-101 C-215 C-102 C-305 C-201 C-222 C-217 Figura 2.2 Nombre_sucursal Centro Becerril Navacerrada Collado Mediano Galapagar Moralzarzal Galapagar saldo 500 700 400 350 900 700 750

La relacin cuenta con las tupias desordenadas.

2.1

La estructura de las bases de datos relacinales

31

es un dominio no atmico. La diferencia es que no se suele considerar que los enteros tengan partes constituyentes, pero s se considera que los conjuntos de enteros las tienen; por ejemplo, los enteros que forman cada conjunto. Lo importante no es lo que sea el propio dominio, sino la manera en que se usan los elementos del dominio en la base de datos. El dominio de todos los enteros sera no atmico si se considerara que cada entero es una lista ordenada de cifras. En todos los ejemplos se supondr que los dominios son atmicos. En el Captulo 9 se estudiarn extensiones al modelo de datos relacional para permitir dominios no atmicos. Es posible que varios atributos tengan el mismo dominio. Por ejemplo, supngase la relacin cliente con los tres atributos nombre_cliente, calle_cliente y ciudad_cliente y una relacin empleado con el atributo nombre_empleado. Es posible que los atributos nombre__cliente y nombre_empleado tengan el mismo dominio, el conjunto de todos los nombres de persona, que en el nivel fsico es el conjunto de todas las cadenas de caracteres. Los dominios de saldo y nombre_sucursal, por otra parte, deberan ser distintos. Quizs sea menos evidente si nombre_cliente y nombre_sucursal deberan tener el mismo dominio. En el nivel fsico, tanto los nombres de los clientes como los nombres de las sucursales son cadenas de caracteres. Sin embargo, en el nivel lgico puede que se desee que nombrejdiente y nombre_sucursal tengan dominios diferentes. Un valor de dominio que es miembro de todos los dominios posibles es el valor nulo, que indica que el valor es desconocido o no existe. Por ejemplo, supngase que se incluye el atributo nmero_telfono en la relacin cliente. Puede ocurrir que algn cliente no tenga nmero de telfono, o que su nmero de telfono no figure en la gua. Entonces habr que recurrir a los valores nulos para indicar que el valor es desconocido o que no existe. Ms adelante se ver que los valores nulos crean algunas dificultades cuando se tiene acceso a la base de datos o se la actualiza y que, por tanto, deben eliminarse si es posible. Se supondr inicialmente que no hay valores nulos y en el Apartado 2.5 se describir el efecto de los valores nulos en las diferentes operaciones.

2.1.2 Esquema de la base de datosCuando se habla de bases de datos se debe diferenciar entre el esquema de la base de datos, que es el diseo lgico de la misma, y el ejemplar de la base de datos, que es una instantnea de los datos de la misma en un momento dado. El concepto de relacin se corresponde con el concepto de variable de los lenguajes de programacin. El concepto de esquema de la relacin se corresponde con el concepto de definicin de tipos de los lenguajes de programacin. Resulta conveniente dar nombre a los esquemas de las relaciones, igual que se dan nombres a las definiciones de los tipos en los lenguajes de programacin. Se adopta el convenio de usar nombres en minsculas para las relaciones y nombres que comiencen por una letra mayscula para los esquemas de las relaciones. Siguiendo esta notacin se usar Esquema_cuenta para denotar el esquema de la relacin cuenta. Por tanto, Esquema_cuenta = {nmero_cuenta, nombre_sucursal, saldo) Se denota el hecho de que cuenta es una relacin de Esquema_cuenta mediantecuenta {Esquema_cuenta)

En general, los esquemas de las relaciones consisten en una lista de los atributos y de sus dominios correspondientes. La definicin exacta del dominio de cada atributo no ser relevante hasta que se estudie el lenguaje SQL en los Captulos 3 y 4. El concepto de ejemplar de la relacin se corresponde con el concepto de valor de una variable en los lenguajes de programacin. El valor de una variable dada puede cambiar con el tiempo; de manera parecida, el contenido del ejemplar de una relacin puede cambiar con el tiempo cuando la relacin se actualiza. Sin embargo, se suele decir simplemente "relacin" cuando realmente se quiere decir "ejemplar de la relacin". Como ejemplo de ejemplar de una relacin, considrese la relacin sucursal de la Figura 2.3. El esquema de esa relacin es

32

Captulo 2

El modelo relacional

nombre_sucursal Becerril Centro Collado Mediano Galapagar Moralzarzal Navacerrada Navas de la Asuncin Segovia

ciudad_sucursal Aluche Arganzuela Aluche Arganzuela La Granja Aluche Alcal de Henares Cerceda

activos 400.000 9.000.000 8.000.000 7.100.000 2.100.000 1.700.000 300.000 3.700.000

Figura 2.3

La relacin sucursal.

Esquema_sucursal = (nombre_sucursal, ciudad_sucursal, activos) Obsrvese que el atributo nombre_sucursal aparece tanto en Esquema_sucursal como en Esquema_cuen-ta. Esta duplicidad no es una coincidencia. Ms bien, usar atributos comunes en los esquemas de las relaciones es una manera de relacionar las tupias de relaciones diferentes. Por ejemplo, supngase que-se desea obtener informacin sobre todas las cuentas abiertas en sucursales ubicadas en Arganzuela Primero se busca en la relacin sucursal para encontrar los nombres de todas las sucursales situadas en Arganzuela. A continuacin y para cada una de ellas, se examina la relacin cuenta para encontrar la informacin sobre las cuentas abiertas en esa sucursal. Siguiendo con el ejemplo bancario, se necesita una relacin que describa informacin sobre los clien tes. El esquema de la relacin es: Esquema_cliente = (nombre_clienter calle_cliente, ciudad_cliente) La Figura 2.4 muestra un ejemplo de la relacin cliente (Esquema_cliente). Obsrvese que se ha omitida el atributo id_cliente, que se us en el Captulo 1, ya que se considerarn esquemas de relacin mas pequeos en nuestro ejemplo de una base de datos bancaria. Se da por supuesto que el nombre de cliente identifica unvocamente a cada clienteobviamente, puede que esto no sea cierto en el mundo real, pero la suposicin hace los ejemplos ms sencillos de entender. En una base de datos del mundo real, id_cliente (que podra ser ntimero__seguridad_social o un identificador generado por el banco) serviria para identificar unvocamente a los clientes. Tambin se necesita una relacin que describa la asociacin entre los clientes y las cuentas. El esquema de la relacin que describe esta asociacin es: Esquema_impositor = (nombre_cliente, nmero_cuenta) nombre-cliente Abril Amo Badorrey Fernndez Gmez Gonzlez Lpez Prez Rodrguez Ruprez Santos Valdivieso calle_liente Preciados Embajadores Delicias Jazmn Carretas Arenal Mayor Carretas Yeseras Ramblas Mayor Goya Figura 2.4 ciudad-diente Valsan Arganzuela Valsan Len Cerceda La Granja Peguerinos Cerceda Cdiz Len Peguerinos Vigo

La relacin cliente.

2.1

La estructura de las bases de datos relacinales

33

nombre-cliente Abril Gmez Gonzlez Gonzlez Lpez Ruprez Santos Figura 2.5

nmero-cuenta C-305 C-215 C-101 C-201 C-102 C-222 C-217

La relacin impositor.

La Figura 2.5 muestra un ejemplo de la relacin impositor {Esquema_impositor). Puede parecer que para este ejemplo bancario se podra tener slo un esquema de relacin, en vez de tener varios. Es decir, puede resultar ms sencillo para el usuario pensar en trminos de un nico esquema de relacin, en lugar de en varios esquemas. Supngase que slo se usara una relacin para el ejemplo, con el esquema (nombre_sucursal, ciudad_sucursal, activos, nombre_cliente, calle_cliente ciudad_cliente, nmero_cuenta, saldo) Obsrvese que, si un cliente tiene varias cuentas, hay que repetir su direccin una vez por cada cuenta. Es decir, hay que repetir varias veces parte de la informacin. Esta repeticin malgasta espacio, pero se evita mediante el empleo de varias relaciones mostradas anteriormente. Adems, si una sucursal no tiene ninguna cuenta (por ejemplo, una sucursal recin abierta que todava no tenga clientes), no se puede construir una tupia completa en la relacin nica anterior, dado que no hay todava ningn dato disponible referente a cliente ni a cuenta. Para representar las tupias incompletas hay que usar valores nulos que indiquen que ese valor es desconocido o no existe. Por tanto, en el ejemplo presente, los valores de nombre_cliente, calle_cliente, etc., deben ser nulos. Al emplear varias relaciones se puede representar la informacin de las sucursales del banco sin clientes sin necesidad de valores nulos. Se usa simplemente una tupia en Esquema_sucursal para representar la informacin de la sucursal, y slo se crean tupias en los otros esquemas cuando est disponible la informacin correspondiente. En el Captulo 7 se estudiarn los criterios para decidir cundo un conjunto de esquemas de relaciones es ms adecuado que otro en trminos de repeticin de la informacin y de la existencia de valores nulos. Por ahora se supondr que los esquemas de las relaciones vienen dados de antemano. Se incluyen dos relaciones ms para describir los datos de los prstamos concedidos en las diferentes sucursales del banco: Esquemajprstamo = (nmero_prstamo, nombre_sucursal, importe) Esquemajprestatario = (nombre_cliente, nmero_prstamo) Las Figuras 2.6 y 2.7, respectivamente, muestran las relaciones de ejemplo prstamo (Esquema_prstamo) y prestatario (Esquema_prestatario). Los esquemas de relacin se corresponden con el conjunto de tablas que podran generarse con el mtodo descrito en el Apartado 1.6. Obsrvese que la relacin cliente puede contener informacin sobre clientes que no tengan ni cuenta ni prstamo en el banco. La entidad bancaria aqu descrita servir como ejemplo principal en este captulo. Cuando sea necesario, habr que introducir ms esquemas de relaciones para ilustrar casos concretos.

2.1.3 ClavesEs necesario disponer de un modo de especificar la manera en que las tupias de una relacin dada se distingan entre s. Esto se expresa en trminos de sus atributos. Es decir, los valores de los valores de los atributos de una tupia deben ser tales que puedan identificarla unvocamente. En otras palabras, no

Captulo 2

El modelo relacional

nmero-prstamo P-11 P-14 P-15 P-16 P-17 P-23 P-93

nombre_sucursal Collado Mediano Centro Navacerrada Navacerrada Centro Moralzarzal Becerril

importe 900 1.500 1.500 1.300 1.000 2.000 500 Figura 2.6 La relacin prstamo.

se permite que dos tupias de una misma relacin tengan exactamente los mismos valores en todos SUS atributos. Una superclave es un conjunto de uno o varios atributos que, considerados conjuntamente, permiten identificar de manera unvoca una tupia de la relacin. Por ejemplo, el atributo id_cliente de la relacin cliente es suficiente para distinguir una tupia cliente de otra. Por tanto, id_cliente es una superclave. De manera parecida, la combinacin de nombre_clente e id_cliente constituye una superclave para la relacin cliente. El atributo nombre_cliente de cliente no es una superclave, ya que es posible que varias personas se llamen igual. El concepto de superclave no es suficiente para nuestros propsitos, ya que, como se ha podido ver las superclaves pueden contener atributos innecesarios. Si C es una superclave, entonces tambin lo es cualquier superconjunto de C. A menudo resultan interesantes superclaves para las que ninguno de sus subconjuntos constituya una superclave. Esas superclaves mnimas se denominan claves candidatas. Es posible que varios conjuntos diferentes de atributos puedan ejercer como claves candidatas. Su pngase que una combinacin de nombre_cliente y de calle_cliente sea suficiente para distinguir entre los miembros de la relacin cliente. Entonces, tanto {id_cliente\ como {nombre_cliente, calle_cliente) son clave candidatas. Aunque los atributos idjzliente y nombre_cliente en conjunto pueden diferenciar las tuplas cliente, su combinacin no forma una clave candidata, ya que el atributo idj_cliente por s solo ya lo es. Se usar el trmino clave primaria para denotar una clave candidata que ha elegido el diseador de la base de datos como medio principal para la identificacin de las tupias de una relacin. Las claves (sean primarias, candidatas o superclaves) son propiedades de toda la relacin, no de cada una de las tuplas Ninguna pareja de tupias de la relacin puede tener simultneamente el mismo valor de los atributo de la clave. La seleccin de una clave representa una restriccin de la empresa del mundo real que se est modelando. Las claves candidatas deben escogerse con cuidado. Como se ha indicado, el nombre de una persona evidentemente no es suficiente, ya que puede haber mucha gente con el mismo nombre. En Estado Unidos el atributo nmero de la seguridad social de cada persona sera clave candidata. Dado que lo residentes extranjeros no suelen tener nmero de la seguridad social, las empresas internacionales deben generar sus propios identificadores unvocos. Una alternativa es usar como clave alguna combinacin exclusiva de otros atributos.

nombre-cliente Fernndez Gmez Gmez Lpez Prez Santos Sofoca Valdivieso Figura 2.7

nmero-prstamo P-16 P-11 P-23 P-15 P-93 P-17 P-14 P-17 La relacin prestatario.

2.1

La estructura de las bases de datos relacinales

35

La clave primaria debe escogerse de manera que los valores de sus atributos no se modifiquen nunca, o muy rara vez. Por ejemplo, el campo domicilio de una persona no debe formar parte de la clave primaria, ya que es probable que se modifique. Por otra parte, est garantizado que los nmeros de la seguridad social no cambian nunca. Los identificadores exclusivos generados por las empresas no suelen cambiar, salvo si se produce una fusin entre dos de ellas; en ese caso, puede que el mismo identificador haya sido emitido por ambas empresas, y puede ser necesaria una reasignacin de identificadores para garantizar que sean nicos. Formalmente, sea R el esquema de una relacin. Si se dice que un subconjunto C de R es una superclave de R, se restringe la consideracin a las relaciones r(R) en las que no hay dos tupias diferentes que tengan los mismos valores en todos los atributos de C. Es decir, si t1 y t2 estn en r y , entonces h[C] t2[C). El esquema de una relacin, por ejemplo r\, puede incluir entre sus atributos la clave primaria de otro esquema de relacin, por ejemplo r2. Este atributo se denomina clave externa de r1 que hace referencia a r2. La relacin r1 tambin se denomina relacin referenciante de la dependencia de clave externa, y r2 se denomina relacin referenciada de la clave externa. Por ejemplo, el atributo nombre_sucursal de Esquema_cuenta es una clave externa de Esquema_cuenta que hace referencia a Esquema_sucursal, ya que nombre__sucursal es la clave primaria de Esqueuema_sucursal. En cualquier ejemplar de la base de datos, dada cualquier tupia, por ejemplo ta, de la relacin cuenta, debe haber alguna tupia, por ejemplo h, en la relacin sucursal tal que el valor del atributo nombre_sucursal de ta sea el mismo que el valor de la clave primaria de tb nombre_sucursal. Es costumbre relacionar los atributos de la clave primaria de un esquema de relacin antes que el resto de los atributos; por ejemplo, el atributo nombre_sucursal de Esquema_sucursal se relaciona en primer lugar, ya que es la clave primaria. El esquema de la base de datos, junto con las dependencias de clave primaria y externa, se puede mostrar grficamente mediante diagramas de esquema. La Figura 2.8 muestra el diagrama de esquema del ejemplo bancario. Cada relacin aparece como un cuadro con los atributos relacionados en su interior y el nombre de la relacin sobre l. Si hay atributos de clave primaria, una lnea horizontal cruza el cuadro con los atributos de clave primaria por encima de ella y sobre fondo gris. Las dependencias de clave externa aparecen como flechas desde los atributos de clave externa de la relacin referenciante a la clave primaria de la relacin referenciada. Muchos sistemas de bases de datos proporcionan herramientas de diseo con una interfaz grfica de usuario para la creacin de los diagramas de esquema.

2.1.4 Lenguajes de consultasUn lenguaje de consultas es un lenguaje en el que los usuarios solicitan informacin de la base de datos. Estos lenguajes suelen ser de un nivel superior que el de los lenguajes de programacin habituales. Los lenguajes de consultas pueden clasificarse como procedimentales o no procedimentales. En los lenguajes procedimentales el usuario indica al sistema que lleve a cabo una serie de operaciones en la base

Figura 2.8

Diagrama del esquema de la entidad bancaria.

2.1

La estructura de las bases de datos relacinales

35

La clave primaria debe escogerse de manera que los valores de sus atributos no se modifiquen nunca, o muy rara vez. Por ejemplo, el campo domicilio de una persona no debe formar parte de la clave primaria, ya que es probable que se modifique. Por otra parte, est garantizado que los nmeros de la seguridad social no cambian nunca. Los identificadores exclusivos generados por las empresas no suelen cambiar, salvo si se produce una fusin entre dos de ellas; en ese caso, puede que el mismo identificador haya sido emitido por ambas empresas, y puede ser necesaria una reasignacin de identificadores para garantizar que sean nicos. Formalmente, sea R el esquema de una relacin. Si se dice que un subconjunto C de R es una superclave de R, se restringe la consideracin a las relaciones r(R) en las que no hay dos tupias diferentes que tengan los mismos valores en todos los atributos de C. Es decir, si t1 y t2 estn en r y t1 ^ t2/ entonces t1[C] t2[C]. El esquema de una relacin, por ejemplo r1, puede incluir entre sus atributos la clave primaria de otro esquema de relacin, por ejemplo r2. Este atributo se denomina clave externa de r\, que hace referencia a r2. La relacin r1 tambin se denomina relacin referenciante de la dependencia de clave externa, y r2 se denomina relacin referenciada de la clave externa. Por ejemplo, el atributo nombre__sucursal de Esquema_cuenta es una clave externa de Esquema_cuenta que hace referencia a Esquema_sucursal, ya que nombre_sucursal es la clave primaria de Esquema_sucursal. En cualquier ejemplar de la base de datos, dada cualquier tupia, por ejemplo ta, de la relacin cuenta, debe haber alguna tupia, por ejemplo tb, en la relacin sucursal tal que el valor del atributo nombre_sucursal de ta sea el mismo que el valor de la clave primaria de tb nombre_sucursal. Es costumbre relacionar los atributos de la clave primaria de un esquema de relacin antes que el resto de los atributos; por ejemplo, el atributo nombre_sucursal de Esquema_sucursal se relaciona en primer lugar, ya que es la clave primaria. El esquema de la base de datos, junto con las dependencias de clave primaria y externa, se puede mostrar grficamente mediante diagramas de esquema. La Figura 2.8 muestra el diagrama de esquema del ejemplo bancario. Cada relacin aparece como un cuadro con los atributos relacionados en su interior y el nombre de la relacin sobre l. Si hay atributos de clave primaria, una lnea horizontal cruza el cuadro con los atributos de clave primaria por encima de ella y sobre fondo gris. Las dependencias de clave externa aparecen como flechas desde los atributos de clave externa de la relacin referenciante a la clave primaria de la relacin referenciada. Muchos sistemas de bases de datos proporcionan herramientas de diseo con una interfaz grfica de usuario para la creacin de los diagramas de esquema.

2.1.4 Lenguajes de consultasUn lenguaje de consultas es un lenguaje en el que los usuarios solicitan informacin de la base de datos. Estos lenguajes suelen ser de un nivel superior que el de los lenguajes de programacin habituales. Los lenguajes de consultas pueden clasificarse como procedimentales o no procedimentales. En los lenguajes procedimentales el usuario indica al sistema que lleve a cabo una serie de operaciones en la base

Figura 2.8

Diagrama del esquema de la entidad bancaria.

36

Captulo 2

El modelo relacional

de datos para calcular el resultado deseado. En los lenguajes no procedimentales el usuario describe la informacin deseada sin dar un procedimiento concreto para obtener esa informacin. La mayor parte de los sistemas comerciales de bases de datos relacinales ofrecen un lenguaje de consultas que incluye elementos de los enfoques procedimental y no procedimental. Se estudiar el muy usado lenguaje de consultas SQL en los Captulos 3 y 4. El Captulo 5 trata el lenguaje de consultas QBE. Existen varios lenguajes de consultas "puros": el lgebra relacional es procedimental mientras que el clculo relacional de tupias y el clculo relacional de dominios no lo son. Estos lenguajes de consulta son rgidos y formales, y carecen del "azcar sintctico" de los lenguajes comerciales, pero ilustran las tcnicas fundamentales para la extraccin de datos de las bases de datos. En este captulo se examina con gran detalle el lenguaje del lgebra relacional (en el Captulo 5 se tratan los lenguajes del clculo relacional de tupias y del clculo relacional de dominios). El lgebra re lacional consiste en un conjunto de operaciones que toman una o dos relaciones como entrada y generan otra relacin nueva como resultado. Las operaciones fundamentales del lgebra relacional son seleccin, proyeccin, unin, diferencia de con juntos, producto cartesiano y renombramiento. Adems de las operaciones fundamentales hay otras operacionespor ejemplo, interseccin de conjuntos, reunin natural, divisin y asignacin. Estas operaciones se definirn en trminos de las operaciones fundamentales. Inicialmente slo se estudiarn las consultas. Sin embargo, un lenguaje de manipulacin de datos completo no slo incluye un lenguaje de consultas, sino tambin un lenguaje para la modificacin de las bases de datos. Este tipo de lenguajes incluye comandos para insertar y borrar tupias, as como para modificar partes de las tupias existentes. Las modificaciones de las bases de datos se examinaran despus de completar la discusin sobre las consultas.

2.2 Operaciones fundamentales del lgebra relacionalLas operaciones seleccin, proyeccin y renombramiento se denominan operaciones unaras porque operan sobre una sola relacin. Las otras tres operaciones operan sobre pares de relaciones y se denominan por tanto, operaciones binaras.

2.2.1 Operacin seleccinLa operacin seleccin selecciona tupias que satisfacen un predicado dado. Se usa la letra griega siga minscula (a) para denotar la seleccin. El predicado aparece como subndice de a. La relacin de argu mentos se da entre parntesis a continuacin de a. Por tanto, para seleccionar las tupias de la relacion prstamo en que la sucursal es "Navacerrada" se escribe nombre__sucursal = "Navacerrada"( prestamo) t Si la relacin prstamo es como se muestra en la Figura 2.6, la relacin que resulta de la consulta antena es como aparece en la Figura 2.9.

nmero_prstamo nombre_sucursal P-15 Navacerrada P-16 Navacerrada

importe 1.500 1.300

2.2

Operaciones fundamentales del lgebra relacional

37

Se pueden buscar todas las tuplas en las que el importe prestado sea mayor que 1.200 escribiendo la siguiente consulta: importe> 1200 (prstamo) En general, se permiten las comparaciones que usan =, = , en el predicado de seleccin. Adems, se pueden combinar varios predicados en uno mayor usando las conectivas y (A), o (V) y no {-). Por tanto, para encontrar las tupias correspondientes a prstamos de ms de 1.200 concedidos por la sucursal de Navacerrada, se escribe nombre_sucursal = "Navacerrada" importe> 1200 (prestamo) El predicado de seleccin puede incluir comparaciones entre dos atributos. Para ilustrarlo, considrese la relacin responsable_prstamo, que consta de tres atributos: nombre_cliente, nombre_responsable y nmero_prstamo, que especifica que un empleado concreto es el responsable del prstamo concedido a un cliente. Para hallar todos los clientes que se llaman igual que su responsable de prstamos se puede escribir nombre._cliente = nombre_responsable (responsable_prestamo)

2.2.2 Operacin proyeccinSupngase que se desea obtener una relacin de todos los nmeros e importes de los prstamos, pero sin los nombres de las sucursales. La operacin proyeccin permite obtener esa relacin. La operacin proyeccin es una operacin unaria que devuelve su relacin de argumentos, excluyendo algunos argumentos. Dado que las relaciones son conjuntos, se eliminan todas las filas duplicadas. La proyeccin se denota por la letra griega mayscula pi (II). Se crea una lista de los atributos que se desea que aparezcan en el resultado como subndice de II. Su nico argumento, una relacin, se escribe a continuacin entre parntesis. La consulta para crear una lista de todos los nmeros e importes de los prstamos puede escribirse como

II-nmero_prstamo,importe (prstamo)La Figura 2.10 muestra la relacin que resulta de esta consulta.

2.2.3 Composicin de operaciones relacinalesEs importante el hecho de que el resultado de una operacin relacional sea tambin una relacin. Considrese la consulta ms compleja "Buscar los clientes que viven en Peguerinos". Hay que escribir:

II-nombre_cliente ( ciudad_cliente = "Peguerinos" y (Cliente))Tngase en cuenta que, en vez de dar el nombre de una relacin como argumento de la operacin proyeccin, se da una expresin cuya evaluacin es una relacin. En general, dado que el resultado de las operaciones del lgebra relacional es del mismo tipo (relacin) que los datos de entrada, las operaciones del lgebra relacional pueden componerse para formar Nmero-prstamo importe P-ll 900 1.500 P-14 P-15 1.500 P-16 1.300 P-17 1.000 P-23 2.000 P-93 500 Figura 2.10 Nmeros e importes de los prstamos.

Captulo 2

El modelo relacional

una expresin del lgebra relacional. Componer operaciones del lgebra relacional para formar expresiones del lgebra relacional es igual que componer operaciones aritmticas (como +, , * y ) para formar expresiones aritmticas. La definicin formal de las expresiones de lgebra relacional se estudia en el Apartado 2.2.8.

2.2.4 Operacin uninConsidrese una consulta para determinar el nombre de todos los clientes del banco que tienen una cuenta, un prstamo o ambas cosas. Obsrvese que la relacin cliente no contiene esa informacin, dado que los clientes no necesitan tener ni cuenta ni prstamo en el banco. Para contestar a esta consulta hace falta la informacin de las relaciones mpositor (Figura 2.5) y prestatario (Figura 2.7). Para determinar los nombres de todos los clientes con prstamos en el banco con las operaciones estudiadas se escribe:

Igualmente, para determinar el nombre de todos los clientes con cuenta en el banco se escribe:

Para contestar a la consulta es necesaria la unin de estos dos conjuntos; es decir, hacen falta todos la nombres de clientes que aparecen en alguna de las dos relaciones o en ambas. Estos datos se pueden averiguar mediante la operacin binaria unin, denotada, como en la teora de conjuntos, por U. Por tanto, la expresin buscada es:

La relacin resultante de esta consulta aparece en la Figura 2.11. Tngase en cuenta que en el resultado hay diez tupias, aunque haya siete prestatarios y seis impositores distintos. Esta discrepancia aparente se debe a que Gmez, Lpez y Santos son a la vez prestatarios e impositores. Dado que las relaciones son conjuntos, se eliminan los valores duplicados. Obsrvese que en este ejemplo se toma la unin de dos conjuntos, ambos consistentes en valores de nombre_cliente. En general, se debe asegurar que las uniones se realicen entre relaciones compatibles. Por ejemplo, no tendra sentido realizar la unin de las relaciones prstamo y prestatario. La primera es un relacin con tres atributos, la segunda slo tiene dos. Ms an, considrese la unin de un conjunto de nombres de clientes y de un conjunto de ciudades. Una unin as no tendra sentido en la mayor parte de los casos. Por tanto, para que la operacin unin r U s sea vlida hay que exigir que se cumplan dos condiciones: 1. Las relaciones r y s deben ser de la misma aridad. Es decir, deben tener el mismo nmero de atributos. 2. Los dominios de los atributos i-simos de r y de s deben ser iguales para todo i. nombre_cliente Abril Fernndez Gmez Gonzlez Lpez Prez Ruprez Santos Sofoca Valdivieso Figura 2.11 Nombre de todos los clientes que tienen un prstamo o una cuenta.

2.2

Operaciones fundamentales del lgebra relacional

39

nombrediente Abril Gonzlez Ruprez Figura 2.12 Clientes con cuenta abierta pero sin prstamo concedido.

Tngase en cuenta que r y s pueden ser, en general, relaciones de la base de datos o relaciones temporales resultado de expresiones del lgebra relacional.

2.2.5 Operacin diferencia de conjuntosLa operacin diferencia de conjuntos, denotada por -, permite hallar las tupias que estn en una relacin pero no en la otra. La expresin r s da como resultado una relacin que contiene las tupias que estn en r pero no en s. Se pueden buscar todos los clientes del banco que tengan abierta una cuenta pero no tengan concedido ningn prstamo escribiendo

La relacin resultante de esta consulta aparece en la Figura 2.12. Como en el caso de la operacin unin, hay que asegurarse de que las diferencias de conjuntos se realicen entre relaciones compatibles. Por tanto, para que una operacin diferencia de conjuntos r s sea vlida se exige que las relaciones r y s sean de la misma aridad y que los dominios de los atributos :-simos de r y de s sean iguales.

2.2.6 Operacin producto cartesianoLa operacin producto cartesiano, denotada por un aspa (x), permite combinar informacin de cualesquiera dos relaciones. El producto cartesiano de las relaciones r1 y r2 se escribe r1 x r2. Recurdese que las relaciones se definen como subconjuntos del producto cartesiano de un conjunto de dominios. A partir de esa definicin ya se debe tener una intuicin sobre la definicin de la operacin producto cartesiano. Sin embargo, dado que el mismo nombre de atributo puede aparecer tanto en r1 como en r^, es necesario crear un convenio de denominacin para distinguir unos atributos de otros. En este caso se realiza adjuntando al atributo el nombre de la relacin de la que proviene originalmente. Por ejemplo, el esquema de relacin de r = prestatario x prstame es

Con este esquema se puede distinguir entre prestatario.nmero_prstamo y prstamo.nmero_prstamo. Para los atributos que slo aparecen en uno de los dos esquemas se suele omitir el prefijo con el nombre de la relacin. Esta simplificacin no genera ambigedad alguna. Por tanto, se puede escribir el esquema de la relacin r como

Este convenio de denominaciones exige que las relaciones que sean argumentos de la operacin producto cartesiano tengan nombres diferentes. Esta exigencia causa problemas en algunos casos, como cuando se desea calcular el producto cartesiano de una relacin consigo misma. Se produce un problema parecido si se usa el resultado de una expresin del lgebra relacional en un producto cartesiano, dado que har falta un nombre de relacin para poder hacer referencia a sus atributos. En el Apartado 2.2.7 se ver la manera de evitar estos problemas mediante la operacin renombramiento. Ahora que se conoce el esquema de relacin de r = prestatario x prstamo es necesario hallar las tupias que aparecern en r. Como es posible imaginar, se crea una tupia de r a partir de cada par de tupias

40

Captulo 2

El modelo relacional

prestatario. prstamo. nombre_cliente nmero_prstamo nmero_prstamo Fernndez P-16 P-11 Fernndez P-16 P-14 Fernndez P-16 P-15 Fernndez P-16 P-16 Fernndez P-16 P-17 Fernndez P-16 P-23 Fernndez P-16 P-93 Gmez P-11 P-11 Gmez P-11 P-14 Gmez P-11 P-15 Gmez P-11 P-16 Gmez P-11 P-17 Gmez P-11 P-23 Gmez P-11 P-93 Gmez P-23 P-11 Gmez P-23 P-14 Gmez P-23 P-15 Gmez P-23 P-16 Gmez P-23 P-17 Gmez P-23 P-23 Gmez P-23 P-93 Sotoca Sotoca Sotoca Sotoca Sotoca Sotoca Sotoca Valdivieso Valdivieso Valdivieso Valdivieso Valdivieso Valdivieso Valdivieso P-14 P-14 P-14 P-14 P-14 P-14 P-14 P-17 P-17 P-17 P-17 P-17 P-17 P-17 P-11 P-14 P-15 P-16 P-17 P-23 P-93 P-11 P-14 P-15 P-16 P-17 P-23 P-93 Figura 2.13

nombre_sucursal Collado Mediano Centro Navacerrada Navacerrada Centro Moralzarzal Becerril Collado Mediano Centro Navacerrada Navacerrada Centro Moralzarzal Becerril Collado Mediano Centro Navacerrada Navacerrada Centro Moralzarzal Becerril Collado Mediano Centro Navacerrada Navacerrada Centro Moralzarzal Becerril Collado Mediano Centro Navacerrada Navacerrada Centro Moralzarzal Becerril

importe 900 1.500 1.500 1.300 1.000 2.000 500 900 1.500 1.500 1.300 1.000 2.000 500 900 1.500 1.500 1.300 1.000 2.000 500 900 1.500 1.500 1.300 1.000 2.000 500 900 1.500 1.500 1.300 1.000 2.000 500

Resultado de prestatario x prstamo.

posible: una de la relacin prestatario y otra de prstamo. Por tanto, r es una relacin de gran tamao como se puede ver en la Figura 2.13, donde slo se ha incluido una parte de las tupias que constituyen r. Supngase que se tienen n\ tupias de prestatario y n2 tupias de prstamo. Por tanto, hay n1 * n2 eras de escoger un par de tupiasuna tupia de cada relacin; por lo que hay n\ * n2 tupias en i concreto, obsrvese que para algunas tuplas t de r puede ocurrir que t[prestatario.numero_prstamo t[prstamo.nmero_prstamo]. En general, si se tienen las relaciones r1(R1) y r2{R2), T\ X r2 es una relacin cuyo esquema concatenacin de R\ y de R2. La relacin ,R contiene todas las tupias t para las que hay unas tupias t1 y t2 en r2 para las que t[R1] = t1[Ri] y t2[R2] = h[R2].

2.2

Operaciones fundamentales del lgebra relacional

41

nombre-diente Fernndez Fernndez Gmez Gmez Gmez Gmez Lpez Lpez Prez Prez Santos Santos Sofoca Sofoca Valdivieso Valdivieso Figura 2.14

prestatario. nmero-prstamo P-16 P-16 P-11 P-11 P-23 P-23 P-15 P-15 P-93 P-93 P-17 P-17 P-14 P-14 P-17 P-17 Resultado de

prstamo. nmero-prstamo P-15 P-16 P-15 P-16 P-15 P-16 P-15 P-16 P-15 P-16 P-15 P-16 P-15 P-16 P-15 P-16

Nombre_sucursal importe Navacerrada 1.500 Navacerrada 1.300 Navacerrada 1.500 Navacerrada 1.300 Navacerrada 1.500 Navacerrada 1.300 Navacerrada 1.500 Navacerrada 1.300 Navacerrada 1.500 Navacerrada 1.300 Navacerrada 1.500 Navacerrada 1.300 Navacerrada 1.500 Navacerrada 1.300 Navacerrada 1.500 Navacerrada 1.300 .

nombre_sucursa,l "Navacerrada" (prestatario X prstamo).Supngase que se desea determinar el nombre de todos los clientes que tienen concedido un prstamo en la sucursal de Navacerrada. Se necesita para ello informacin de las relaciones prstamo y prestatario. Si se escribe

entonces el resultado es la relacin mostrada en la Figura 2.14. Se tiene una relacin que slo atae a la sucursal de Navacerrada. Sin embargo, la columna nombre_cliente puede contener clientes que no tengan concedido ningn prstamo en la sucursal de Navacerrada. (Si no se ve el motivo por el que esto es cierto, recurdese que el producto cartesiano toma todos los emparejamientos posibles de cada tupia de prestatario con cada tupia de prstamo). Dado que la operacin producto cartesiano asocia todas las tupias de prstamo con todas las tupias de prestatario, se sabe que, si un cliente tiene concedido un prstamo en la sucursal de Navacerrada, hay alguna tupia de prestatario x prstamo que contiene su nombre y que prestatario..nmero_prstamo prstamo.nmero_prstamo. Por tanto, si se escribe

slo se obtienen las tupias de prestatario x prstamo que corresponden a los clientes que tienen concedido un prstamo en la sucursal de Navacerrada. Finalmente, dado que slo se desea obtener nombre_cliente, se realiza una proyeccin:

El resultado de esta expresin, mostrada en la Figura 2.15, es la respuesta correcta a la consulta formulada.

2.2.7 Operacin renombramientoA diferencia de las relaciones de la base de datos, los resultados de las expresiones de lgebra relacional no tienen un nombre que se pueda usar para referirse a ellas. Resulta til poder ponerles nombre; la operacin renombramiento, denotada por la letra griega ro minscula (p), permite hacerlo. Dada una

42

Captulo 2

El modelo relacional

nombre_cliente Fernndez LpezFigura 2.15 Resultado de IInomhre_cliente\y prestatario .nmero_prstamo = prstamo. numero_pr stamo (nombre_sucursal = "Navacerrada" (prestatario X prstamo))).

expresin E del lgebra relacional, la expresin Px (E) devuelve el resultado de la expresin E con el nombre x. Las relaciones r por s mismas se consideran expresiones (triviales) del lgebra relacional. Por tanto tambin se puede aplicar la operacin renombramiento a una relacin r para obtener la misma relacin con un nombre nuevo. Otra forma de la operacin renombramiento es la siguiente. Supngase que una expresin del lgebra relacional E tiene aridad n. Por tanto, la expresinPx(A1,A2,-An) (E)

devuelve el resultado de la expresin E con el nombre x y con los atributos con el nombre cambiado a A1,A2,...,An. Para ilustrar el renombramiento de relaciones, considrese la consulta "Buscar el saldo mximo las cuentas del banco". La estrategia empleada para obtener el resultado es (1) calcular en primer lugar una relacin temporal consistente en los saldos que no son el mximo y (2) realizar la diferencia entre relacin IIsaldo (cuenta) y la relacin temporal recin calculada para obtener el resultado. Paso 1: para calcular la relacin intermedia hay que comparar los valores de los saldos de todas cuentas. Esta comparacin se har calculando el producto cartesiano cuenta x cuenta y formando una seleccin para comparar el valor de cualesquiera dos saldos que aparezcan en una tupia. En primer lugar hay que crear un mecanismo para distinguir entre los dos atributos saldo. Se usar la operacin renombramiento para cambiar el nombre de una referencia a la relacin cuenta; de este modo se puede hacer referencia dos veces a la relacin sin ambigedad alguna. La relacin temporal que se compone de los saldos que no son el mximo puede escribirse ahora como:IIcuenta, saldo (&cuenta.saldo < d.saldo (cuenta X pd (cuenta)))

Esta expresin proporciona los saldos de la relacin cuenta para los que aparece un saldo mayor en alguna parte de la relacin cuenta (cuyo nombre se ha cambiado a d). El resultado contiene todos los saldos salvo el mximo. La Figura 2.16 muestra esta relacin. Paso 2: la consulta para determinar el saldo mximo de las cuentas del banco puede escribirse ahora manera siguiente:IIsaldo (cuenta) II-cuenta.saldo ( cuenta.saldo < d.saldo (cuenta X pd (cuenta)))

saldo

350 400 500 700 750Figura 2.16 Resultado de la subexpresin

IIcuenta.saldo ( cuenta.saldo < d.saldo (cuenta X pd (cuenta))).

2.2

Operaciones fundamentales del lgebra relacional

43

saldo

900Figura 2.17 Saldo mximo de las cuentas del banco.

La Figura 2.17 muestra el resultado de esta consulta. Considrese la consulta "Determinar el nombre de todos los clientes que viven en la misma ciudad y en la misma calle que Gmez" como un nuevo ejemplo de la operacin renombramiento. Se puede obtener la calle y la ciudad en las que vive Gmez escribiendo

Sin embargo, para hallar a otros clientes que vivan en esa ciudad y en esa calle hay que hacer referencia por segunda vez a la relacin cliente. En la consulta siguiente se usa la operacin renombramiento sobre la expresin anterior para darle al resultado el nombre direccn_gmez y para cambiar el nombre de los atributos calle_cliente y ciudad_cliente a calle y ciudad, respectivamente:

El resultado de esta consulta, cuando se aplica a la relacin cliente de la Figura 2.4, se muestra en la Figura 2.18. La operacin renombramiento no es estrictamente necesaria, dado que es posible usar una notacin posicional para los atributos. Se pueden nombrar los atributos de una relacin de manera implcita donde $1, $2,... hagan referencia respectivamente al primer atributo, al segundo, etc. La notacin posicional tambin se aplica a los resultados de las operaciones del lgebra relacional. La siguiente expresin del lgebra relacional ilustra el empleo de esta notacin con el operador unario a:

Si una operacin binaria necesita distinguir entre las dos relaciones que son sus operandos, se puede usar una notacin posicional parecida para los nombres de las relaciones. Por ejemplo, $J?1 puede hacer referencia al primer operando y $i?2, al segundo. Sin embargo, la notacin posicional no resulta conveniente para las personas, dado que la posicin del atributo es un nmero en vez de un nombre de atributo fcil de recordar. Por tanto, en este libro no se usa la notacin posicional.

2.2.8 Definicin formal del lgebra relacionalLas operaciones del Apartado 2.2 permiten dar una definicin completa de las expresiones del lgebra relacional. Las expresiones fundamentales del lgebra relacional se componen de alguno de las siguientes elementos: Una relacin de la base de datos Una relacin constante Las relaciones constantes se escriben poniendo una relacin de sus tupias entre llaves ({ }), por ejemplo C101,Centro,500) (C-215, Becerril, 700)}.

nombre-diente Gmez PrezFigura 2.18 Clientes que viven en la misma ciudad y en la misma calle que Gmez.

44

Captulo 2

El modelo relacional

nombrexliente Gmez Lpez Santos Figura 2.19 Clientes con una cuenta abierta y un prstamo en el banco.

Las expresiones generales del lgebra relacional se construyen a partir de subexpresiones ms pequeas. Sean E\ y E2 expresiones de lgebra relacional. Todas las expresiones siguientes son tambin expresiones del lgebra relacional: E1 U E 2 E1 - E2 E1 x E2 (p(E1), donde P es un predicado de atributos de Ex Hs{E1), donde S es una lista que se compone de algunos de los atributos de Ex px {E1), donde x es el nuevo nombre del resultado de Ex

2.3 Otras operaciones del lgebra relacionalLas operaciones fundamentales del lgebra relacional son suficientes para expresar cualquier cnsul ta del lgebra relacional1. Sin embargo, limitndose exclusivamente a las operaciones fundamntale; algunas consultas habituales resultan complicadas de expresar. Por tanto, se definen otras operador. que no aaden potencia al lgebra, pero que simplifican las consultas habituales. Para cada operacin nueva se facilita una expresin equivalente usando slo las operaciones fundamentales.

2.3.1 Operacin interseccin de conjuntosLa primera operacin adicional del lgebra relacional que se va a definir es la interseccin de conjuntos(). Supngase que se desea conocer todos los clientes con un prstamo concedido y una cuerva abierta. Empleando la interseccin de conjuntos se puede escribir^nombre_cliente {prestatario) Hnombre_cliente {impositor)

La relacin resultante de esta consulta aparece en la Figura 2.19. Obsrvese que se puede volver a escribir cualquier expresin del lgebra relacional que utilice J interseccin de conjuntos sustituyendo la operacin interseccin por un par de operaciones de diferencia de conjuntos, de la manera siguiente: r s = r (r s) Por tanto, la interseccin de conjuntos no es una operacin fundamental y no aade potencia al lgebra relacional. Sencillamente, es ms conveniente escribir r s que r (r s).

2.3.2 Operacin reunin naturalSuele resultar deseable simplificar ciertas consultas que exijan un producto cartesiano. Generarme:" las consultas que implican un producto cartesiano incluyen un operador seleccin sobre el resultara del producto cartesiano. Considrese la consulta "Hallar los nombres de todos los clientes que tierra concedido un prstamo en el banco y averiguar su nmero e importe". En primer lugar se calcula el:1. En el Apartado 2.4 se introducen operaciones que extienden la potencia del lgebra relacional al tratamiento de los vah 1 nulos y de los valores de agregacin.

2.3

Otras operaciones del lgebra relacional

45

nombre-cliente Fernndez Gmez Gmez Lpez Prez Santos Sofoca Valdivieso

nmero-prstamo importe P-16 1.300 P-23 2.000 P-ll 900 1.500 P-15 P-93 500 P-17 1.000 P-14 1.500 P-17 1.000

Figura 2.20 Resultado de IInombre_cliente,numero_prestamo,importe(prestatario x

prestamo).producto cartesiano de las relaciones prestatario y prstamo. Despus se seleccionan las tupias que slo ataen al mismo nmerojprstamo, seguidas por la proyeccin de nombre_client, nmero_prstamo e importe resultantes: nmerojprstamo ^importe ( prestatario.nmero_prstam,o = prstamo.nmero_prstamo (prestatarioIInombre_cliente,prstamo,

[X]

prstamo ))

La reunin natural es una operacin binaria que permite combinar ciertas selecciones y un producto cartesiano en una sola operacin. Se denota por el smbolo de reunin IX. La operacin reunin natural forma un producto cartesiano de sus dos argumentos, realiza una seleccin forzando la igualdad de los atributos que aparecen en ambos esquemas de relacin y, finalmente, elimina los atributos duplicados. Aunque la definicin de la reunin natural es compleja, la operacin es sencilla de aplicar. A modo de ilustracin, considrese nuevamente el ejemplo "Determinar el nombre de todos los clientes que tienen concedido un prstamo en el banco y averiguar su importe". Esta consulta puede expresarse usando la reunin natural de la manera siguiente: II-nombre_cliente,nmero_prstamo:importe (prestatario [X] (prstamo) Dado que los esquemas de prestatario y de prstamo (es decir, Esquema_prestatario y Esquema_prstamo) tienen en comn el atributo nmero_jprstamo, la operacin reunin natural slo considera los pares de tupias que tienen el mismo valor de nmero_prstamo. Esta operacin combina cada uno de estos pares en una sola tupia en la unin de los dos esquemas (es decir, nombre_clente, nombre_sucursal, nmero_prstamo, importe). Despus de realizar la proyeccin, se obtiene la relacin mostrada en la Figura 2.20. Considrense dos esquemas de relacin R y Sque son, por supuesto, listas de nombres de atributos. Si se consideran los esquemas como conjuntos, en vez de como listas, se pueden denotar los nombres de los atributos que aparecen tanto en R como en S mediante R S, y los nombres de los atributos que aparecen en R, en S o en ambos mediante R U S. De manera parecida, los nombres de los atributos que aparecen en R pero no en S se denotan por R S, mientras que S R denota los nombres de los atributos que aparecen en S pero no en R. Obsrvese que las operaciones unin, interseccin y diferencia aqu operan sobre conjuntos de atributos, y no sobre relaciones. Ahora es posible dar una definicin formal de la reunin natural. Considrense dos relaciones r(R) y s(S). La reunin natural de r y de s, denotada mediante r [X] s es una relacin del esquema R U S definida formalmente de la manera siguiente:r IX s = IIR U S ('r.A1 = s.A1Ar.A2 = s . A 2 A . . . f \ r . A n = s.A (r

[X] s))

donde RS = {A1, A2,...,An}. Como la reunin natural es fundamental para gran parte de la teora y de la prctica de las bases de datos relacinales, se ofrecen varios ejemplos de su uso. Hallar el nombre de todas las sucursales con clientes que tienen una cuenta abierta en el banco y viven en Peguerinos.

Captulo 2

El modelo relacional

nombre_sucursal Galapagar Navacerrada

La relacin resultante de esta consulta aparece en la Figura 2.21. Obsrvese que se ha escrito cliente [X] cuenta [X] impositor sin aadir parntesis para especificar el orden en que se deben ejecutar las operaciones reunin natural sobre las tres relaciones. En el caso anterior hay dos posibilidades:

No se ha especificado la expresin deseada, ya que las dos son equivalentes. Es decir, la reunin natural es asociativa. Hallar todos los clientes que tienen una cuenta abierta y un prstamo concedido en el banco. Obsrvese que en el Apartado 2.3.1 se escribi una expresin para esta consulta usando la interseccin de conjuntos. A continuacin se repite esa expresin. La relacin resultante de esta consulta se mostr anteriormente en la Figura 2.19. Este ejemplo ilustra una caracterstica del lgebra relacional: se pueden escribir varias expresiones del lgebra relacional equivalentes que sean bastante diferentes entre s. Sean r(R) y s(S) relaciones sin atributos en comn; es decir, R n S 0. (0 denota el conjunto vaco). Por tanto, r M s = r x s. La operacin reunin zeta es una extensin de la operacin reunin natural que permite combinar una seleccin y un producto cartesiano en una sola operacin. Considrense las relaciones r(R) y s(S), y sea 9 un predicado de los atributos del esquema i?. U S. La operacin reunin zeta r Me s se define de la manera siguiente:

2.3.3 Operacin divisinLa operacin divisin, denotada por -=-, resulta adecuada para las consultas que incluyen la expresin "para todos". Supngase que se desea hallar a todos los clientes que tengan abierta una cuenta en todas las sucursales ubicadas en Arganzuela. Se pueden obtener todas las sucursales de Arganzuela mediante la expresin

nombre_sucursal Centro GalapagarFigura 2.22 Resultado de IInombre_sucursal ( o ciudad_sucursal ="arganzuela" (sucursal))

2.3

Otras operaciones del lgebra relacional

47

Se pueden encontrar todos los pares {nombre_cliente, nombre_sucursal) para los que el cliente tiene una cuenta en una sucursal escribiendo

La Figura 2.23 muestra la relacin resultante de esta expresin. Ahora hay que hallar los clientes que aparecen en r2 con los nombres de todas las sucursales de r\. La operacin que proporciona exactamente esos clientes es la operacin divisin. La consulta se formula escribiendo

El resultado de esta expresin es una relacin que tiene el esquema (nombre__cliente) y que contiene la tupia (Gonzlez). Formalmente, sean r(R) y s(S) relaciones y S C R; es decir, todos los atributos del esquema S estn tambin en el esquema R. La relacin r -f- s es una relacin del esquema R S (es decir, del esquema que contiene todos los atributos del esquema R que no estn en el esquema S). Una tupia t est enr T S si y slo si se cumplen estas dos condiciones: 1. t est en II r-s(r) 2. Para cada tupil ts de s hay una tupia tr de r que cumple las dos condiciones siguientes: a. tr[S] = ts[S] b. tr[R - S] = t Puede resultar sorprendente descubrir que, dados una operacin divisin y los esquemas de las relaciones, se pueda definir la operacin divisin en trminos de las operaciones fundamentales. Sean r(R) y 5(5") dadas, con S C R:

R s = IIR-S (r) - IIR-S ({IIR-S M x s) -II.R-S,s(r))Para comprobar que esta expresin es cierta, obsrvese que IIR-S (r) proporciona todas las tupias que cumplen la primera condicin de la definicin de la divisin. La expresin del lado derecho del operador diferencia de conjuntos, IIR-S ((IIR-S (r) x s ) - IIR-s,s(r)) elimina las tupias que no cumplen la segunda condicin de la definicin de la divisin. Esto se logra de la manera siguiente. Considrese HR-S (f) x s. Esta relacin est en el esquema R y empareja cada tupia de LTfl-s (r) con cada tupia de s. La expresin IR~s,s(r) slo reordena los atributos de r. Por tanto, (TIRS (r.) x s) - IR-s,s(f) genera los pares de tupias de HR-S (r) y des que no aparecen en r. Si una tupia tj est en

IIR-S ((IIR-S (r) x s) IIR-S,S(R))))nombre-cliente Abril Gmez Gonzlez Gonzlez Lpez Ruprez Santos nombre_sucursal Collado Mediano Becerril Centro Galapagar Navacerrada Moralzarzal Galapagar

48

Captulo 2

El modelo relacional

nombre-cliente Gmez Lpez Prez Santos Figura 2.24

lmite 2.000 1.500 2.000 6.000

saldoxrdito 400 1.500 1.750 700

La relacin informacin_crdo.

existe alguna tupia ta de s que no se combina con la tupia tj para formar una tupia de r. Por tanto tj guarda un valor de los atributos R S que no aparece en r ~ s. Estos valores son los que se eliminandell_s(r).

2.3.4 Operacin asignacinEn ocasiones resulta conveniente escribir una expresin del lgebra relacional mediante la asignacin de partes de esa expresin a variables de relacin temporal. La operacin asignacin, denotada por