SlideShare una empresa de Scribd logo
1 de 28
Descargar para leer sin conexión
2 TEMA 2. EL MODELO RELACIONAL



2     TEMA 2. EL MODELO RELACIONAL ................................................................ 1
    2.1      Modelo relacional ............................................................................................. 3
       2.1.1     Dominios .................................................................................................. 3
       2.1.2     Relaciones................................................................................................. 5
       2.1.3     Bases de Datos Relacionales .................................................................... 6
       2.1.4     Reglas de integridad relacional ................................................................ 7
       2.1.5     Las Reglas de Codd ................................................................................ 10
    2.2      Álgebra relacional .......................................................................................... 12
       2.2.1     Introducción............................................................................................ 12
       2.2.2     Operaciones tradicionales de conjuntos ................................................. 14
       2.2.3     Operaciones relacionales especiales....................................................... 15
       2.2.4     Operaciones del álgebra relacional extendida ........................................ 17
       2.2.5     Modificaciones de la base de datos ........................................................ 18
    2.3      Cálculo relacional ........................................................................................... 20
       2.3.1     Introducción............................................................................................ 20
       2.3.2     Calculo relacional de tuplas.................................................................... 20
       2.3.3     Calculo relacional de dominios .............................................................. 24
       2.3.4     Query by example................................................................................... 28




Tema 2: El modelo relacional                                                                                                1
PRELIMINAR
La teoría formal que constituye los cimientos de los sistemas relacionales se conoce
como modelo de datos relacional. Cuando describimos un sistema como relacional
queremos decir que el sistema en cuestión está construido de acuerdo con los principios
de ese modelo teórico subyacente.

Una buena forma de caracterizar el modelo relacional es la siguiente:

El modelo relacional es una forma de ver los datos; es decir, es una receta para
representar los datos (a saber, mediante tablas), y la receta para manipular esa
representación (a saber, mediante operadores tales como el de reunión).

En términos más precisos, el modelo relacional se ocupa de tres aspectos de los datos:
su estructura, su integridad y su manipulación.

Como comentarios preliminares:

       •   Aunque el modelo relacional es una teoría, no se puede recalcar demasiado
           que no se trata sólo de una teoría en sí misma. De hecho, el objetivo general
           de la teoría es precisamente establecer una base sobre la cual podamos
           construir sistemas 100% prácticos.

       •   La mayor parte de las teorías suelen estar dotadas con su propia terminología
           especial, y el modelo relacional no constituye una excepción a esta regla.




Tema 2: El modelo relacional                                                          2
2.1 Modelo relacional
Aquí veremos estructura e integridad. En los puntos 2.2 y 2.3 veremos manipulación

Términos importantes en la estructura de datos relacional:

       •     Relación. Corresponde con la idea general de una tabla

       •     Tupla. Corresponde a una fila en dicha tabla

       •     Atributo. Es una columna de la tabla

       •     Cardinalidad. Numero de tuplas en la tabla

       •     Grado. Numero de atributos en la tabla

       •     Clave primaria. Es un identificador único para la tabla, esto es, una columna
             o conjunto de columnas de forma que nunca existen dos filas en la misma
             tabla con el mismo valor en esa columna o conjunto de columnas.

       •     Dominio. Una colección de valores de los cuales uno o más atributos
             obtienen sus valores reales.

Veamos un ejemplo de una relación típica:


DNI           Nombre      Apellidos             Dirección           Teléfono    Fec_nac
14.167.654    Alberto     Gómez Martínez        Pedrones, 4         963787878   23/02/1958
64.237.935    Luisa       Ripoll Albert         Denia, 64           963573895   12/06/1963
45.126.579    José Luis   Pérez Cerdán          Escandinavia, 12    963873333   15/12/1943
67.677.887    Andrea      Martínez Zanón        Poeta Más Gil, 37   963772564   10/02/1965

En esta relación, un ejemplo de tupla sería la fila marcada en gris. Los atributos serían:
DNI, Nombre, Apellidos, Dirección, Teléfono y Fec_nac. La cardinalidad de esta
relación es 4, y el grado es 6. La clave primaria sería el DNI, puesto que es un valor que
identifica unívocamente cada tupla de la relación. Los dominios para cada atributo
serían variables; por ejemplo, Nombre, Apellidos y Dirección pertenecerían al dominio
‘texto’, el DNI pertenecería al dominio ‘entero’, teléfono pertenecería al dominio
‘entero de 9 dígitos’, y Fec_nac al dominio ‘fecha’.

2.1.1 Dominios
La menor unidad semántica de información es el valor de un dato individual (como el
nombre de una ciudad, el código de un pedido, etc.). A estos valores los llamaremos
escalares (no poseen estructura interna).

Definimos un dominio como un conjunto de valores escalares, todos ellos del mismo
tipo. Los dominios son fondos de valores, de los cuales se extraen los valores reales que
aparecen en los atributos. Cada atributo debe estar definido sobre un dominio
subyacente, y sólo uno. Es posible, por tanto, tener valores de un dominio que no
aparecen en ninguno de los atributos correspondientes a ese dominio.


Tema 2: El modelo relacional                                                            3
Los dominios son útiles porque sirven para restringir las comparaciones. Esto significa
que cuando se realiza una consulta utilizando el lenguaje de consulta apropiado, las
condiciones de la consulta suelen representarse a través de comparaciones entre
atributos de las relaciones. Por tanto, una forma sencilla de identificar si la consulta es
semánticamente correcta es analizar si los atributos que forman parte de una
comparación son compatibles, es decir, si pertenecen al mismo dominio.

Ejemplo de uso de dominios en pseudoSQL (puesto que el SQL no admite esto):

CREATE DOMAIN S#                     CHAR(5);
CREATE DOMAIN NOMBRE                 CHAR(20);
CREATE DOMAIN SITUACION              SMALLINT;
CREATE DOMAIN CIUDAD                 CHAR(15);

CREATE TABLE S (
    S#           DOMAIN(S#)                          NOT NULL,
    SNOMBRE DOMAIN(NOMBRE)                           NOT NULL,
    SITUACION DOMAIN(SITUACION)                      NOT NULL,
    CIUDAD       DOMAIN(CIUDAD)                      NOT NULL,
    PRIMARY KEY(S#));

Un dominio simple es un dominio de valores escalares. Un domino compuesto se define
como una combinación de dominios simples. Por ejemplo:

CREATE DOMAIN DIA                    CHAR(2);
CREATE DOMAIN MES                    CHAR(2);
CREATE DOMAIN AÑO                    CHAR(4);
CREATE DOMAIN FECHA                  (DIA DOMAIN(DIA),
                                     MES DOMAIN(MES),
                                     AÑO DOMAIN(AÑO));

Esto implica que los atributos podrán ser simples o compuestos, dependiendo de la
naturaleza del dominio sobre el que estén definidos. Además, las operaciones
relacionales deberán ser capaces de hacer referencia a ese atributo en su totalidad y a
sus componentes de forma individual:

SELECT * FROM EMPLEADO
WHERE EMPLEADO.FECHA_INGRESO = ‘01011984’;

SELECT * FROM EMPLEADO
WHERE AÑO(EMPLEADO.FECHA_INGRESO) < ‘1984’;

En definitiva, un dominio no es ni más ni menos que un tipo de datos, tal y como se
entiende dentro del ámbito de los lenguajes de programación modernos.

El manejo completo del concepto de dominios requiere por lo menos:

       •   Capacidad de especificar el conjunto completo de dominios aplicable a la
           base de datos dada. El dominio, además, debería ser un conjunto cerrado
           (cualquier operación sobre elementos del dominio debe dar un valor
           perteneciente a algún dominio definido en la base de datos).



Tema 2: El modelo relacional                                                             4
•   Capacidad de especificar con exactitud para cada dominio el conjunto de
           operadores unarios que se pueden aplicar a los elementos del dominio.
       •   Capacidad de especificar con exactitud para cada par de dominios el
           conjunto de operadores binarios que se pueden aplicar a los elementos de
           ambos dominios.
       •   Capacidad de especificar para cada expresión escalar legal, el dominio del
           resultado de evaluar esa expresión.

2.1.2 Relaciones
Una relación sobre un conjunto de dominios D1, D2, …, Dn se compone de dos partes:
una cabecera y un cuerpo. (En términos de la representación tabular, la cabecera es la
fila de cabeceras de columnas y el cuerpo es el conjunto de filas de datos).

       •   La cabecera está formada por un conjunto fijo de atributos, o en términos
           más precisos, de pares atributo-dominio, {(A1:D1),(A2,D2),…,(An:Dn)},
           tales que cada atributo Aj corresponde a uno y sólo uno de los dominios
           subyacentes Dj(j=1,2,…,n).

       •   El cuerpo está formado por un conjunto de tuplas, el cual varía con el
           tiempo. Cada tupla está formada a su vez por un conjunto de pares atributo-
           valor {(A1:vi1),(A2:vi2),…,(An:vin)} / i=1,2,…,m siendo m el número de
           tuplas del conjunto. En cada una de estas tuplas hay uno de estos pares
           atributo-valor para cada atributo Aj de la cabecera. Para cada par atributo-
           valor (Aj:vij), vij es un valor del dominio único Dj asociado al atributo Aj..
           Los valores m y n se llaman respectivamente cardinalidad y grado de la
           relación R. La cardinalidad varía con el tiempo, pero el grado no.

Veamos la representación tabular de una relación tal y como se ha definido:


                     A1:D1     A2:D2      A3:D2     A4:D1      A5:D4
                       V11       V12        V13       V14        V15
                                                      V24
                                 V32        V33
                       V41                                       V45

Podemos diferenciar ahora entre el concepto de tabla y el de relación (que aunque les
hemos estado asignando el mismo significado, contienen diferencias leves, pero
precisas, en su definición). Una relación es lo que indica la definición anterior (una
especie bastante abstracta de objeto), mientras que una tabla es la representación
concreta de dicho objeto abstracto.

Tipos de relaciones según el grado: unaria, binaria, ternaria, …, n-aria.

2.1.2.1 Propiedades de las relaciones

Las propiedades de las relaciones que se derivan de su propia definición son:

       •   No existen tuplas repetidas. La existencia de una clave primaria impide que
           existan tuplas repetidas.



Tema 2: El modelo relacional                                                           5
•   Las tuplas no están ordenadas. Una relación está definida como un conjunto,
           y en un conjunto no se establece una relación de orden (matemáticamente).
       •   Los atributos no están ordenados. Puesto que la cabecera de una relación
           también se define como un conjunto, no existe un orden preestablecido.
       •   Todos los valores de los atributos son atómicos. Otra forma de expresar esta
           propiedad es diciendo que todos los valores de los atributos simples son
           atómicos. Es una consecuencia de que todos los dominios subyacentes son a
           su vez simples. (Es la definición de 1ª Forma Normal).

2.1.2.2 Tipos de relaciones

       •   Relaciones base (o relaciones reales). Corresponde al concepto de tabla base
           en SQL. Es una relación autónoma, con nombre, es decir, una relación cuya
           importancia es tal que el diseñador de la BD ha decidido darle un nombre y
           hacerla parte directa de la BD en sí, a diferencia de otras relaciones cuya
           naturaleza es más efímera, como por ejemplo el resultado de una consulta.
       •   Vistas (o relaciones virtuales). Es una relación derivada, con nombre.
       •   Instantáneas. Es una relación derivada, con nombre, pero es real (en lugar de
           virtual, como lo es una vista). (Ejemplo: CREATE SNAPSHOT SC AS
           SELECT S#, CIUDAD FROM S# REFRESH EVERY DAY;).
       •   Resultados de consultas. Es una relación final resultante de alguna consulta
           especificada. Puede o no tener nombre. No tienen persistencia en la BD.
       •   Resultados intermedios. Son relaciones resultantes de alguna expresión
           relacional anidada dentro de alguna otra expresión relacional mayor.
       •   Relaciones temporales. Es una relación con nombre, pero que se destruye de
           forma automática en el momento apropiado.

2.1.3 Bases de Datos Relacionales
Podemos obtener una definición un poco más formal de lo que es una base de datos
relacional, a la vista de lo expuesto hasta ahora.

Una base de datos relacional es una base de datos percibida por el usuario como una
colección de relaciones normalizadas de diversos grados que varía con el tiempo.

Es importante el concepto de percibida por el usuario, puesto que el modelo relacional
se aplica en los niveles conceptual y externo del sistema.

En resumen, podemos decir que en términos tradicionales una relación se asemeja a un
archivo, una tupla a un registro, y un atributo a un campo.

Todos los datos en una base de datos relacional se representan de una y sólo una
manera, a saber, por su valor explícito (principio básico del modelo relacional). En
particular, las conexiones lógicas dentro de una relación y entre las relaciones se
representan mediante esos valores; no existen ligas o apuntadores visibles para el
usuario, ni ordenamientos visibles para el usuario, ni grupos repetitivos visibles para el
usuario, etc.




Tema 2: El modelo relacional                                                            6
2.1.4 Reglas de integridad relacional
Es necesario ampliar la definición de base de datos a fin de incluir ciertas reglas de
integridad, cuyo propósito es informar al DBMS de ciertas restricciones del mundo real
para que pueda impedir la ocurrencia de tales configuraciones imposibles de valores.

La mayor parte de las reglas de integridad son específicas, en cuanto que se aplican a
una base de datos específica. Sin embargo, el modelo relacional incluye dos reglas
generales de integridad, puesto que se aplican a cualquier base de datos, y se refieren a
las claves primarias y claves ajenas.

En general, todas las reglas de integridad se aplican a las relaciones base.

2.1.4.1 Claves primarias

El atributo K de una relación R es una clave candidata de R si y sólo si satisface las
siguientes dos propiedades independientes del tiempo:

       •   Unicidad: En cualquier momento dado, no existen dos tuplas en R con el
           mismo valor de K.
       •   Minimalidad: Si K es compuesto, no será posible eliminar ningún
           componente de K sin destruir la propiedad de unicidad.

Del conjunto de claves candidatas de una relación dada se elige una y sólo una como
clave primaria de esa relación; las demás, si existen, se llaman claves alternativas.

Consecuencias:

       •   Puesto que toda relación tiene por lo menos una clave candidata, toda
           relación tendrá por fuerza una clave primaria.
       •   El razonamiento para elegir la clave primaria queda fuera del alcance del
           modelo relacional.
       •   La clave primaria es la que tiene verdadera importancia; las claves
           candidatas y alternativas sólo son conceptos añadidos.
       •   Aunque toda relación tenga una clave primaria, en la práctica son las
           relaciones base a las que se aplica de manera más directa el concepto.
       •   En ningún momento se implica la necesidad de la existencia de un índice
           según la clave primaria.

Las claves primarias son tan importantes porque constituyen el mecanismo de
direccionamiento a nivel de tuplas básico en un sistema relacional, es decir, el único
modo garantizado por el sistema de localizar una tupla específica. Las claves primarias
son tan indispensables para el funcionamiento correcto de un sistema relacional como
las direcciones de memoria principal lo son para el funcionamiento de la máquina
subyacente.

2.1.4.2 La regla de integridad de las entidades

La regla de integridad de las relaciones dice:

Ningún componente de la clave primaria de una relación base puede aceptar nulos.


Tema 2: El modelo relacional                                                           7
Se entiende como nulos el que no exista información o dato asociado a los
componentes, es decir, un nulo es un valor o representación que, por convención, no
representa valor real alguno del atributo aplicable.

Justificación de la regla:

       •   Las relaciones base corresponden a entidades en el mundo real.
       •   Por definición, las entidades en el mundo real son distinguibles.
       •   Por tanto, los representantes de entidades en el mundo real deben ser
           distinguibles, es decir, se les debe poder identificar de alguna manera.
       •   Las claves primarias realizan esta función de identificación única en el
           modelo relacional.
       •   Si una entidad es lo bastante importante en el mundo real como para requerir
           una representación explícita en la base de datos, tal entidad deberá ser
           definitivamente susceptible de identificación definida y sin ambigüedad,
           pues de lo contrario sería imposible siquiera hablar de ella en cualquier
           forma sensata.

Puntos importantes:

       •   En el caso de claves primarias compuestas, la regla de integridad de
           entidades dice que cada valor individual de la clave primaria debe ser no
           nulo en su totalidad (no sólo en parte).
       •   La regla de integridad de las entidades se aplica a las relaciones base.
       •   La regla de integridad de las entidades se aplica sólo a las claves primarias.
       •   No debe entenderse como regla de integridad de las entidades el que “los
           valores de la clave primaria deben ser únicos”. La unicidad es parte de la
           regla, que hace sobre todo referencia a los no nulos.

2.1.4.3 Claves ajenas

Una definición informal de clave ajena puede ser: una clave ajena es un atributo
(quizás compuesto) de una relación R2 cuyos valores deben concordar con los de la
clave primaria de alguna relación R1 (donde R1 y R2 no son necesariamente distintos).

Un valor de clave ajena representa una referencia a la tupla donde se encuentra el valor
correspondiente de la clave primaria. Por tanto, el problema de garantizar que la base de
datos no incluya valores no válidos de una clave ajena se conoce como el problema de
la integridad referencial. La restricción según la cual los valores de una clave ajena
determinada deben concordar con los valores de la clave primaria correspondiente se
conoce como restricción referencial. La relación que contiene a la clave ajena se conoce
como relación referencial, y la relación que contiene a la clave primaria correspondiente
se denomina relación referida o relación objetivo. Podemos, además, utilizar la
siguiente representación:

                                    R1     R2    R3

donde cada flecha indica que existe una clave ajena en la relación de la cual sale la
flecha, la cual hace referencia a la clave primaria de la relación a la cual apunta la
flecha.



Tema 2: El modelo relacional                                                           8
Una definición más formal de clave ajena:

El atributo LF (quizás compuesto) de la relación base R2 es una clave ajena si y sólo si
satisface estas dos propiedades independientes del tiempo:

       •   Cada valor de LF es nulo del todo, o bien no nulo del todo (es decir, que si
           LF es compuesto, o bien todos sus componentes tienen un valor, o todos son
           nulos).
       •   Existe una relación base R1 con clave primaria LP tal que cada valor no
           nulo de LF es idéntico al valor LP en alguna tupla de R1.

Surgen los siguientes puntos:

       •   Una clave ajena dada y la clave primaria correspondiente deben definirse
           sobre el mismo dominio subyacente.
       •   La clave ajena no necesita ser un componente de la clave primaria de la
           relación que la contiene.
       •   Una relación dada puede ser desde luego tanto una relación referida como
           una relación referencial, tal como sucede con R2 en el siguiente caso:
           R3 R2 R1. (Comentario propio: desde luego, esto no sucede para el
           mismo atributo siendo clave ajena y primaria consecutivamente en todas las
           relaciones, sino que cada relación tendrá una serie de claves ajenas sobre la
           relación referida, distintas a las claves ajenas de la siguiente referencia).
       •   Las relaciones R1 y R2 en la definición de clave ajena no son
           necesariamente distintas.
       •   Las claves ajenas deben aceptar nulos en algunas ocasiones, a diferencia de
           las claves primarias.

2.1.4.4 La regla de integridad referencial

La segunda regla general de integridad del modelo relacional es la regla de integridad
referencial:

La base de datos no debe contener valores de clave ajena sin concordancia.

Con la expresión ‘valores de clave ajena sin concordancia’ queremos decir un valor no
nulo de clave ajena para el cual no existe un valor concordante de la clave primaria en la
relación objetivo pertinente. Básicamente, se trata de justificar que si B hace referencia
a A, entonces A debe existir.

Surgen los siguientes puntos:

       •   La integridad referencial exige concordancia de las claves ajenas con las
           claves primarias, no con las alternativas.
       •   Los conceptos de clave ajena e integridad referencial se definen uno en
           términos del otro, es decir, no es posible explicar qué es una clave ajena sin
           mencionar la noción de integridad referencial, y a la inversa.




Tema 2: El modelo relacional                                                            9
2.1.4.5 Manejo de las claves ajenas (o de la integridad referencial)

Hemos hablado de la integridad referencial como estados posibles de la base de datos,
pero no hemos dicho nada sobre el comportamiento que debe tener el SGBD para
garantizar la integridad referencial. Aunque no es objeto del modelo relacional en sí,
daremos unas directrices sobre los comportamientos genéricos posibles.

Existen dos posibilidades para manejar la integridad referencial: a) impedir que se
introduzca información que no garantiza la integridad referencial, o b) permitir la
introducción de dicha información y realizar acciones consecuentes para que se
mantenga la integridad referencial. Desde luego, esta última opción es la ideal, e incluso
es posible implementarla en algunos sistemas, pero en este caso se depende
completamente del diseño que se realiza, y se debe tener muy en cuenta como se realiza
dicho diseño para cumplir con el objetivo propuesto. (P. ej. intentar borrar un valor que
es clave primaria en una tabla y clave ajena en otra tiene dos posibles comportamientos
por parte del SGBD: a) impedir que se pueda borrar dicho valor, o b) borrar todas las
entradas en la relación referencial cuyo valor de la clave ajena sea dicho valor de la
clave primaria).

La idea fundamental es la siguiente. Para cada clave ajena es necesario responder a tres
preguntas:

       1. ¿Puede aceptar nulos esa clave ajena?
       2. ¿Qué deberá suceder si hay un intento de eliminar el objetivo de una
          referencia de clave ajena?
       3. ¿Qué deberá suceder si hay un intento de modificar la clave primaria del
          objetivo de una referencia de clave ajena?

Como respuesta a las preguntas 2 y 3 caben las siguientes:

       •   Restringida (RESTRICTED): la operación se restringe al caso en el cual no
           existen todavía referencias.
       •   Se propaga (CASCADE): la operación se propaga, eliminando o
           modificando las referencias existentes
       •   Anula (NULLFILES): se asignan nulos a la clave ajena en todas las
           referencias correspondientes a la clave primaria que se desea eliminar o
           modificar.

2.1.5 Las Reglas de Codd
La discusión sobre el mejor modelo de datos, y la inclusión de características
relacionales en productos no relacionales en su origen, hizo surgir un debate en torno a
si la aplicación del modelo relacional estaba o no justificada en muchos casos. Codd
publicó sus famosas reglas en 1985, analizando algunos de los productos comerciales en
el marco de las mismas, llegando a la conclusión de la escasa relacionabilidad de la
mayoría de los productos que se ofrecían en el mercado. Dichas reglas son las
siguientes:

      1. Representación de la información. Toda información en una base de datos
         relacional debe presentarse explícitamente a nivel lógico, y de manera única,
         por medio de valores en tablas (principio básico del modelo relacional).


Tema 2: El modelo relacional                                                           10
2. Acceso garantizado. Todo dato debe ser accesible mediante una combinación
        de un nombre de tabla, un valor de su clave y el nombre de una columna. Es
        una forma de insistir en la obligatoriedad de la clave primaria.

     3. Tratamiento sistemático de valores nulos. Los valores nulos, información
        desconocida o inaplicable, han de ser tratados sistemáticamente por el sistema,
        el cual ha de ofrecer las facilidades necesarias para su tratamiento.

     4. Catálogo activo en línea basado en el modelo relacional. La representación de
        la metainformación (descripción de la base de datos) debe ser igual a la de los
        otros datos, y su acceso debe poder realizarse por medio del mismo lenguaje
        relacional que se utiliza para los demás datos, es decir, el modelo de datos
        para la metainformación debe ser también relacional.

     5. Sublenguaje de datos completo. Debe existir un lenguaje que permita un
        completo manejo de la base de datos (definición de datos, definición de vistas,
        manipulación de datos, restricciones de integridad, autorizaciones y gestión de
        transacciones).

     6. Actualización de vistas. Toda vista teóricamente actualizable debe poder ser
        actualizada por el sistema.

     7. Inserciones, modificaciones y eliminaciones de alto nivel. Todas las
        operaciones de manipulación de datos (consulta, inserción, modificación y
        borrado) deben operar sobre conjuntos de filas (lenguaje no navegacional).
        Los sistemas existentes hasta el momento en que surge el modelo relacional
        actuaban registro a registro, obligando al programador de una base de datos a
        navegar por la misma.

     8. Independencia física de los datos. El acceso lógico a los datos debe
        mantenerse incluso cuando cambien los métodos de acceso o la forma de
        almacenamiento.

     9. Independencia lógica de los datos. Los programas de aplicación no deben
        verse afectados por cambios realizados en las tablas que estén permitidos
        teóricamente y que preserven la información.

     10. Independencia de la integridad. Las reglas de integridad de una base de datos
         deben ser definibles por medio del sublenguaje de datos relacional y habrán de
         almacenarse en el catálogo de la base de datos, no en los programas de
         aplicación.

     11. Independencia de la distribución. Debe existir un sublenguaje de datos que
         pueda soportar bases de datos distribuidas sin alterar los programas de
         aplicación cuando se distribuyan los datos por primera vez o se redistribuyan
         estos posteriormente.

     12. Regla de la no subversión. Si un SGBD soporta un lenguaje de bajo nivel que
         permite el acceso fila a fila, éste no puede utilizarse para saltarse las reglas de
         integridad expresadas por medio del lenguaje de más alto nivel.




Tema 2: El modelo relacional                                                             11
2.2 Álgebra relacional
La última parte del modelo relacional se divide a su vez en dos partes:

       •   Un conjunto de operadores que forman en conjunto la llamada álgebra
           relacional; y

       •   Una operación de asignación que asigna el valor de alguna expresión
           arbitraria del álgebra a una relación dada.

2.2.1 Introducción
El álgebra relacional consiste en un conjunto de operadores de alto nivel que operan
sobre relaciones. Cada uno de esos operadores toma una o dos relaciones como entrada,
y produce una nueva relación como salida. Sería imposible definir en principio
cualquier cantidad de operadores que se ajustaran a esta sencilla definición; no obstante,
Codd definió un conjunto muy específico de ocho operadores de este tipo, divididos en
dos grupos de cuatro:

       •   Las operaciones tradicionales de conjuntos unión, intersección, diferencia y
           producto cartesiano

       •   Las operaciones relacionales especiales restricción, proyección, reunión y
           división.

Cada uno de los operadores funciona del siguiente modo:

       •   RESTRICCIÓN: Extrae las tuplas especificadas de una relación dada (o sea,
           restringe la relación sólo a las tuplas que satisfagan una condición
           especificada). Hoy en día se conoce más como SELECCIONAR (SELECT).

       •   PROYECCIÓN: Extrae los atributos especificados de una relación dada.

       •   PRODUCTO: A partir de dos relaciones especificadas, construye una
           relación que contiene todas las combinaciones posibles de las tuplas, una de
           cada una de las dos relaciones.

       •   UNIÓN: Construye una relación formada por aquellas tuplas que aparecen
           en cualquiera de las dos relaciones especificadas.

       •   INTERSECCIÓN: Construye una relación formada por aquellas tuplas que
           aparezcan en las dos relaciones especificadas.

       •   DIFERENCIA: Construye una relación formada por todas las tuplas de la
           primera relación que no aparezcan en la segunda de las relaciones
           especificadas.

       •   REUNIÓN: A partir de dos relaciones especificadas, construye una relación
           que contiene todas las posibles combinaciones de tuplas, una de cada una de



Tema 2: El modelo relacional                                                           12
las dos relaciones, tales que las dos tuplas participantes en una combinación
             dada satisfagan alguna condición especificada.

       •     DIVISIÓN: Toma dos relaciones, una binaria y una unaria, y construye una
             relación formada por todos los valores de un atributo de la relación binaria
             que concuerdan (en el otro atributo) con todos los valores en la relación
             unaria.

                                                                      Producto
           Selección                 Proyección

                                                              a   x              a   x
                                                              b   y              a   y
                                                              c                  b   x
                                                                                 b   y
                                                                                 c   x
                                                                                 c   y



           Unión                      Intersección                        Diferencia




                         Reunión                                      División


      a1 b1            b1 c1       a1 b1 c1           a   x       x                    a
      a2 b2            b2 c2       a2 b2 c2           a   y       y
      a3 b3            b3 c3       a3 b3 c3           a   z
                                                      b   x
                                                      c   y




El resultado de cada una de las operaciones es una relación. Es posible, por tanto,
utilizar el resultado de una operación como operando para la siguiente, es decir, es
posible escribir expresiones relacionales anidadas.

Hemos descuidado deliberadamente el tratamiento de la distinción entre cabecera y
cuerpo de una relación. Evidentemente, toda relación base tendrá una cabecera y un
cuerpo, pero ¿qué ocurre con las relaciones no nombradas? Es importante que una
relación resultante tenga un conjunto apropiado de nombre de atributo puesto que podría



Tema 2: El modelo relacional                                                               13
ser el resultado de una expresión anidada en otra más grande, y necesitaremos alguna
forma de referirnos a los atributos.

Por tanto, con el único objetivo de garantizar que todas las relaciones resultantes de
nuestra álgebra relacional tienen cabeceras apropiadas, definiremos un operador de
renombrado, cuyo propósito será cambiar el nombre de los atributos dentro de una
relación.

2.2.2 Operaciones tradicionales de conjuntos
2.2.2.1 Unión

Aunque el resultado de la unión es un conjunto, no es una relación. Las relaciones no
pueden contener una mezcla de diferentes tipos de tuplas. Por tanto, debe cumplirse la
compatibilidad respecto a la unión, lo que garantiza que las cabeceras de las relaciones
que participan del operador en la expresión son exactamente iguales.

La unión de dos relaciones A y B compatibles respecto a la unión,

                                        A⋃B

es una relación cuya cabecera es idéntica a la de A o B y cuyo cuerpo está formado por
todas las tuplas t pertenecientes ya sea a A o a B (o a las dos).

2.2.2.2 Intersección

La intersección de dos relaciones A y B compatibles respecto a la unión,

                                        A⋂B

es una relación cuya cabecera es idéntica a la de A o B y cuyo cuerpo está formado por
todas las tuplas t pertenecientes tanto a A como a B.

2.2.2.3 Diferencia

La diferencia de dos relaciones A y B compatibles respecto a la unión,

                                         A–B

es una relación cuya cabecera es idéntica a la de A o B y cuyo cuerpo está formado por
todas las tuplas t pertenecientes a A pero no a B.

2.2.2.4 Producto cartesiano ampliado

En matemáticas, el producto cartesiano de dos conjuntos es el conjunto de todos los
pares ordenados de elementos tales que el primer elemento de cada par pertenece al
primer conjunto y el segundo elemento de cada par pertenece al segundo conjunto. Así,
el producto cartesiano de dos relaciones sería un conjunto de pares ordenados de tuplas.

Sin embargo, para conservar la propiedad de cerradura, deseamos que el resultado sea
un conjunto de tuplas, no de pares ordenados de tuplas. Por tanto, la versión del
producto cartesiano en álgebra relacional es una forma ampliada de la operación, en la


Tema 2: El modelo relacional                                                         14
cual cada par ordenado de tuplas es reemplazado por la tupla resultante de la
combinación de las dos tuplas en cuestión.

Adicionalmente, es necesario que, para obtener la relación final, no existan nombres de
atributos iguales en ambas tablas, o de lo contrario existirían conflictos para
distinguirlos. A esta condición se le denomina compatibilidad respecto al producto.

Definimos el producto cartesiano de dos relaciones (compatibles respecto al producto)
A y B,

                                         AxB

como una relación cuya cabecera es la combinación de las cabeceras de A y B y cuyo
cuerpo está formado por el conjunto de todas las tuplas t tales que t es la combinación
de una tupla a perteneciente a A y una tupla b perteneciente a B.

2.2.3 Operaciones relacionales especiales
2.2.3.1 Selección

La operación selección selecciona tuplas de una relación que satisfacen un predicado
dado. Se utiliza la letra griega sigma minúscula (σ) para denotar la selección. El
predicado aparece como un subíndice de la letra sigma. Por ejemplo, una selección
típica sobre una relación A se puede escribir como:

                                     σcampo=”dato”(A)

lo que indica que el resultado de la operación es una relación que contiene aquellas
tuplas de A que cumplen la condición que el campo “campo” tiene el valor “dato”.

Es posible utilizar en el predicado los operadores ≤, ≥, ≠, <, >, =. También es
posible combinar predicados con los operadores booleanos ∧ ∨, que indican un AND y
un OR lógicos.

2.2.3.2 Proyección

La operación proyección sobre una relación dada devuelve una relación que contiene
sólo los campos especificados junto con el operador. Se representa por la letra griega pi
minúscula (π), con los campos objeto de la proyección como subíndices del operador.
Por ejemplo:

                                       πc1,c2,c3(A)

devolvería una relación formada por los campos, c1, c2 y c3 de la relación A.

2.2.3.3 Renombramiento

Es una operación que se utiliza para cambiar el nombre de una relación, o de sus
atributos. Esta operación se hace necesaria cuando se debe trabajar varias veces con la
misma relación como operando, o cuando existen nombres de relaciones y atributos


Tema 2: El modelo relacional                                                          15
idénticos como operandos en una misma operación. El operador se representa por la
letra griega ro (ρ), y toma como subíndice el nuevo nombre para la relación sobre la que
actúa. Por ejemplo:

                                         ρx(A)

indica que el resultado de la operación es una nueva relación con el nombre x. Si se
desea cambiar también el nombre de los atributos, se indica del siguiente modo:

                                    ρx(A1,A2,...,An)(A)

donde A1, A2, ... An son los nuevos nombres de los atributos.

2.2.3.4 Reunión natural

La operación de reunión tiene varias formas distintas. La más importante es la reunión
natural, definida como:

Sean las cabeceras de las relaciones A y B: (X1,X2,…,Xm,Y1,Y2,…,Yn) y
(Y1,Y2,…Yn,Z1,Z2,…,Zp) respectivamente; es decir, los atributos Y1,Y2,…,Yn son
los únicos comunes a las dos relaciones. Suponemos que los atributos con el mismo
nombre están definidos sobre el mismo dominio. Consideremos (X1,X2,…,Xm),
(Y1,Y2,…,Yn) y (Z1,Z2,…,Zp) como tres atributos compuestos X, Y, Z
respectivamente. La reunión natural de A y B,

                                         A⋈B

es una relación con la cabecera (X,Y,Z) y un cuerpo formado por el conjunto de todas
las tuplas (X:x,Y:y,Z:z) tales que una tupla a aparezca en A con el valor x en X y el
valor y en Y, y una tupla b aparezca en B con el valor y en Y y el valor z en Z.

Si A y B no tienen nombres de atributos en común, la unión natural degenera en el
producto cartesiano.

2.2.3.5 Reunión theta

La reunión theta es adecuada para aquellas ocasiones en las que necesitamos juntar dos
relaciones con base en alguna condición diferente a la igualdad.

La operación reunión theta es una extensión de la operación de reunión natural que
permite combinar una selección y un producto cartesiano en una sola operación.
Supongamos las relaciones A y B, y sea theta (θ) un predicado de los atributos del
esquema R⋃S. La operación reunión theta se define entonces como:

                                  A⋈θB = σθ(AxB)

2.2.3.6 División

Sean las cabeceras de las relaciones A y B: (X1,X2,…,Xm,Y1,Y2,…,Yn) y
(Y1,Y2,…,Yn) respectivamente; es decir, los atributos Y1,Y2,…,Yn son comunes a las


Tema 2: El modelo relacional                                                         16
dos relaciones. Además, A tiene los atributos X1,X2,…,Xm y B no tiene otros atributos.
Vamos a suponer que los atributos con el mismo nombre están definidos sobre el mismo
dominio. Consideremos ahora (X1,X2,…,Xm) y (Y1,Y2,…,Yn) como dos atributos
compuestos X e Y respectivamente. La división de A entre B,

                                         A÷B

es una relación con la cabecera X y un cuerpo formado por el conjunto de todas las
tuplas (X:x) tales que aparece una tupla (X:x,Y:y) en A para todas las tuplas (Y:y)
presentes en B.

En otras palabras, el resultado contiene todos los valores de X en A cuyos valores de Y
correspondientes en A incluyen a todos los valores de Y en B, en términos informales.

2.2.3.7 Asignación relacional

El propósito de esta operación es poder recordar el valor de alguna expresión algebraica
y así modificar el estado de la base de datos. Pero la asignación de relaciones es una
operación un tanto burda, en cuanto a que sólo permite la sustitución total del valor
completo de una relación. Se define del siguiente modo del siguiente modo:

                                   Temp ← Expresion

que indica que el resultado de una expresión (una relación) queda almacenado en la
relación Temp, que suele tener carácter temporal.

2.2.4 Operaciones del álgebra relacional extendida
2.2.4.1 Proyección generalizada

La operación proyección generalizada amplía la operación proyección permitiendo que
se utilicen operaciones aritméticas en la lista de proyección. La proyección generalizada
tiene la siguiente forma:

                                      πF1,F2,…,Fn(A)

donde E es cualquier expresión del álgebra relacional, y F1, F2, ..., Fn son expresiones
aritméticas que incluyen constantes y atributos en el esquema de E. Como caso especial,
la operación aritmética puede ser sólo un atributo o una constante.

2.2.4.2 Reunión externa

Es una forma ampliada de la operación de reunión natural, en cuyo resultado aparecen
las tuplas de una relación que no tienen contraparte en la otra, poniendo valores nulos en
las posiciones de los demás atributos (en vez de hacerse caso omiso de ellos, como en la
reunión natural).

Existen tres tipos distintos de reuniones externas, y operadores para cada una de ellas:
reunión externa por la izquierda ( ), reunión externa por la derecha ( ) y reunión
externa completa( ). En el primer caso, se realiza una reunión natural, y se incluyen
en la relación final las tuplas de la primera relación que no tienen contraparte en la


Tema 2: El modelo relacional                                                           17
segunda (añadiendo nulos para los valores de las tuplas de la segunda relación); en el
segundo caso es a la inversa, y se añaden a la reunión natural las tuplas de la segunda
relación que no tienen contraparte en la primera relación (añadiendo nulos para los
valores de las tuplas de la primera relación); y el tercer caso corresponde a la
combinación de los casos primero y segundo, es decir, se incluyen en la reunión natural
todas las tuplas de la primera y segunda relación que no tienen contraparte en la otra.

2.2.4.3 Funciones de agregación

Las funciones de agregación se definen con el objetivo de facilitar el trabajo sobre las
relaciones, permitiendo cierto tipo de cálculos aritméticos sobre las tuplas o los
atributos.

Estas funciones toman una colección de valores y devuelven como resultado un único
valor. Existen varias funciones de agregación que se detallan a continuación:

       •   sum. Toma un conjunto de valores y devuelve la suma de los mismos. Por
           ejemplo, sumsueldo(nominas)

       •   avg. Toma un conjunto de valores y devuelve la media de los mismos. Por
           ejemplo, avgsueldo(nominas)

       •   min. Toma un conjunto de valores y devuelve el mínimo de los mismos. Por
           ejemplo, minsueldo(nominas)

       •   max. Toma un conjunto de valores y devuelve el máximo de los mismos. Por
           ejemplo, maxsueldo(nominas)

       •   count. Toma un conjunto de valores y devuelve el número de elementos del
           conjunto. Por ejemplo, countsucursal(empleado)

       •   ʛ. Realiza una agrupación de los valores que toma, siguiendo un criterio de
           igualdad para un atributo o un conjunto de ellos. Es un operador que no tiene
           sentido utilizarlo sólo, sino que se suele combinar con alguna función de
           agregación. Por ejemplo,    nombre-sucursal,ciudadʛ   sumsueldo,maxsueldo (empleado) o
           bien, nombre-sucursalʛ sumsueldo (empleado)



2.2.5 Modificaciones de la base de datos
También es posible expresar en álgebra relacional la realización de ciertas operaciones
sobre la base de datos, con el objetivo de modificar su contenido. Veremos brevemente
las formas más habituales para expresar dichas modificaciones.

2.2.5.1 Borrado

                                         r←r–E




Tema 2: El modelo relacional                                                                  18
2.2.5.2 Inserción

Para insertar el resultado de una expresión se puede utilizar:

                                         r←r⋃E

pero también se pueden insertar valores constantes del siguiente modo:

                            r ← r ⋃ {(“Fuengirola”,124.765)}

2.2.5.3 Actualización

Para modificar el valor de una tupla sin modificarlas todas, se puede utilizar:

                                     r ← πF1,F2,…,Fn(r)

y si se desea seleccionar varias tuplas y modificar sólo esas tuplas, se puede utilizar:

                            r ← πF1,F2,…,Fn(σP(r)) ⋃ (r – σP(r))

2.2.5.4 Creación de vistas

La creación de una vista se puede realizar del siguiente modo:

                               create view v as Expresión




Tema 2: El modelo relacional                                                               19
2.3 Cálculo relacional
2.3.1 Introducción
El álgebra relacional y el cálculo relacional son dos alternativas para establecer una base
formal de la parte manipulativa del modelo relacional. La diferencia entre ellas es la
siguiente: mientras que el álgebra ofrece un conjunto de operaciones explícitas que
pueden servir en la práctica para indicar al sistema la forma de construir alguna relación
deseada a partir de las relaciones dadas en la base de datos, el cálculo solo ofrece una
notación para formular la definición de esa relación deseada en términos de esas
relaciones dadas.

Además, la formulación del cálculo es descriptiva donde la algebraica es prescriptiva: el
cálculo sólo plantea el problema, mientras que el álgebra proporciona un procedimiento
para resolverlo.

En realidad, el álgebra y el cálculo son equivalentes. Para cada expresión del álgebra
existe una expresión equivalente en el cálculo, y a la inversa.

El cálculo relacional se fundamenta en una rama de la lógica matemática llamada
cálculo de predicados. La idea es utilizar el cálculo de predicados como base para un
lenguaje de bases de datos. El concepto de cálculo relacional fue propuesto por primera
vez por Codd.

2.3.2 Calculo relacional de tuplas
Cuando escribimos una expresión del álgebra relacional proporcionamos una serie de
procedimientos que generan la respuesta a la consulta. El cálculo relacional de tuplas,
en cambio, es un lenguaje de consulta no procedimental. Describe la información
deseada sin dar un procedimiento específico para obtenerla.

Las consultas se expresan en el cálculo relacional de tuplas como:

                                        { t | P(t) }

es decir, son el conjunto de todas las tuplas tales que el predicado P es cierto para t.
Siguiendo la notación utilizada previamente, se utiliza t[A] para denotar el valor de la
tupla t en el atributo A, y t ∈ r para denotar que la tupla t está en la relación r.

Antes de dar una definición formal del cálculo relacional de tuplas veremos algunos
ejemplos.

2.3.2.1 Consultas de ejemplo

Supóngase que se desea averiguar nombre-sucursal, número-préstamo e importe de los
préstamos superiores a 240.000 ptas.:

                       { t | t ∈ préstamo ∧ t[importe] > 240000 }




Tema 2: El modelo relacional                                                            20
Supóngase que sólo se desea obtener el atributo número-préstamo, en vez de todos los
atributos para la relación préstamo. Para escribir esta consulta en el cálculo relacional de
tuplas hay que escribir una expresión para una relación del esquema (número-préstamo).
Se necesitan las tuplas de (número-préstamo) tales que hay una tupla en préstamo con el
atributo importe > 240000. Para expresar esta solicitud hay que utilizar el constructor
‘existe’ de la lógica matemática. La notación

                                       ∃ t ∈ r (Q(t))

significa ‘existe una tupla t en la relación r tal que el predicado Q(t) es verdadero’.

Utilizando esta notación se puede escribir la consulta ‘Averiguar el número de préstamo
de todos los préstamos por importe superior a 240.000 ptas.’ como

{t | ∃ s ∈ préstamo (t[número-préstamo] = s[número-préstamo ^ s[importe] > 240000)}

En español la expresión anterior se lee ‘el conjunto de todas las tuplas t tales que existe
una tupla s en la relación préstamo para la que los valores de t y de s para el atributo
número-préstamo son iguales y el valor de s para el atributo importe es mayor que
240.000 ptas.’.

La variable tupla t sólo se define para el atributo número-préstamo, dado que es el único
atributo para el que se especifica una condición para t. Por tanto, el resultado es una
relación de (número- préstamo).

Considérese la consulta ‘Averiguar el nombre de todos los clientes que tienen
concedido un préstamo en la sucursal de Navacerrada’. Esta consulta es un poco más
compleja que las anteriores, dado que implica a dos relaciones: prestatario y préstamo.
Como se verá, sin embargo, todo lo que necesita es que tengamos dos instrucciones
‘existe’ en la expresión de cálculo relacional de tuplas, relacionadas mediante y (∧). La
consulta se escribe de la manera siguiente:

   {t | s ∈ prestatario (t[número-préstamo] = s[número-préstamo] ∧ ∃ u ∈ préstamo
 (u[número-préstamo] = s[número-préstamo] ∧ u[nombre-sucursal] = “Navacerrada”)}

En español esta expresión es ‘el conjunto de todas las tuplas (nombre-cliente) para las
que el cliente tiene un préstamo concedido en la sucursal de Navacerrada’. La variable
tupla u asegura que el cliente es prestatario de la sucursal de Navacerrada. La variable
tupla s está restringida para que corresponda al mismo número de préstamo que s.

Para averiguar todos los clientes del banco que tienen concedido un préstamo, una
cuenta abierta, o ambas cosas, se utiliza la operación unión del álgebra relacional. En el
cálculo relacional de tuplas harán falta dos instrucciones ‘existe’ relacionadas por o (∨):

    {t | ∃ s ∈ prestatario (t[nombre-cliente] = s[nombre-cliente]) ∨ ∃ u ∈ impositor
                         (t[nombre-cliente] = u[nombre-cliente])}

Esta expresión da el conjunto de todas las tuplas de nombre-cliente tales que se cumple
al menos una de las condiciones siguientes:



Tema 2: El modelo relacional                                                              21
•   nombre-cliente aparece en alguna tupla de la relación prestatario como
       prestatario del banco.
   •   nombre-cliente aparece en alguna tupla de la relación impositor como impositor
       del banco.

Si algún cliente tiene concedido un préstamo y una cuenta abierta en el banco, ese
cliente sólo aparece una vez en el resultado, ya que la definición matemática de
conjunto no permite elementos duplicados.

Si sólo queremos conocer los clientes que tienen en el banco una cuenta y un préstamo,
todo lo que hay que hacer es cambiar en la expresión anterior la o (∨) por una y (∧).

    {t | ∃ s ∈ prestatario (t[nombre-cliente] = s[nombre-cliente]) ∧ ∃ u ∈ impositor
                         (t[nombre-cliente] = u[nombre-cliente])}

Considérese ahora la consulta ‘Averiguar todos los clientes que tienen una cuenta
abierta en el banco pero no tienen concedido ningún préstamo’. La expresión del
cálculo relacional de tuplas para esta consulta es parecida a las expresiones que se
acaban de ver, salvo el uso del símbolo no (¬):

   {t | ∃ u ∈ impositor (t[nombre-cliente] = u[nombre-cliente]) ∧ ¬ ∃ s ∈ prestatario
                        (t[nombre-cliente] = s[nombre-cliente])}

La expresión del cálculo relacionar de tuplas anterior utiliza la instrucción ∃ u ∈
impositor ( ... ) para exigir que el cliente tenga una cuenta abierta en el banco, y utiliza
la instrucción ¬ ∃ s ∈ prestatario ( ... ) para borrar a aquellos clientes que aparecen en
alguna tupla de la relación prestatario por tener un préstamo del banco.

La consulta que se tomará ahora en consideración utiliza la implicación, denotada por
⇒. La fórmula P ⇒ Q significa que ‘P implica Q’; es decir, ‘si P es verdad, entonces Q
debe ser verdad’. Obsérvese que P ⇒ Q es lógicamente equivalente a ¬ P ∨ Q. El uso
de la implicación en lugar de no y o suele sugerir una interpretación más intuitiva de la
consulta en español.

Considérese la consulta para ilustrar la operación división: ‘Averiguar todos los clientes
que tienen una cuenta en todas las sucursales sitas en Arganzuela’. Para escribir esta
consulta en el cálculo relacional de tuplas se introduce el constructor ‘para todo’,
denotado por ∀. La notación

                                       ∀ t ∈ r (Q(t))

significa ‘Q es verdadera para todas las tuplas t de la relación r.

La expresión para la consulta se escribe de la manera siguiente:

 {t | ∀ u ∈ sucursal (u[ciudad-sucursal] = “Arganzuela” ⇒ ∃ s ∈ impositor (t[nombre-
cliente] = s[nombre-cliente] ∧ ∃ w ∈ cuenta (w[número-cuenta] = s[número-cuenta] ∧
                    w[nombre-sucursal] = u[nombre-sucursal])))}




Tema 2: El modelo relacional                                                             22
En español esta expresión se interpreta como ‘el conjunto de todos los clientes -es decir,
las tuplas t (nombre-cliente)- tales que para todas las tuplas u de la relación sucursal, si
el valor de u en el atributo ciudad-sucursal es Arganzuela, el cliente tiene una cuenta en
la sucursal cuyo nombre aparece en el atributo nombre-sucursal de u’.

2.3.2.2 Definición formal

Ahora se tiene la preparación necesaria para una definición formal. Las expresiones del
cálculo relacionar de tuplas son de la forma

                                         {t | P(t)}

donde P es una fórmula. En una fórmula pueden aparecer varias variables tupla. Se dice
que una variable tupla es una variable libre a menos que esté cuantificada mediante ∃ o
∀. Por tanto, en

        t ∈ préstamo ∧ ∃ s ∈ cliente (t[nombre-sucursal] = s[nombre-sucursal])

t es una variable libre. La variable tupla s se denomina variable ligada. Las fórmulas de
cálculo relacional de tuplas se construyen con átomos. Los átomos tienen una de las
formas siguientes:

   •   s ∈ r, donde s es una variable tupla y r es una relación (no se permite el uso del
       operador ∉).
   •   S[x] Θ u[y], donde s y u son variables tuplas, x es un atributo en el que está
       definida s, y es un atributo en el que está definida u, y Θ es un operador de
       comparación (<, ≤, =, ≠, >, ≥); es necesario que los atributos x e y tengan
       dominios cuyos miembros puedan compararse mediante Θ).
   •   S[x] Θ c, donde s es una variable tupla, x es un atributo en el que está definida s,
       Θ es un operador de comparación y c es una constante en el dominio del atributo
       x.

Las fórmulas se construyen a partir de los átomos utilizando las reglas siguientes:

   •   Un átomo es una fórmula.
   •   Si P es una fórmula, también lo son ¬ P y (P).
   •   Si P y Q son fórmulas, también lo son P ∨ Q, P ∧ Q y P ⇒ Q.
   •   Si P(s) es una fórmula que contiene una variable tupla libre s y r es una relación,
       ∃ s ∈ r (P(S)) y ∀ s ∈ r (P(S)) también son fórmulas.

Igual que en el álgebra relacional, se pueden escribir expresiones equivalentes que no
sean idénticas en apariencia. En el cálculo relacional de tuplas estas equivalencias
incluyen las tres reglas siguientes:

   •   P ∧ Q es equivalente a - (¬ P, ∨ ¬Q).
   •   ∀ t ∈ r (P(t) es equivalente a ¬ ∃ t ∈ r (¬ P(t)).
   •   P ⇒ Q es equivalente a ¬ P ∨ Q




Tema 2: El modelo relacional                                                             23
2.3.2.3 Seguridad de las expresiones

Queda un último asunto por tratar. Las expresiones del cálculo relacional de tuplas
pueden generar relaciones infinitas. Supóngase que se escribió la expresión

                                { t | ¬ (t ∈ préstamo r) }

Hay infinitas tuplas que no están en préstamo. La mayor parte de estas tuplas contienen
valores que ni siquiera aparecen en la base de datos. Resulta evidente que no se desea
permitir ese tipo de expresiones.

Para ayudar a definir las ligaduras del cálculo relacionar de tuplas se introduce el
concepto de dominio de una fórmula relacional de tuplas, P. De manera intuitiva, el
dominio de P, denotado por dom(P), es el conjunto de todos los valores a los que P hace
referencia. Esto incluye a los valores mencionados en la propia P, así como a los valores
que aparezcan explícitamente en P o en una o en varias relaciones cuyos nombres
aparezcan en P. Por ejemplo, dom(t ∈ préstamo ∧ t[importe] > 240000) es el conjunto
que contiene a 240.000 y el conjunto de todos los valores que aparecen en préstamo.
Además, dom(¬(t ∈ préstamo)) es el conjunto de todos los valores que aparecen en
préstamo, dado que la relación préstamo se menciona en la expresión.

Se dice que una expresión {t | P(t)} es segura si todos los valores que aparecen en el
resultado son valores de dom(P). La expresión {t | ¬ (t ∈ préstamo)} no es segura.
Obsérvese que dom(¬ (t ∈ préstamo)) es el conjunto de todos los valores que aparecen
en préstamo. Sin embargo, es posible tener una tupla t que no esté en préstamo que
contenga valores que no aparezcan en préstamo. El resto de ejemplos de expresiones del
cálculo relacionar de tuplas que se han escrito en este apartado son seguros.

2.3.2.4 Potencia expresiva de los lenguajes

El cálculo relacionar de tuplas restringido a expresiones seguras es equivalente en
potencia expresiva al álgebra relacional. Por tanto, para cada expresión del álgebra
relacional hay una expresión equivalente del cálculo relacionar de tuplas, y para cada
expresión del cálculo relacional de tuplas hay una expresión equivalente del álgebra
relacionar.

2.3.3 Calculo relacional de dominios
Hay una segunda forma de cálculo relacionar denominada cálculo relacional de
dominios. Esta forma utiliza variables de dominio que toman sus valores del dominio de
un atributo, en vez de tornarlos de una tupla completa. El cálculo relacional de
dominios, sin embargo, se halla estrechamente relacionado con el cálculo relacional de
tuplas.

2.3.3.1 Definición formal

Las expresiones del cálculo relacionar de dominios son de la forma

                             {<x1,x2,...,xn> | P(x1,x2,...,xn)}




Tema 2: El modelo relacional                                                          24
donde x1,x2,...,xn representan las variables de dominio, P representa una fórmula
compuesta de átomos, como era el caso en el cálculo relacional de tuplas. Los átomos
del cálculo relacional de dominios tienen una de las formas siguientes:

   •   <x1,x2,...,xn> ∈ r, donde r es una relación con n atributos y x1,x2,...,xn son
       variables de dominio o constantes de dominio.
   •   x Θ y, donde x e y son variables de dominio y Θ es un operador de comparación
       (<, ≤, =, ≠, >, ≥). Se exige que los atributos x e y tengan dominios que puedan
       compararse mediante Θ.
   •   x Θ c, donde x es una variable de dominio, Θ es un operador de comparación y c
       es una constante del dominio del atributo para el que x es una variable de
       dominio.

Las fórmulas se construyen a partir de los átomos utilizando las reglas siguientes:

Un átomo es una fórmula.

Si P es una fórmula, también lo son ¬ P y (P).

Si P y Q son fórmulas, también lo son P ∨ Q, P ∧ Q y P ⇒ Q.

Si P(x) es una fórmula en x, donde x es una variable de dominio, ∃ x (P(x)) y ∀ x (P(x))
también son fórmulas. Corno notación abreviada, se escribe ∃ a, b, c (P(a, b, c)) en lugar
de ∃ a (∃ b (∃ c (P(a, b, c)))

2.3.3.2 Consultas de ejemplo

Ahora se van a utilizar consultas del cálculo relacionar de dominios para los ejemplos
considerados anteriormente. Obsérvese la similitud de estas expresiones con las
expresiones correspondientes del cálculo relacionar de tuplas:

Averiguar el nombre de la sucursal, el número de préstamo y el importe de los
préstamos superiores a 240.000 ptas.:

                   {< b, l, a > | < b, l, a > ∈ préstamo ∧ a > 240000}

Averiguar todos los números de préstamo de los préstamos por importe superior a
240.000 ptas.:

                  {< 1 > | ∃ b, a < b, l, a > ∈ préstamo ∧ a > 240000)}

Aunque la segunda consulta tenga un aspecto muy parecido al de la que se escribió para
el cálculo relacionar de tuplas, hay una diferencia importante. En el cálculo de tuplas,
cuando se es- cribe ∃ s para alguna variable tupla s, se vincula inmediatamente con una
relación escribiendo ∃ s ∈ r. Sin embargo, cuando se escribe ∃ b en el cálculo de
dominios, b no se refiere a una tupla, sino a un valor de dominio. Por tanto, el dominio
de la variable b no está restringido hasta que la subfórmula b, l, a ∈ préstamo restringe b
a los nombres de sucursal que aparecen en la relación préstamo.




Tema 2: El modelo relacional                                                            25
Averiguar el nombre de todos los clientes que tienen concedido un préstamo en la
sucursal de Navacerrada y averiguar el importe del préstamo:

{< c, a > | ∃ l (<c,l> ∈ prestatario ∧ ∃ b (<b, l, a > ∈ préstamo ∧ b = “Navacerrada”))}

Averiguar el nombre de todos los clientes que tienen concedido un préstamo, una cuenta
abierta, o ambas cosas, en la sucursal de Navacerrada:

 {< c > | ∃ l (<c,l> ∈ prestatario ∧ ∃ b,a (<b, l, a > ∈ préstamo ∧ b = “Navacerrada”))
       ∨ ∃ a (<c,a> ∈ impositor ∧ ∃ b,n (<b, a, n > ∈ cuenta ∧ b = “Navacerrada”))}

Averiguar el nombre de todos los clientes que tienen una cuenta abierta en todas las
sucursales sitas en Arganzuela:

             {< c > | ∀ x, y, z (< x, y, z > ∈ sucursal) ∧ y = “Arganzuela” ⇒
                     ∃ a,b (<x, a, b > ∈ cuenta ∧ <c, a > ∈ impositor)}

En español la expresión anterior se interpreta como ‘el conjunto de todas las tuplas c
(nombre-cliente) tales que para todas las tuplas x, y, z (nombre-sucursal, ciudad-
sucursal, activos), si la ciudad de la sucursal es Arganzuela, las siguientes afirmaciones
son verdaderas’:

   •     Existe una tupla de la relación cuenta con número de cuenta a y nombre de
         sucursal x.
   •     Existe una tupla de la relación impositor con cliente e y número de cuenta a.

2.3.3.3 Seguridad de las expresiones

Ya se observó que en el cálculo relacional de tuplas es posible escribir expresiones que
pueden generar relaciones infinitas. Esto llevó a definir la seguridad de las expresiones
de cálculo relacionar de tuplas. Se produce una situación parecida en el cálculo
relacionar de dominios. Las expresiones como

                           {<b, l, a> | ¬(<b, l, a> ∈ préstamo)}

no son seguras, porque permiten valores del resultado que no están en el dominio de la
expresión.

En el cálculo relacional de dominios también hay que tener en cuenta la forma de las
fórmulas dentro de las instrucciones ‘existe’ y ‘para todo’. Considérese la expresión

                  { <x> | ∃ y (<x,y> ∈ r) ∧ ∃ z (¬(<x,z> ∈ r) ∧ P(x,z)) }

donde P es una fórmula que implica a x y a z. Se puede probar la primera parte de la
fórmula, ∃ y (<x,y> ∈ r), tomando en consideración sólo los valores de r. Sin embargo,
para probar la segunda parte de la fórmula, ∃ z (¬(<x,z> ∈ r) ∧ P(x,z)), hay que tomar
en consideración valores de z que no aparecen en r. Dado que todas las relaciones son
finitas, no aparece en r un número infinito de valores. Por tanto, no resulta posible en
general probar la segunda parte de la fórmula sin tomar en consideración un número



Tema 2: El modelo relacional                                                           26
infinito de valores de z. En vez de eso, se añaden ligaduras para prohibir expresiones
como la anterior.

En el cálculo relacionar de tuplas se restringió cualquier variable cuantificada
existencialmente a variar sobre una relación concreta. Dado que no se hizo así en el
cálculo de dominios, hay que añadir reglas a la definición de seguridad para tratar los
casos parecidos a los del ejemplo. Se dice que la expresión

                             {<x1,x2,...,xn> | P(x1,x2,...,xn)}

es segura si se cumplen todas las condiciones siguientes:

   •   Todos los valores que aparecen en las tuplas de la expresión son valores de
       dom(P).
   •   Para cada subfórmula ‘existe’ de la forma ∃ x (P(x)), la subfórmula es cierta si y
       sólo si hay un valor x en dom(P) tal que P(x) es verdadero.
   •   Para cada subfórmula para todo de la forma ∀ x (P(x)), la subfórmula es
       verdadera si y sólo si P(x) es verdadero para todos los valores x de dom(P).

El propósito de las reglas adicionales es asegurar que se puedan probar las subfórmulas
‘para todo’ y ‘existe’ sin tener que probar infinitas posibilidades. Considérese la
segunda regla de la definición de seguridad. Para que ∃ x (P(x)) sea verdadero sólo hay
que encontrar una x para la que P(x) lo sea. En general, habría que probar infinitos
valores. Sin embargo, si la expresión es segura, se sabe que se puede restringir la
atención a los valores de dom(P). Esta ligadura reduce las tuplas que hay que tomar en
consideración a un número finito.

La situación de las subfórmulas de la forma ∀ x (P(x)) es parecida. Para asegurar que ∀
x (P(x)) es verdadero hay que probar en general todos los valores posibles, por lo que
hay que examinar infinitos valores. Como antes, si se sabe que la expresión es segura,
basta con probar P(x) para los valores tomados de dom(P).

Todas las expresiones del cálculo relacionar de dominios que se han incluido en las
consultas de ejemplo de este apartado son seguras.

2.3.3.4 Potencia expresiva de los lenguajes

Cuando el cálculo relacional de dominios se restringe a expresiones seguras, es
equivalente en potencia expresiva al cálculo relacional de tuplas restringido a
expresiones seguras. Dado que se observó anteriormente que el cálculo relacional de
tuplas restringido es equivalente al álgebra relacional, los tres lenguajes siguientes son
equivalentes:

   •   El álgebra relacionar.
   •   El cálculo relacional de tuplas restringido a expresiones seguras.
   •   El cálculo relacional de dominios restringido a expresiones seguras.




Tema 2: El modelo relacional                                                           27
2.3.4 Query by example
Es un lenguaje relacional utilizado en el QMF de IBM (junto con SQL). QBE puede
considerarse como una realización especialmente atractiva del cálculo de dominios (por
la sencillez de su sintaxis).

Básicamente, se trata de pedir al sistema unas tablas base sobre las que se distribuyen
ejemplos (variables de dominio) en función de lo que se pretenda obtener, y el sistema
computa los ejemplos proporcionados y devuelve los resultados que solicita el usuario.

Ejemplo: “obtener los nombres de los proveedores que suministran al menos una parte
suministrada por el proveedor S2”


 S      S#      SNOMBRE              SP      S#       P#            SP       S#       P#
       _SX P._NOMBREX                       _SX      _PX                     S2      _PX

El usuario pide al sistema que presente tres esqueletos de tablas en la pantalla, un para S
y dos para SP y los llena como se muestra. Las entradas que comienzan con un _
representan ejemplos; otras entradas representan literales. El usuario pide al sistema que
imprima (P.) valores de nombre de proveedor (_NOMBREX tales que, si el proveedor
es _SX, _SX suministra alguna parte _PX, y la parte _PX a su vez es suministrada por
el proveedor S2. Todos los cuantificadores existenciales están implícitos.




Tema 2: El modelo relacional                                                            28

Más contenido relacionado

Similar a Capitulo 2

Similar a Capitulo 2 (20)

Modificaciones De Ansi Sql
Modificaciones De Ansi SqlModificaciones De Ansi Sql
Modificaciones De Ansi Sql
 
Modificaciones De Ansi Sql
Modificaciones De Ansi SqlModificaciones De Ansi Sql
Modificaciones De Ansi Sql
 
03 Modelo Relacional
03 Modelo Relacional03 Modelo Relacional
03 Modelo Relacional
 
Diseño Logico de Base de datos Relacionales
Diseño Logico de Base de datos RelacionalesDiseño Logico de Base de datos Relacionales
Diseño Logico de Base de datos Relacionales
 
Tarea de la unidad 7
Tarea de la unidad 7Tarea de la unidad 7
Tarea de la unidad 7
 
Tema2 disenio logico
Tema2 disenio logicoTema2 disenio logico
Tema2 disenio logico
 
Base datos f03
Base datos f03Base datos f03
Base datos f03
 
clase 3-MODELO RELACIONAL.ppt
clase 3-MODELO RELACIONAL.pptclase 3-MODELO RELACIONAL.ppt
clase 3-MODELO RELACIONAL.ppt
 
4. normalización
4. normalización4. normalización
4. normalización
 
4. normalización
4. normalización4. normalización
4. normalización
 
4. normalización
4. normalización4. normalización
4. normalización
 
4. normalización
4. normalización4. normalización
4. normalización
 
4 150111191821-conversion-gate01
4 150111191821-conversion-gate014 150111191821-conversion-gate01
4 150111191821-conversion-gate01
 
4. normalización
4. normalización4. normalización
4. normalización
 
4. normalización123
4. normalización1234. normalización123
4. normalización123
 
4. normalización
4. normalización4. normalización
4. normalización
 
4
44
4
 
4. Normalización
4. Normalización4. Normalización
4. Normalización
 
4. normalización
4. normalización4. normalización
4. normalización
 
4. normalización
4. normalización4. normalización
4. normalización
 

Más de Luis Gonzales (20)

Diag
DiagDiag
Diag
 
Textol
TextolTextol
Textol
 
radio
radioradio
radio
 
Roboticaycnc
RoboticaycncRoboticaycnc
Roboticaycnc
 
Lamaqdc
LamaqdcLamaqdc
Lamaqdc
 
81
8181
81
 
81
8181
81
 
Condeganizacion
CondeganizacionCondeganizacion
Condeganizacion
 
Inversionista I
Inversionista IInversionista I
Inversionista I
 
Rrpp
RrppRrpp
Rrpp
 
Proto
ProtoProto
Proto
 
Calidad En Las Organizaciones
Calidad En Las OrganizacionesCalidad En Las Organizaciones
Calidad En Las Organizaciones
 
Oi Unidad3
Oi Unidad3Oi Unidad3
Oi Unidad3
 
Oi Unidad4
Oi Unidad4Oi Unidad4
Oi Unidad4
 
Tema8
Tema8Tema8
Tema8
 
curgrap
curgrapcurgrap
curgrap
 
Capitulo 1
Capitulo 1Capitulo 1
Capitulo 1
 
Capitulo 3
Capitulo 3Capitulo 3
Capitulo 3
 
Capitulo 5
Capitulo 5Capitulo 5
Capitulo 5
 
Capitulo 4
Capitulo 4Capitulo 4
Capitulo 4
 

Último

estadistica funcion distribucion normal.ppt
estadistica funcion distribucion normal.pptestadistica funcion distribucion normal.ppt
estadistica funcion distribucion normal.pptMiguelAngel653470
 
PROCESO PRESUPUESTARIO - .administracion
PROCESO PRESUPUESTARIO - .administracionPROCESO PRESUPUESTARIO - .administracion
PROCESO PRESUPUESTARIO - .administracionDayraCastaedababilon
 
15. NORMATIVA DE SST - LA LEY 29783.pptx
15. NORMATIVA DE SST - LA LEY 29783.pptx15. NORMATIVA DE SST - LA LEY 29783.pptx
15. NORMATIVA DE SST - LA LEY 29783.pptxAndreaAlessandraBoli
 
PLANILLA DE CONTROL LIMPIEZA TRAMPA DE GRASA
PLANILLA DE CONTROL LIMPIEZA TRAMPA DE GRASAPLANILLA DE CONTROL LIMPIEZA TRAMPA DE GRASA
PLANILLA DE CONTROL LIMPIEZA TRAMPA DE GRASAAlexandraSalgado28
 
Proyecto TRIBUTACION APLICADA-1.pdf impuestos nacionales
Proyecto TRIBUTACION APLICADA-1.pdf impuestos nacionalesProyecto TRIBUTACION APLICADA-1.pdf impuestos nacionales
Proyecto TRIBUTACION APLICADA-1.pdf impuestos nacionalesjimmyrocha6
 
CODIGO DE ETICA PARA EL PROFESIONAL DE LA CONTABILIDAD IFAC (4).pdf
CODIGO DE ETICA PARA EL PROFESIONAL DE LA CONTABILIDAD IFAC (4).pdfCODIGO DE ETICA PARA EL PROFESIONAL DE LA CONTABILIDAD IFAC (4).pdf
CODIGO DE ETICA PARA EL PROFESIONAL DE LA CONTABILIDAD IFAC (4).pdfmelissafelipe28
 
20240418-CambraSabadell-SesInf-AdopTecnologica-CasoPractico.pdf
20240418-CambraSabadell-SesInf-AdopTecnologica-CasoPractico.pdf20240418-CambraSabadell-SesInf-AdopTecnologica-CasoPractico.pdf
20240418-CambraSabadell-SesInf-AdopTecnologica-CasoPractico.pdfRamon Costa i Pujol
 
La electrónica y electricidad finall.pdf
La electrónica y electricidad finall.pdfLa electrónica y electricidad finall.pdf
La electrónica y electricidad finall.pdfDiegomauricioMedinam
 
PPT Empresas IANSA Sobre Recursos Humanos.pdf
PPT Empresas IANSA Sobre Recursos Humanos.pdfPPT Empresas IANSA Sobre Recursos Humanos.pdf
PPT Empresas IANSA Sobre Recursos Humanos.pdfihmorales
 
diapositivas 26-12-16_seguridad ciudadana.pptx
diapositivas 26-12-16_seguridad ciudadana.pptxdiapositivas 26-12-16_seguridad ciudadana.pptx
diapositivas 26-12-16_seguridad ciudadana.pptxDiegoQuispeHuaman
 
Continex para educación, Portafolio de servicios
Continex para educación, Portafolio de serviciosContinex para educación, Portafolio de servicios
Continex para educación, Portafolio de serviciosFundación YOD YOD
 
PRINCIPIOS DE CONDUCCION Y LIDERAZGO SGTO 1.pdf
PRINCIPIOS DE CONDUCCION Y LIDERAZGO SGTO 1.pdfPRINCIPIOS DE CONDUCCION Y LIDERAZGO SGTO 1.pdf
PRINCIPIOS DE CONDUCCION Y LIDERAZGO SGTO 1.pdfCarolinaMaguio
 
T.A CONSTRUCCION DEL PUERTO DE CHANCAY.pptx
T.A CONSTRUCCION DEL PUERTO DE CHANCAY.pptxT.A CONSTRUCCION DEL PUERTO DE CHANCAY.pptx
T.A CONSTRUCCION DEL PUERTO DE CHANCAY.pptxLizCarolAmasifuenIba
 
JOSSELYN SALINfffffffAS- CAPITULO 4 Y 5.pptx
JOSSELYN SALINfffffffAS- CAPITULO 4 Y 5.pptxJOSSELYN SALINfffffffAS- CAPITULO 4 Y 5.pptx
JOSSELYN SALINfffffffAS- CAPITULO 4 Y 5.pptxJosVidal41
 
Rendicion de cuentas del Administrador de Condominios
Rendicion de cuentas del Administrador de CondominiosRendicion de cuentas del Administrador de Condominios
Rendicion de cuentas del Administrador de CondominiosCondor Tuyuyo
 
Mapa Conceptual relacionado con la Gerencia Industrial, su ámbito de aplicaci...
Mapa Conceptual relacionado con la Gerencia Industrial, su ámbito de aplicaci...Mapa Conceptual relacionado con la Gerencia Industrial, su ámbito de aplicaci...
Mapa Conceptual relacionado con la Gerencia Industrial, su ámbito de aplicaci...antonellamujica
 
Presentación La mujer en la Esperanza AC.pptx
Presentación La mujer en la Esperanza AC.pptxPresentación La mujer en la Esperanza AC.pptx
Presentación La mujer en la Esperanza AC.pptxDanielFerreiraDuran1
 
AFILIACION CAJA NACIONAL DE SALUD WOM 1 .pdf
AFILIACION CAJA NACIONAL DE SALUD WOM 1 .pdfAFILIACION CAJA NACIONAL DE SALUD WOM 1 .pdf
AFILIACION CAJA NACIONAL DE SALUD WOM 1 .pdfOdallizLucanaJalja1
 
¿ESTÁ PREPARADA LA LOGÍSTICA PARA EL DECRECIMIENTO?
¿ESTÁ PREPARADA LA LOGÍSTICA PARA EL DECRECIMIENTO?¿ESTÁ PREPARADA LA LOGÍSTICA PARA EL DECRECIMIENTO?
¿ESTÁ PREPARADA LA LOGÍSTICA PARA EL DECRECIMIENTO?Michael Rada
 
MANUAL SKIDDER manual manual manual manua
MANUAL SKIDDER manual manual manual manuaMANUAL SKIDDER manual manual manual manua
MANUAL SKIDDER manual manual manual manuaasesoriam4m
 

Último (20)

estadistica funcion distribucion normal.ppt
estadistica funcion distribucion normal.pptestadistica funcion distribucion normal.ppt
estadistica funcion distribucion normal.ppt
 
PROCESO PRESUPUESTARIO - .administracion
PROCESO PRESUPUESTARIO - .administracionPROCESO PRESUPUESTARIO - .administracion
PROCESO PRESUPUESTARIO - .administracion
 
15. NORMATIVA DE SST - LA LEY 29783.pptx
15. NORMATIVA DE SST - LA LEY 29783.pptx15. NORMATIVA DE SST - LA LEY 29783.pptx
15. NORMATIVA DE SST - LA LEY 29783.pptx
 
PLANILLA DE CONTROL LIMPIEZA TRAMPA DE GRASA
PLANILLA DE CONTROL LIMPIEZA TRAMPA DE GRASAPLANILLA DE CONTROL LIMPIEZA TRAMPA DE GRASA
PLANILLA DE CONTROL LIMPIEZA TRAMPA DE GRASA
 
Proyecto TRIBUTACION APLICADA-1.pdf impuestos nacionales
Proyecto TRIBUTACION APLICADA-1.pdf impuestos nacionalesProyecto TRIBUTACION APLICADA-1.pdf impuestos nacionales
Proyecto TRIBUTACION APLICADA-1.pdf impuestos nacionales
 
CODIGO DE ETICA PARA EL PROFESIONAL DE LA CONTABILIDAD IFAC (4).pdf
CODIGO DE ETICA PARA EL PROFESIONAL DE LA CONTABILIDAD IFAC (4).pdfCODIGO DE ETICA PARA EL PROFESIONAL DE LA CONTABILIDAD IFAC (4).pdf
CODIGO DE ETICA PARA EL PROFESIONAL DE LA CONTABILIDAD IFAC (4).pdf
 
20240418-CambraSabadell-SesInf-AdopTecnologica-CasoPractico.pdf
20240418-CambraSabadell-SesInf-AdopTecnologica-CasoPractico.pdf20240418-CambraSabadell-SesInf-AdopTecnologica-CasoPractico.pdf
20240418-CambraSabadell-SesInf-AdopTecnologica-CasoPractico.pdf
 
La electrónica y electricidad finall.pdf
La electrónica y electricidad finall.pdfLa electrónica y electricidad finall.pdf
La electrónica y electricidad finall.pdf
 
PPT Empresas IANSA Sobre Recursos Humanos.pdf
PPT Empresas IANSA Sobre Recursos Humanos.pdfPPT Empresas IANSA Sobre Recursos Humanos.pdf
PPT Empresas IANSA Sobre Recursos Humanos.pdf
 
diapositivas 26-12-16_seguridad ciudadana.pptx
diapositivas 26-12-16_seguridad ciudadana.pptxdiapositivas 26-12-16_seguridad ciudadana.pptx
diapositivas 26-12-16_seguridad ciudadana.pptx
 
Continex para educación, Portafolio de servicios
Continex para educación, Portafolio de serviciosContinex para educación, Portafolio de servicios
Continex para educación, Portafolio de servicios
 
PRINCIPIOS DE CONDUCCION Y LIDERAZGO SGTO 1.pdf
PRINCIPIOS DE CONDUCCION Y LIDERAZGO SGTO 1.pdfPRINCIPIOS DE CONDUCCION Y LIDERAZGO SGTO 1.pdf
PRINCIPIOS DE CONDUCCION Y LIDERAZGO SGTO 1.pdf
 
T.A CONSTRUCCION DEL PUERTO DE CHANCAY.pptx
T.A CONSTRUCCION DEL PUERTO DE CHANCAY.pptxT.A CONSTRUCCION DEL PUERTO DE CHANCAY.pptx
T.A CONSTRUCCION DEL PUERTO DE CHANCAY.pptx
 
JOSSELYN SALINfffffffAS- CAPITULO 4 Y 5.pptx
JOSSELYN SALINfffffffAS- CAPITULO 4 Y 5.pptxJOSSELYN SALINfffffffAS- CAPITULO 4 Y 5.pptx
JOSSELYN SALINfffffffAS- CAPITULO 4 Y 5.pptx
 
Rendicion de cuentas del Administrador de Condominios
Rendicion de cuentas del Administrador de CondominiosRendicion de cuentas del Administrador de Condominios
Rendicion de cuentas del Administrador de Condominios
 
Mapa Conceptual relacionado con la Gerencia Industrial, su ámbito de aplicaci...
Mapa Conceptual relacionado con la Gerencia Industrial, su ámbito de aplicaci...Mapa Conceptual relacionado con la Gerencia Industrial, su ámbito de aplicaci...
Mapa Conceptual relacionado con la Gerencia Industrial, su ámbito de aplicaci...
 
Presentación La mujer en la Esperanza AC.pptx
Presentación La mujer en la Esperanza AC.pptxPresentación La mujer en la Esperanza AC.pptx
Presentación La mujer en la Esperanza AC.pptx
 
AFILIACION CAJA NACIONAL DE SALUD WOM 1 .pdf
AFILIACION CAJA NACIONAL DE SALUD WOM 1 .pdfAFILIACION CAJA NACIONAL DE SALUD WOM 1 .pdf
AFILIACION CAJA NACIONAL DE SALUD WOM 1 .pdf
 
¿ESTÁ PREPARADA LA LOGÍSTICA PARA EL DECRECIMIENTO?
¿ESTÁ PREPARADA LA LOGÍSTICA PARA EL DECRECIMIENTO?¿ESTÁ PREPARADA LA LOGÍSTICA PARA EL DECRECIMIENTO?
¿ESTÁ PREPARADA LA LOGÍSTICA PARA EL DECRECIMIENTO?
 
MANUAL SKIDDER manual manual manual manua
MANUAL SKIDDER manual manual manual manuaMANUAL SKIDDER manual manual manual manua
MANUAL SKIDDER manual manual manual manua
 

Capitulo 2

  • 1. 2 TEMA 2. EL MODELO RELACIONAL 2 TEMA 2. EL MODELO RELACIONAL ................................................................ 1 2.1 Modelo relacional ............................................................................................. 3 2.1.1 Dominios .................................................................................................. 3 2.1.2 Relaciones................................................................................................. 5 2.1.3 Bases de Datos Relacionales .................................................................... 6 2.1.4 Reglas de integridad relacional ................................................................ 7 2.1.5 Las Reglas de Codd ................................................................................ 10 2.2 Álgebra relacional .......................................................................................... 12 2.2.1 Introducción............................................................................................ 12 2.2.2 Operaciones tradicionales de conjuntos ................................................. 14 2.2.3 Operaciones relacionales especiales....................................................... 15 2.2.4 Operaciones del álgebra relacional extendida ........................................ 17 2.2.5 Modificaciones de la base de datos ........................................................ 18 2.3 Cálculo relacional ........................................................................................... 20 2.3.1 Introducción............................................................................................ 20 2.3.2 Calculo relacional de tuplas.................................................................... 20 2.3.3 Calculo relacional de dominios .............................................................. 24 2.3.4 Query by example................................................................................... 28 Tema 2: El modelo relacional 1
  • 2. PRELIMINAR La teoría formal que constituye los cimientos de los sistemas relacionales se conoce como modelo de datos relacional. Cuando describimos un sistema como relacional queremos decir que el sistema en cuestión está construido de acuerdo con los principios de ese modelo teórico subyacente. Una buena forma de caracterizar el modelo relacional es la siguiente: El modelo relacional es una forma de ver los datos; es decir, es una receta para representar los datos (a saber, mediante tablas), y la receta para manipular esa representación (a saber, mediante operadores tales como el de reunión). En términos más precisos, el modelo relacional se ocupa de tres aspectos de los datos: su estructura, su integridad y su manipulación. Como comentarios preliminares: • Aunque el modelo relacional es una teoría, no se puede recalcar demasiado que no se trata sólo de una teoría en sí misma. De hecho, el objetivo general de la teoría es precisamente establecer una base sobre la cual podamos construir sistemas 100% prácticos. • La mayor parte de las teorías suelen estar dotadas con su propia terminología especial, y el modelo relacional no constituye una excepción a esta regla. Tema 2: El modelo relacional 2
  • 3. 2.1 Modelo relacional Aquí veremos estructura e integridad. En los puntos 2.2 y 2.3 veremos manipulación Términos importantes en la estructura de datos relacional: • Relación. Corresponde con la idea general de una tabla • Tupla. Corresponde a una fila en dicha tabla • Atributo. Es una columna de la tabla • Cardinalidad. Numero de tuplas en la tabla • Grado. Numero de atributos en la tabla • Clave primaria. Es un identificador único para la tabla, esto es, una columna o conjunto de columnas de forma que nunca existen dos filas en la misma tabla con el mismo valor en esa columna o conjunto de columnas. • Dominio. Una colección de valores de los cuales uno o más atributos obtienen sus valores reales. Veamos un ejemplo de una relación típica: DNI Nombre Apellidos Dirección Teléfono Fec_nac 14.167.654 Alberto Gómez Martínez Pedrones, 4 963787878 23/02/1958 64.237.935 Luisa Ripoll Albert Denia, 64 963573895 12/06/1963 45.126.579 José Luis Pérez Cerdán Escandinavia, 12 963873333 15/12/1943 67.677.887 Andrea Martínez Zanón Poeta Más Gil, 37 963772564 10/02/1965 En esta relación, un ejemplo de tupla sería la fila marcada en gris. Los atributos serían: DNI, Nombre, Apellidos, Dirección, Teléfono y Fec_nac. La cardinalidad de esta relación es 4, y el grado es 6. La clave primaria sería el DNI, puesto que es un valor que identifica unívocamente cada tupla de la relación. Los dominios para cada atributo serían variables; por ejemplo, Nombre, Apellidos y Dirección pertenecerían al dominio ‘texto’, el DNI pertenecería al dominio ‘entero’, teléfono pertenecería al dominio ‘entero de 9 dígitos’, y Fec_nac al dominio ‘fecha’. 2.1.1 Dominios La menor unidad semántica de información es el valor de un dato individual (como el nombre de una ciudad, el código de un pedido, etc.). A estos valores los llamaremos escalares (no poseen estructura interna). Definimos un dominio como un conjunto de valores escalares, todos ellos del mismo tipo. Los dominios son fondos de valores, de los cuales se extraen los valores reales que aparecen en los atributos. Cada atributo debe estar definido sobre un dominio subyacente, y sólo uno. Es posible, por tanto, tener valores de un dominio que no aparecen en ninguno de los atributos correspondientes a ese dominio. Tema 2: El modelo relacional 3
  • 4. Los dominios son útiles porque sirven para restringir las comparaciones. Esto significa que cuando se realiza una consulta utilizando el lenguaje de consulta apropiado, las condiciones de la consulta suelen representarse a través de comparaciones entre atributos de las relaciones. Por tanto, una forma sencilla de identificar si la consulta es semánticamente correcta es analizar si los atributos que forman parte de una comparación son compatibles, es decir, si pertenecen al mismo dominio. Ejemplo de uso de dominios en pseudoSQL (puesto que el SQL no admite esto): CREATE DOMAIN S# CHAR(5); CREATE DOMAIN NOMBRE CHAR(20); CREATE DOMAIN SITUACION SMALLINT; CREATE DOMAIN CIUDAD CHAR(15); CREATE TABLE S ( S# DOMAIN(S#) NOT NULL, SNOMBRE DOMAIN(NOMBRE) NOT NULL, SITUACION DOMAIN(SITUACION) NOT NULL, CIUDAD DOMAIN(CIUDAD) NOT NULL, PRIMARY KEY(S#)); Un dominio simple es un dominio de valores escalares. Un domino compuesto se define como una combinación de dominios simples. Por ejemplo: CREATE DOMAIN DIA CHAR(2); CREATE DOMAIN MES CHAR(2); CREATE DOMAIN AÑO CHAR(4); CREATE DOMAIN FECHA (DIA DOMAIN(DIA), MES DOMAIN(MES), AÑO DOMAIN(AÑO)); Esto implica que los atributos podrán ser simples o compuestos, dependiendo de la naturaleza del dominio sobre el que estén definidos. Además, las operaciones relacionales deberán ser capaces de hacer referencia a ese atributo en su totalidad y a sus componentes de forma individual: SELECT * FROM EMPLEADO WHERE EMPLEADO.FECHA_INGRESO = ‘01011984’; SELECT * FROM EMPLEADO WHERE AÑO(EMPLEADO.FECHA_INGRESO) < ‘1984’; En definitiva, un dominio no es ni más ni menos que un tipo de datos, tal y como se entiende dentro del ámbito de los lenguajes de programación modernos. El manejo completo del concepto de dominios requiere por lo menos: • Capacidad de especificar el conjunto completo de dominios aplicable a la base de datos dada. El dominio, además, debería ser un conjunto cerrado (cualquier operación sobre elementos del dominio debe dar un valor perteneciente a algún dominio definido en la base de datos). Tema 2: El modelo relacional 4
  • 5. Capacidad de especificar con exactitud para cada dominio el conjunto de operadores unarios que se pueden aplicar a los elementos del dominio. • Capacidad de especificar con exactitud para cada par de dominios el conjunto de operadores binarios que se pueden aplicar a los elementos de ambos dominios. • Capacidad de especificar para cada expresión escalar legal, el dominio del resultado de evaluar esa expresión. 2.1.2 Relaciones Una relación sobre un conjunto de dominios D1, D2, …, Dn se compone de dos partes: una cabecera y un cuerpo. (En términos de la representación tabular, la cabecera es la fila de cabeceras de columnas y el cuerpo es el conjunto de filas de datos). • La cabecera está formada por un conjunto fijo de atributos, o en términos más precisos, de pares atributo-dominio, {(A1:D1),(A2,D2),…,(An:Dn)}, tales que cada atributo Aj corresponde a uno y sólo uno de los dominios subyacentes Dj(j=1,2,…,n). • El cuerpo está formado por un conjunto de tuplas, el cual varía con el tiempo. Cada tupla está formada a su vez por un conjunto de pares atributo- valor {(A1:vi1),(A2:vi2),…,(An:vin)} / i=1,2,…,m siendo m el número de tuplas del conjunto. En cada una de estas tuplas hay uno de estos pares atributo-valor para cada atributo Aj de la cabecera. Para cada par atributo- valor (Aj:vij), vij es un valor del dominio único Dj asociado al atributo Aj.. Los valores m y n se llaman respectivamente cardinalidad y grado de la relación R. La cardinalidad varía con el tiempo, pero el grado no. Veamos la representación tabular de una relación tal y como se ha definido: A1:D1 A2:D2 A3:D2 A4:D1 A5:D4 V11 V12 V13 V14 V15 V24 V32 V33 V41 V45 Podemos diferenciar ahora entre el concepto de tabla y el de relación (que aunque les hemos estado asignando el mismo significado, contienen diferencias leves, pero precisas, en su definición). Una relación es lo que indica la definición anterior (una especie bastante abstracta de objeto), mientras que una tabla es la representación concreta de dicho objeto abstracto. Tipos de relaciones según el grado: unaria, binaria, ternaria, …, n-aria. 2.1.2.1 Propiedades de las relaciones Las propiedades de las relaciones que se derivan de su propia definición son: • No existen tuplas repetidas. La existencia de una clave primaria impide que existan tuplas repetidas. Tema 2: El modelo relacional 5
  • 6. Las tuplas no están ordenadas. Una relación está definida como un conjunto, y en un conjunto no se establece una relación de orden (matemáticamente). • Los atributos no están ordenados. Puesto que la cabecera de una relación también se define como un conjunto, no existe un orden preestablecido. • Todos los valores de los atributos son atómicos. Otra forma de expresar esta propiedad es diciendo que todos los valores de los atributos simples son atómicos. Es una consecuencia de que todos los dominios subyacentes son a su vez simples. (Es la definición de 1ª Forma Normal). 2.1.2.2 Tipos de relaciones • Relaciones base (o relaciones reales). Corresponde al concepto de tabla base en SQL. Es una relación autónoma, con nombre, es decir, una relación cuya importancia es tal que el diseñador de la BD ha decidido darle un nombre y hacerla parte directa de la BD en sí, a diferencia de otras relaciones cuya naturaleza es más efímera, como por ejemplo el resultado de una consulta. • Vistas (o relaciones virtuales). Es una relación derivada, con nombre. • Instantáneas. Es una relación derivada, con nombre, pero es real (en lugar de virtual, como lo es una vista). (Ejemplo: CREATE SNAPSHOT SC AS SELECT S#, CIUDAD FROM S# REFRESH EVERY DAY;). • Resultados de consultas. Es una relación final resultante de alguna consulta especificada. Puede o no tener nombre. No tienen persistencia en la BD. • Resultados intermedios. Son relaciones resultantes de alguna expresión relacional anidada dentro de alguna otra expresión relacional mayor. • Relaciones temporales. Es una relación con nombre, pero que se destruye de forma automática en el momento apropiado. 2.1.3 Bases de Datos Relacionales Podemos obtener una definición un poco más formal de lo que es una base de datos relacional, a la vista de lo expuesto hasta ahora. Una base de datos relacional es una base de datos percibida por el usuario como una colección de relaciones normalizadas de diversos grados que varía con el tiempo. Es importante el concepto de percibida por el usuario, puesto que el modelo relacional se aplica en los niveles conceptual y externo del sistema. En resumen, podemos decir que en términos tradicionales una relación se asemeja a un archivo, una tupla a un registro, y un atributo a un campo. Todos los datos en una base de datos relacional se representan de una y sólo una manera, a saber, por su valor explícito (principio básico del modelo relacional). En particular, las conexiones lógicas dentro de una relación y entre las relaciones se representan mediante esos valores; no existen ligas o apuntadores visibles para el usuario, ni ordenamientos visibles para el usuario, ni grupos repetitivos visibles para el usuario, etc. Tema 2: El modelo relacional 6
  • 7. 2.1.4 Reglas de integridad relacional Es necesario ampliar la definición de base de datos a fin de incluir ciertas reglas de integridad, cuyo propósito es informar al DBMS de ciertas restricciones del mundo real para que pueda impedir la ocurrencia de tales configuraciones imposibles de valores. La mayor parte de las reglas de integridad son específicas, en cuanto que se aplican a una base de datos específica. Sin embargo, el modelo relacional incluye dos reglas generales de integridad, puesto que se aplican a cualquier base de datos, y se refieren a las claves primarias y claves ajenas. En general, todas las reglas de integridad se aplican a las relaciones base. 2.1.4.1 Claves primarias El atributo K de una relación R es una clave candidata de R si y sólo si satisface las siguientes dos propiedades independientes del tiempo: • Unicidad: En cualquier momento dado, no existen dos tuplas en R con el mismo valor de K. • Minimalidad: Si K es compuesto, no será posible eliminar ningún componente de K sin destruir la propiedad de unicidad. Del conjunto de claves candidatas de una relación dada se elige una y sólo una como clave primaria de esa relación; las demás, si existen, se llaman claves alternativas. Consecuencias: • Puesto que toda relación tiene por lo menos una clave candidata, toda relación tendrá por fuerza una clave primaria. • El razonamiento para elegir la clave primaria queda fuera del alcance del modelo relacional. • La clave primaria es la que tiene verdadera importancia; las claves candidatas y alternativas sólo son conceptos añadidos. • Aunque toda relación tenga una clave primaria, en la práctica son las relaciones base a las que se aplica de manera más directa el concepto. • En ningún momento se implica la necesidad de la existencia de un índice según la clave primaria. Las claves primarias son tan importantes porque constituyen el mecanismo de direccionamiento a nivel de tuplas básico en un sistema relacional, es decir, el único modo garantizado por el sistema de localizar una tupla específica. Las claves primarias son tan indispensables para el funcionamiento correcto de un sistema relacional como las direcciones de memoria principal lo son para el funcionamiento de la máquina subyacente. 2.1.4.2 La regla de integridad de las entidades La regla de integridad de las relaciones dice: Ningún componente de la clave primaria de una relación base puede aceptar nulos. Tema 2: El modelo relacional 7
  • 8. Se entiende como nulos el que no exista información o dato asociado a los componentes, es decir, un nulo es un valor o representación que, por convención, no representa valor real alguno del atributo aplicable. Justificación de la regla: • Las relaciones base corresponden a entidades en el mundo real. • Por definición, las entidades en el mundo real son distinguibles. • Por tanto, los representantes de entidades en el mundo real deben ser distinguibles, es decir, se les debe poder identificar de alguna manera. • Las claves primarias realizan esta función de identificación única en el modelo relacional. • Si una entidad es lo bastante importante en el mundo real como para requerir una representación explícita en la base de datos, tal entidad deberá ser definitivamente susceptible de identificación definida y sin ambigüedad, pues de lo contrario sería imposible siquiera hablar de ella en cualquier forma sensata. Puntos importantes: • En el caso de claves primarias compuestas, la regla de integridad de entidades dice que cada valor individual de la clave primaria debe ser no nulo en su totalidad (no sólo en parte). • La regla de integridad de las entidades se aplica a las relaciones base. • La regla de integridad de las entidades se aplica sólo a las claves primarias. • No debe entenderse como regla de integridad de las entidades el que “los valores de la clave primaria deben ser únicos”. La unicidad es parte de la regla, que hace sobre todo referencia a los no nulos. 2.1.4.3 Claves ajenas Una definición informal de clave ajena puede ser: una clave ajena es un atributo (quizás compuesto) de una relación R2 cuyos valores deben concordar con los de la clave primaria de alguna relación R1 (donde R1 y R2 no son necesariamente distintos). Un valor de clave ajena representa una referencia a la tupla donde se encuentra el valor correspondiente de la clave primaria. Por tanto, el problema de garantizar que la base de datos no incluya valores no válidos de una clave ajena se conoce como el problema de la integridad referencial. La restricción según la cual los valores de una clave ajena determinada deben concordar con los valores de la clave primaria correspondiente se conoce como restricción referencial. La relación que contiene a la clave ajena se conoce como relación referencial, y la relación que contiene a la clave primaria correspondiente se denomina relación referida o relación objetivo. Podemos, además, utilizar la siguiente representación: R1 R2 R3 donde cada flecha indica que existe una clave ajena en la relación de la cual sale la flecha, la cual hace referencia a la clave primaria de la relación a la cual apunta la flecha. Tema 2: El modelo relacional 8
  • 9. Una definición más formal de clave ajena: El atributo LF (quizás compuesto) de la relación base R2 es una clave ajena si y sólo si satisface estas dos propiedades independientes del tiempo: • Cada valor de LF es nulo del todo, o bien no nulo del todo (es decir, que si LF es compuesto, o bien todos sus componentes tienen un valor, o todos son nulos). • Existe una relación base R1 con clave primaria LP tal que cada valor no nulo de LF es idéntico al valor LP en alguna tupla de R1. Surgen los siguientes puntos: • Una clave ajena dada y la clave primaria correspondiente deben definirse sobre el mismo dominio subyacente. • La clave ajena no necesita ser un componente de la clave primaria de la relación que la contiene. • Una relación dada puede ser desde luego tanto una relación referida como una relación referencial, tal como sucede con R2 en el siguiente caso: R3 R2 R1. (Comentario propio: desde luego, esto no sucede para el mismo atributo siendo clave ajena y primaria consecutivamente en todas las relaciones, sino que cada relación tendrá una serie de claves ajenas sobre la relación referida, distintas a las claves ajenas de la siguiente referencia). • Las relaciones R1 y R2 en la definición de clave ajena no son necesariamente distintas. • Las claves ajenas deben aceptar nulos en algunas ocasiones, a diferencia de las claves primarias. 2.1.4.4 La regla de integridad referencial La segunda regla general de integridad del modelo relacional es la regla de integridad referencial: La base de datos no debe contener valores de clave ajena sin concordancia. Con la expresión ‘valores de clave ajena sin concordancia’ queremos decir un valor no nulo de clave ajena para el cual no existe un valor concordante de la clave primaria en la relación objetivo pertinente. Básicamente, se trata de justificar que si B hace referencia a A, entonces A debe existir. Surgen los siguientes puntos: • La integridad referencial exige concordancia de las claves ajenas con las claves primarias, no con las alternativas. • Los conceptos de clave ajena e integridad referencial se definen uno en términos del otro, es decir, no es posible explicar qué es una clave ajena sin mencionar la noción de integridad referencial, y a la inversa. Tema 2: El modelo relacional 9
  • 10. 2.1.4.5 Manejo de las claves ajenas (o de la integridad referencial) Hemos hablado de la integridad referencial como estados posibles de la base de datos, pero no hemos dicho nada sobre el comportamiento que debe tener el SGBD para garantizar la integridad referencial. Aunque no es objeto del modelo relacional en sí, daremos unas directrices sobre los comportamientos genéricos posibles. Existen dos posibilidades para manejar la integridad referencial: a) impedir que se introduzca información que no garantiza la integridad referencial, o b) permitir la introducción de dicha información y realizar acciones consecuentes para que se mantenga la integridad referencial. Desde luego, esta última opción es la ideal, e incluso es posible implementarla en algunos sistemas, pero en este caso se depende completamente del diseño que se realiza, y se debe tener muy en cuenta como se realiza dicho diseño para cumplir con el objetivo propuesto. (P. ej. intentar borrar un valor que es clave primaria en una tabla y clave ajena en otra tiene dos posibles comportamientos por parte del SGBD: a) impedir que se pueda borrar dicho valor, o b) borrar todas las entradas en la relación referencial cuyo valor de la clave ajena sea dicho valor de la clave primaria). La idea fundamental es la siguiente. Para cada clave ajena es necesario responder a tres preguntas: 1. ¿Puede aceptar nulos esa clave ajena? 2. ¿Qué deberá suceder si hay un intento de eliminar el objetivo de una referencia de clave ajena? 3. ¿Qué deberá suceder si hay un intento de modificar la clave primaria del objetivo de una referencia de clave ajena? Como respuesta a las preguntas 2 y 3 caben las siguientes: • Restringida (RESTRICTED): la operación se restringe al caso en el cual no existen todavía referencias. • Se propaga (CASCADE): la operación se propaga, eliminando o modificando las referencias existentes • Anula (NULLFILES): se asignan nulos a la clave ajena en todas las referencias correspondientes a la clave primaria que se desea eliminar o modificar. 2.1.5 Las Reglas de Codd La discusión sobre el mejor modelo de datos, y la inclusión de características relacionales en productos no relacionales en su origen, hizo surgir un debate en torno a si la aplicación del modelo relacional estaba o no justificada en muchos casos. Codd publicó sus famosas reglas en 1985, analizando algunos de los productos comerciales en el marco de las mismas, llegando a la conclusión de la escasa relacionabilidad de la mayoría de los productos que se ofrecían en el mercado. Dichas reglas son las siguientes: 1. Representación de la información. Toda información en una base de datos relacional debe presentarse explícitamente a nivel lógico, y de manera única, por medio de valores en tablas (principio básico del modelo relacional). Tema 2: El modelo relacional 10
  • 11. 2. Acceso garantizado. Todo dato debe ser accesible mediante una combinación de un nombre de tabla, un valor de su clave y el nombre de una columna. Es una forma de insistir en la obligatoriedad de la clave primaria. 3. Tratamiento sistemático de valores nulos. Los valores nulos, información desconocida o inaplicable, han de ser tratados sistemáticamente por el sistema, el cual ha de ofrecer las facilidades necesarias para su tratamiento. 4. Catálogo activo en línea basado en el modelo relacional. La representación de la metainformación (descripción de la base de datos) debe ser igual a la de los otros datos, y su acceso debe poder realizarse por medio del mismo lenguaje relacional que se utiliza para los demás datos, es decir, el modelo de datos para la metainformación debe ser también relacional. 5. Sublenguaje de datos completo. Debe existir un lenguaje que permita un completo manejo de la base de datos (definición de datos, definición de vistas, manipulación de datos, restricciones de integridad, autorizaciones y gestión de transacciones). 6. Actualización de vistas. Toda vista teóricamente actualizable debe poder ser actualizada por el sistema. 7. Inserciones, modificaciones y eliminaciones de alto nivel. Todas las operaciones de manipulación de datos (consulta, inserción, modificación y borrado) deben operar sobre conjuntos de filas (lenguaje no navegacional). Los sistemas existentes hasta el momento en que surge el modelo relacional actuaban registro a registro, obligando al programador de una base de datos a navegar por la misma. 8. Independencia física de los datos. El acceso lógico a los datos debe mantenerse incluso cuando cambien los métodos de acceso o la forma de almacenamiento. 9. Independencia lógica de los datos. Los programas de aplicación no deben verse afectados por cambios realizados en las tablas que estén permitidos teóricamente y que preserven la información. 10. Independencia de la integridad. Las reglas de integridad de una base de datos deben ser definibles por medio del sublenguaje de datos relacional y habrán de almacenarse en el catálogo de la base de datos, no en los programas de aplicación. 11. Independencia de la distribución. Debe existir un sublenguaje de datos que pueda soportar bases de datos distribuidas sin alterar los programas de aplicación cuando se distribuyan los datos por primera vez o se redistribuyan estos posteriormente. 12. Regla de la no subversión. Si un SGBD soporta un lenguaje de bajo nivel que permite el acceso fila a fila, éste no puede utilizarse para saltarse las reglas de integridad expresadas por medio del lenguaje de más alto nivel. Tema 2: El modelo relacional 11
  • 12. 2.2 Álgebra relacional La última parte del modelo relacional se divide a su vez en dos partes: • Un conjunto de operadores que forman en conjunto la llamada álgebra relacional; y • Una operación de asignación que asigna el valor de alguna expresión arbitraria del álgebra a una relación dada. 2.2.1 Introducción El álgebra relacional consiste en un conjunto de operadores de alto nivel que operan sobre relaciones. Cada uno de esos operadores toma una o dos relaciones como entrada, y produce una nueva relación como salida. Sería imposible definir en principio cualquier cantidad de operadores que se ajustaran a esta sencilla definición; no obstante, Codd definió un conjunto muy específico de ocho operadores de este tipo, divididos en dos grupos de cuatro: • Las operaciones tradicionales de conjuntos unión, intersección, diferencia y producto cartesiano • Las operaciones relacionales especiales restricción, proyección, reunión y división. Cada uno de los operadores funciona del siguiente modo: • RESTRICCIÓN: Extrae las tuplas especificadas de una relación dada (o sea, restringe la relación sólo a las tuplas que satisfagan una condición especificada). Hoy en día se conoce más como SELECCIONAR (SELECT). • PROYECCIÓN: Extrae los atributos especificados de una relación dada. • PRODUCTO: A partir de dos relaciones especificadas, construye una relación que contiene todas las combinaciones posibles de las tuplas, una de cada una de las dos relaciones. • UNIÓN: Construye una relación formada por aquellas tuplas que aparecen en cualquiera de las dos relaciones especificadas. • INTERSECCIÓN: Construye una relación formada por aquellas tuplas que aparezcan en las dos relaciones especificadas. • DIFERENCIA: Construye una relación formada por todas las tuplas de la primera relación que no aparezcan en la segunda de las relaciones especificadas. • REUNIÓN: A partir de dos relaciones especificadas, construye una relación que contiene todas las posibles combinaciones de tuplas, una de cada una de Tema 2: El modelo relacional 12
  • 13. las dos relaciones, tales que las dos tuplas participantes en una combinación dada satisfagan alguna condición especificada. • DIVISIÓN: Toma dos relaciones, una binaria y una unaria, y construye una relación formada por todos los valores de un atributo de la relación binaria que concuerdan (en el otro atributo) con todos los valores en la relación unaria. Producto Selección Proyección a x a x b y a y c b x b y c x c y Unión Intersección Diferencia Reunión División a1 b1 b1 c1 a1 b1 c1 a x x a a2 b2 b2 c2 a2 b2 c2 a y y a3 b3 b3 c3 a3 b3 c3 a z b x c y El resultado de cada una de las operaciones es una relación. Es posible, por tanto, utilizar el resultado de una operación como operando para la siguiente, es decir, es posible escribir expresiones relacionales anidadas. Hemos descuidado deliberadamente el tratamiento de la distinción entre cabecera y cuerpo de una relación. Evidentemente, toda relación base tendrá una cabecera y un cuerpo, pero ¿qué ocurre con las relaciones no nombradas? Es importante que una relación resultante tenga un conjunto apropiado de nombre de atributo puesto que podría Tema 2: El modelo relacional 13
  • 14. ser el resultado de una expresión anidada en otra más grande, y necesitaremos alguna forma de referirnos a los atributos. Por tanto, con el único objetivo de garantizar que todas las relaciones resultantes de nuestra álgebra relacional tienen cabeceras apropiadas, definiremos un operador de renombrado, cuyo propósito será cambiar el nombre de los atributos dentro de una relación. 2.2.2 Operaciones tradicionales de conjuntos 2.2.2.1 Unión Aunque el resultado de la unión es un conjunto, no es una relación. Las relaciones no pueden contener una mezcla de diferentes tipos de tuplas. Por tanto, debe cumplirse la compatibilidad respecto a la unión, lo que garantiza que las cabeceras de las relaciones que participan del operador en la expresión son exactamente iguales. La unión de dos relaciones A y B compatibles respecto a la unión, A⋃B es una relación cuya cabecera es idéntica a la de A o B y cuyo cuerpo está formado por todas las tuplas t pertenecientes ya sea a A o a B (o a las dos). 2.2.2.2 Intersección La intersección de dos relaciones A y B compatibles respecto a la unión, A⋂B es una relación cuya cabecera es idéntica a la de A o B y cuyo cuerpo está formado por todas las tuplas t pertenecientes tanto a A como a B. 2.2.2.3 Diferencia La diferencia de dos relaciones A y B compatibles respecto a la unión, A–B es una relación cuya cabecera es idéntica a la de A o B y cuyo cuerpo está formado por todas las tuplas t pertenecientes a A pero no a B. 2.2.2.4 Producto cartesiano ampliado En matemáticas, el producto cartesiano de dos conjuntos es el conjunto de todos los pares ordenados de elementos tales que el primer elemento de cada par pertenece al primer conjunto y el segundo elemento de cada par pertenece al segundo conjunto. Así, el producto cartesiano de dos relaciones sería un conjunto de pares ordenados de tuplas. Sin embargo, para conservar la propiedad de cerradura, deseamos que el resultado sea un conjunto de tuplas, no de pares ordenados de tuplas. Por tanto, la versión del producto cartesiano en álgebra relacional es una forma ampliada de la operación, en la Tema 2: El modelo relacional 14
  • 15. cual cada par ordenado de tuplas es reemplazado por la tupla resultante de la combinación de las dos tuplas en cuestión. Adicionalmente, es necesario que, para obtener la relación final, no existan nombres de atributos iguales en ambas tablas, o de lo contrario existirían conflictos para distinguirlos. A esta condición se le denomina compatibilidad respecto al producto. Definimos el producto cartesiano de dos relaciones (compatibles respecto al producto) A y B, AxB como una relación cuya cabecera es la combinación de las cabeceras de A y B y cuyo cuerpo está formado por el conjunto de todas las tuplas t tales que t es la combinación de una tupla a perteneciente a A y una tupla b perteneciente a B. 2.2.3 Operaciones relacionales especiales 2.2.3.1 Selección La operación selección selecciona tuplas de una relación que satisfacen un predicado dado. Se utiliza la letra griega sigma minúscula (σ) para denotar la selección. El predicado aparece como un subíndice de la letra sigma. Por ejemplo, una selección típica sobre una relación A se puede escribir como: σcampo=”dato”(A) lo que indica que el resultado de la operación es una relación que contiene aquellas tuplas de A que cumplen la condición que el campo “campo” tiene el valor “dato”. Es posible utilizar en el predicado los operadores ≤, ≥, ≠, <, >, =. También es posible combinar predicados con los operadores booleanos ∧ ∨, que indican un AND y un OR lógicos. 2.2.3.2 Proyección La operación proyección sobre una relación dada devuelve una relación que contiene sólo los campos especificados junto con el operador. Se representa por la letra griega pi minúscula (π), con los campos objeto de la proyección como subíndices del operador. Por ejemplo: πc1,c2,c3(A) devolvería una relación formada por los campos, c1, c2 y c3 de la relación A. 2.2.3.3 Renombramiento Es una operación que se utiliza para cambiar el nombre de una relación, o de sus atributos. Esta operación se hace necesaria cuando se debe trabajar varias veces con la misma relación como operando, o cuando existen nombres de relaciones y atributos Tema 2: El modelo relacional 15
  • 16. idénticos como operandos en una misma operación. El operador se representa por la letra griega ro (ρ), y toma como subíndice el nuevo nombre para la relación sobre la que actúa. Por ejemplo: ρx(A) indica que el resultado de la operación es una nueva relación con el nombre x. Si se desea cambiar también el nombre de los atributos, se indica del siguiente modo: ρx(A1,A2,...,An)(A) donde A1, A2, ... An son los nuevos nombres de los atributos. 2.2.3.4 Reunión natural La operación de reunión tiene varias formas distintas. La más importante es la reunión natural, definida como: Sean las cabeceras de las relaciones A y B: (X1,X2,…,Xm,Y1,Y2,…,Yn) y (Y1,Y2,…Yn,Z1,Z2,…,Zp) respectivamente; es decir, los atributos Y1,Y2,…,Yn son los únicos comunes a las dos relaciones. Suponemos que los atributos con el mismo nombre están definidos sobre el mismo dominio. Consideremos (X1,X2,…,Xm), (Y1,Y2,…,Yn) y (Z1,Z2,…,Zp) como tres atributos compuestos X, Y, Z respectivamente. La reunión natural de A y B, A⋈B es una relación con la cabecera (X,Y,Z) y un cuerpo formado por el conjunto de todas las tuplas (X:x,Y:y,Z:z) tales que una tupla a aparezca en A con el valor x en X y el valor y en Y, y una tupla b aparezca en B con el valor y en Y y el valor z en Z. Si A y B no tienen nombres de atributos en común, la unión natural degenera en el producto cartesiano. 2.2.3.5 Reunión theta La reunión theta es adecuada para aquellas ocasiones en las que necesitamos juntar dos relaciones con base en alguna condición diferente a la igualdad. La operación reunión theta es una extensión de la operación de reunión natural que permite combinar una selección y un producto cartesiano en una sola operación. Supongamos las relaciones A y B, y sea theta (θ) un predicado de los atributos del esquema R⋃S. La operación reunión theta se define entonces como: A⋈θB = σθ(AxB) 2.2.3.6 División Sean las cabeceras de las relaciones A y B: (X1,X2,…,Xm,Y1,Y2,…,Yn) y (Y1,Y2,…,Yn) respectivamente; es decir, los atributos Y1,Y2,…,Yn son comunes a las Tema 2: El modelo relacional 16
  • 17. dos relaciones. Además, A tiene los atributos X1,X2,…,Xm y B no tiene otros atributos. Vamos a suponer que los atributos con el mismo nombre están definidos sobre el mismo dominio. Consideremos ahora (X1,X2,…,Xm) y (Y1,Y2,…,Yn) como dos atributos compuestos X e Y respectivamente. La división de A entre B, A÷B es una relación con la cabecera X y un cuerpo formado por el conjunto de todas las tuplas (X:x) tales que aparece una tupla (X:x,Y:y) en A para todas las tuplas (Y:y) presentes en B. En otras palabras, el resultado contiene todos los valores de X en A cuyos valores de Y correspondientes en A incluyen a todos los valores de Y en B, en términos informales. 2.2.3.7 Asignación relacional El propósito de esta operación es poder recordar el valor de alguna expresión algebraica y así modificar el estado de la base de datos. Pero la asignación de relaciones es una operación un tanto burda, en cuanto a que sólo permite la sustitución total del valor completo de una relación. Se define del siguiente modo del siguiente modo: Temp ← Expresion que indica que el resultado de una expresión (una relación) queda almacenado en la relación Temp, que suele tener carácter temporal. 2.2.4 Operaciones del álgebra relacional extendida 2.2.4.1 Proyección generalizada La operación proyección generalizada amplía la operación proyección permitiendo que se utilicen operaciones aritméticas en la lista de proyección. La proyección generalizada tiene la siguiente forma: πF1,F2,…,Fn(A) donde E es cualquier expresión del álgebra relacional, y F1, F2, ..., Fn son expresiones aritméticas que incluyen constantes y atributos en el esquema de E. Como caso especial, la operación aritmética puede ser sólo un atributo o una constante. 2.2.4.2 Reunión externa Es una forma ampliada de la operación de reunión natural, en cuyo resultado aparecen las tuplas de una relación que no tienen contraparte en la otra, poniendo valores nulos en las posiciones de los demás atributos (en vez de hacerse caso omiso de ellos, como en la reunión natural). Existen tres tipos distintos de reuniones externas, y operadores para cada una de ellas: reunión externa por la izquierda ( ), reunión externa por la derecha ( ) y reunión externa completa( ). En el primer caso, se realiza una reunión natural, y se incluyen en la relación final las tuplas de la primera relación que no tienen contraparte en la Tema 2: El modelo relacional 17
  • 18. segunda (añadiendo nulos para los valores de las tuplas de la segunda relación); en el segundo caso es a la inversa, y se añaden a la reunión natural las tuplas de la segunda relación que no tienen contraparte en la primera relación (añadiendo nulos para los valores de las tuplas de la primera relación); y el tercer caso corresponde a la combinación de los casos primero y segundo, es decir, se incluyen en la reunión natural todas las tuplas de la primera y segunda relación que no tienen contraparte en la otra. 2.2.4.3 Funciones de agregación Las funciones de agregación se definen con el objetivo de facilitar el trabajo sobre las relaciones, permitiendo cierto tipo de cálculos aritméticos sobre las tuplas o los atributos. Estas funciones toman una colección de valores y devuelven como resultado un único valor. Existen varias funciones de agregación que se detallan a continuación: • sum. Toma un conjunto de valores y devuelve la suma de los mismos. Por ejemplo, sumsueldo(nominas) • avg. Toma un conjunto de valores y devuelve la media de los mismos. Por ejemplo, avgsueldo(nominas) • min. Toma un conjunto de valores y devuelve el mínimo de los mismos. Por ejemplo, minsueldo(nominas) • max. Toma un conjunto de valores y devuelve el máximo de los mismos. Por ejemplo, maxsueldo(nominas) • count. Toma un conjunto de valores y devuelve el número de elementos del conjunto. Por ejemplo, countsucursal(empleado) • ʛ. Realiza una agrupación de los valores que toma, siguiendo un criterio de igualdad para un atributo o un conjunto de ellos. Es un operador que no tiene sentido utilizarlo sólo, sino que se suele combinar con alguna función de agregación. Por ejemplo, nombre-sucursal,ciudadʛ sumsueldo,maxsueldo (empleado) o bien, nombre-sucursalʛ sumsueldo (empleado) 2.2.5 Modificaciones de la base de datos También es posible expresar en álgebra relacional la realización de ciertas operaciones sobre la base de datos, con el objetivo de modificar su contenido. Veremos brevemente las formas más habituales para expresar dichas modificaciones. 2.2.5.1 Borrado r←r–E Tema 2: El modelo relacional 18
  • 19. 2.2.5.2 Inserción Para insertar el resultado de una expresión se puede utilizar: r←r⋃E pero también se pueden insertar valores constantes del siguiente modo: r ← r ⋃ {(“Fuengirola”,124.765)} 2.2.5.3 Actualización Para modificar el valor de una tupla sin modificarlas todas, se puede utilizar: r ← πF1,F2,…,Fn(r) y si se desea seleccionar varias tuplas y modificar sólo esas tuplas, se puede utilizar: r ← πF1,F2,…,Fn(σP(r)) ⋃ (r – σP(r)) 2.2.5.4 Creación de vistas La creación de una vista se puede realizar del siguiente modo: create view v as Expresión Tema 2: El modelo relacional 19
  • 20. 2.3 Cálculo relacional 2.3.1 Introducción El álgebra relacional y el cálculo relacional son dos alternativas para establecer una base formal de la parte manipulativa del modelo relacional. La diferencia entre ellas es la siguiente: mientras que el álgebra ofrece un conjunto de operaciones explícitas que pueden servir en la práctica para indicar al sistema la forma de construir alguna relación deseada a partir de las relaciones dadas en la base de datos, el cálculo solo ofrece una notación para formular la definición de esa relación deseada en términos de esas relaciones dadas. Además, la formulación del cálculo es descriptiva donde la algebraica es prescriptiva: el cálculo sólo plantea el problema, mientras que el álgebra proporciona un procedimiento para resolverlo. En realidad, el álgebra y el cálculo son equivalentes. Para cada expresión del álgebra existe una expresión equivalente en el cálculo, y a la inversa. El cálculo relacional se fundamenta en una rama de la lógica matemática llamada cálculo de predicados. La idea es utilizar el cálculo de predicados como base para un lenguaje de bases de datos. El concepto de cálculo relacional fue propuesto por primera vez por Codd. 2.3.2 Calculo relacional de tuplas Cuando escribimos una expresión del álgebra relacional proporcionamos una serie de procedimientos que generan la respuesta a la consulta. El cálculo relacional de tuplas, en cambio, es un lenguaje de consulta no procedimental. Describe la información deseada sin dar un procedimiento específico para obtenerla. Las consultas se expresan en el cálculo relacional de tuplas como: { t | P(t) } es decir, son el conjunto de todas las tuplas tales que el predicado P es cierto para t. Siguiendo la notación utilizada previamente, se utiliza t[A] para denotar el valor de la tupla t en el atributo A, y t ∈ r para denotar que la tupla t está en la relación r. Antes de dar una definición formal del cálculo relacional de tuplas veremos algunos ejemplos. 2.3.2.1 Consultas de ejemplo Supóngase que se desea averiguar nombre-sucursal, número-préstamo e importe de los préstamos superiores a 240.000 ptas.: { t | t ∈ préstamo ∧ t[importe] > 240000 } Tema 2: El modelo relacional 20
  • 21. Supóngase que sólo se desea obtener el atributo número-préstamo, en vez de todos los atributos para la relación préstamo. Para escribir esta consulta en el cálculo relacional de tuplas hay que escribir una expresión para una relación del esquema (número-préstamo). Se necesitan las tuplas de (número-préstamo) tales que hay una tupla en préstamo con el atributo importe > 240000. Para expresar esta solicitud hay que utilizar el constructor ‘existe’ de la lógica matemática. La notación ∃ t ∈ r (Q(t)) significa ‘existe una tupla t en la relación r tal que el predicado Q(t) es verdadero’. Utilizando esta notación se puede escribir la consulta ‘Averiguar el número de préstamo de todos los préstamos por importe superior a 240.000 ptas.’ como {t | ∃ s ∈ préstamo (t[número-préstamo] = s[número-préstamo ^ s[importe] > 240000)} En español la expresión anterior se lee ‘el conjunto de todas las tuplas t tales que existe una tupla s en la relación préstamo para la que los valores de t y de s para el atributo número-préstamo son iguales y el valor de s para el atributo importe es mayor que 240.000 ptas.’. La variable tupla t sólo se define para el atributo número-préstamo, dado que es el único atributo para el que se especifica una condición para t. Por tanto, el resultado es una relación de (número- préstamo). Considérese la consulta ‘Averiguar el nombre de todos los clientes que tienen concedido un préstamo en la sucursal de Navacerrada’. Esta consulta es un poco más compleja que las anteriores, dado que implica a dos relaciones: prestatario y préstamo. Como se verá, sin embargo, todo lo que necesita es que tengamos dos instrucciones ‘existe’ en la expresión de cálculo relacional de tuplas, relacionadas mediante y (∧). La consulta se escribe de la manera siguiente: {t | s ∈ prestatario (t[número-préstamo] = s[número-préstamo] ∧ ∃ u ∈ préstamo (u[número-préstamo] = s[número-préstamo] ∧ u[nombre-sucursal] = “Navacerrada”)} En español esta expresión es ‘el conjunto de todas las tuplas (nombre-cliente) para las que el cliente tiene un préstamo concedido en la sucursal de Navacerrada’. La variable tupla u asegura que el cliente es prestatario de la sucursal de Navacerrada. La variable tupla s está restringida para que corresponda al mismo número de préstamo que s. Para averiguar todos los clientes del banco que tienen concedido un préstamo, una cuenta abierta, o ambas cosas, se utiliza la operación unión del álgebra relacional. En el cálculo relacional de tuplas harán falta dos instrucciones ‘existe’ relacionadas por o (∨): {t | ∃ s ∈ prestatario (t[nombre-cliente] = s[nombre-cliente]) ∨ ∃ u ∈ impositor (t[nombre-cliente] = u[nombre-cliente])} Esta expresión da el conjunto de todas las tuplas de nombre-cliente tales que se cumple al menos una de las condiciones siguientes: Tema 2: El modelo relacional 21
  • 22. nombre-cliente aparece en alguna tupla de la relación prestatario como prestatario del banco. • nombre-cliente aparece en alguna tupla de la relación impositor como impositor del banco. Si algún cliente tiene concedido un préstamo y una cuenta abierta en el banco, ese cliente sólo aparece una vez en el resultado, ya que la definición matemática de conjunto no permite elementos duplicados. Si sólo queremos conocer los clientes que tienen en el banco una cuenta y un préstamo, todo lo que hay que hacer es cambiar en la expresión anterior la o (∨) por una y (∧). {t | ∃ s ∈ prestatario (t[nombre-cliente] = s[nombre-cliente]) ∧ ∃ u ∈ impositor (t[nombre-cliente] = u[nombre-cliente])} Considérese ahora la consulta ‘Averiguar todos los clientes que tienen una cuenta abierta en el banco pero no tienen concedido ningún préstamo’. La expresión del cálculo relacional de tuplas para esta consulta es parecida a las expresiones que se acaban de ver, salvo el uso del símbolo no (¬): {t | ∃ u ∈ impositor (t[nombre-cliente] = u[nombre-cliente]) ∧ ¬ ∃ s ∈ prestatario (t[nombre-cliente] = s[nombre-cliente])} La expresión del cálculo relacionar de tuplas anterior utiliza la instrucción ∃ u ∈ impositor ( ... ) para exigir que el cliente tenga una cuenta abierta en el banco, y utiliza la instrucción ¬ ∃ s ∈ prestatario ( ... ) para borrar a aquellos clientes que aparecen en alguna tupla de la relación prestatario por tener un préstamo del banco. La consulta que se tomará ahora en consideración utiliza la implicación, denotada por ⇒. La fórmula P ⇒ Q significa que ‘P implica Q’; es decir, ‘si P es verdad, entonces Q debe ser verdad’. Obsérvese que P ⇒ Q es lógicamente equivalente a ¬ P ∨ Q. El uso de la implicación en lugar de no y o suele sugerir una interpretación más intuitiva de la consulta en español. Considérese la consulta para ilustrar la operación división: ‘Averiguar todos los clientes que tienen una cuenta en todas las sucursales sitas en Arganzuela’. Para escribir esta consulta en el cálculo relacional de tuplas se introduce el constructor ‘para todo’, denotado por ∀. La notación ∀ t ∈ r (Q(t)) significa ‘Q es verdadera para todas las tuplas t de la relación r. La expresión para la consulta se escribe de la manera siguiente: {t | ∀ u ∈ sucursal (u[ciudad-sucursal] = “Arganzuela” ⇒ ∃ s ∈ impositor (t[nombre- cliente] = s[nombre-cliente] ∧ ∃ w ∈ cuenta (w[número-cuenta] = s[número-cuenta] ∧ w[nombre-sucursal] = u[nombre-sucursal])))} Tema 2: El modelo relacional 22
  • 23. En español esta expresión se interpreta como ‘el conjunto de todos los clientes -es decir, las tuplas t (nombre-cliente)- tales que para todas las tuplas u de la relación sucursal, si el valor de u en el atributo ciudad-sucursal es Arganzuela, el cliente tiene una cuenta en la sucursal cuyo nombre aparece en el atributo nombre-sucursal de u’. 2.3.2.2 Definición formal Ahora se tiene la preparación necesaria para una definición formal. Las expresiones del cálculo relacionar de tuplas son de la forma {t | P(t)} donde P es una fórmula. En una fórmula pueden aparecer varias variables tupla. Se dice que una variable tupla es una variable libre a menos que esté cuantificada mediante ∃ o ∀. Por tanto, en t ∈ préstamo ∧ ∃ s ∈ cliente (t[nombre-sucursal] = s[nombre-sucursal]) t es una variable libre. La variable tupla s se denomina variable ligada. Las fórmulas de cálculo relacional de tuplas se construyen con átomos. Los átomos tienen una de las formas siguientes: • s ∈ r, donde s es una variable tupla y r es una relación (no se permite el uso del operador ∉). • S[x] Θ u[y], donde s y u son variables tuplas, x es un atributo en el que está definida s, y es un atributo en el que está definida u, y Θ es un operador de comparación (<, ≤, =, ≠, >, ≥); es necesario que los atributos x e y tengan dominios cuyos miembros puedan compararse mediante Θ). • S[x] Θ c, donde s es una variable tupla, x es un atributo en el que está definida s, Θ es un operador de comparación y c es una constante en el dominio del atributo x. Las fórmulas se construyen a partir de los átomos utilizando las reglas siguientes: • Un átomo es una fórmula. • Si P es una fórmula, también lo son ¬ P y (P). • Si P y Q son fórmulas, también lo son P ∨ Q, P ∧ Q y P ⇒ Q. • Si P(s) es una fórmula que contiene una variable tupla libre s y r es una relación, ∃ s ∈ r (P(S)) y ∀ s ∈ r (P(S)) también son fórmulas. Igual que en el álgebra relacional, se pueden escribir expresiones equivalentes que no sean idénticas en apariencia. En el cálculo relacional de tuplas estas equivalencias incluyen las tres reglas siguientes: • P ∧ Q es equivalente a - (¬ P, ∨ ¬Q). • ∀ t ∈ r (P(t) es equivalente a ¬ ∃ t ∈ r (¬ P(t)). • P ⇒ Q es equivalente a ¬ P ∨ Q Tema 2: El modelo relacional 23
  • 24. 2.3.2.3 Seguridad de las expresiones Queda un último asunto por tratar. Las expresiones del cálculo relacional de tuplas pueden generar relaciones infinitas. Supóngase que se escribió la expresión { t | ¬ (t ∈ préstamo r) } Hay infinitas tuplas que no están en préstamo. La mayor parte de estas tuplas contienen valores que ni siquiera aparecen en la base de datos. Resulta evidente que no se desea permitir ese tipo de expresiones. Para ayudar a definir las ligaduras del cálculo relacionar de tuplas se introduce el concepto de dominio de una fórmula relacional de tuplas, P. De manera intuitiva, el dominio de P, denotado por dom(P), es el conjunto de todos los valores a los que P hace referencia. Esto incluye a los valores mencionados en la propia P, así como a los valores que aparezcan explícitamente en P o en una o en varias relaciones cuyos nombres aparezcan en P. Por ejemplo, dom(t ∈ préstamo ∧ t[importe] > 240000) es el conjunto que contiene a 240.000 y el conjunto de todos los valores que aparecen en préstamo. Además, dom(¬(t ∈ préstamo)) es el conjunto de todos los valores que aparecen en préstamo, dado que la relación préstamo se menciona en la expresión. Se dice que una expresión {t | P(t)} es segura si todos los valores que aparecen en el resultado son valores de dom(P). La expresión {t | ¬ (t ∈ préstamo)} no es segura. Obsérvese que dom(¬ (t ∈ préstamo)) es el conjunto de todos los valores que aparecen en préstamo. Sin embargo, es posible tener una tupla t que no esté en préstamo que contenga valores que no aparezcan en préstamo. El resto de ejemplos de expresiones del cálculo relacionar de tuplas que se han escrito en este apartado son seguros. 2.3.2.4 Potencia expresiva de los lenguajes El cálculo relacionar de tuplas restringido a expresiones seguras es equivalente en potencia expresiva al álgebra relacional. Por tanto, para cada expresión del álgebra relacional hay una expresión equivalente del cálculo relacionar de tuplas, y para cada expresión del cálculo relacional de tuplas hay una expresión equivalente del álgebra relacionar. 2.3.3 Calculo relacional de dominios Hay una segunda forma de cálculo relacionar denominada cálculo relacional de dominios. Esta forma utiliza variables de dominio que toman sus valores del dominio de un atributo, en vez de tornarlos de una tupla completa. El cálculo relacional de dominios, sin embargo, se halla estrechamente relacionado con el cálculo relacional de tuplas. 2.3.3.1 Definición formal Las expresiones del cálculo relacionar de dominios son de la forma {<x1,x2,...,xn> | P(x1,x2,...,xn)} Tema 2: El modelo relacional 24
  • 25. donde x1,x2,...,xn representan las variables de dominio, P representa una fórmula compuesta de átomos, como era el caso en el cálculo relacional de tuplas. Los átomos del cálculo relacional de dominios tienen una de las formas siguientes: • <x1,x2,...,xn> ∈ r, donde r es una relación con n atributos y x1,x2,...,xn son variables de dominio o constantes de dominio. • x Θ y, donde x e y son variables de dominio y Θ es un operador de comparación (<, ≤, =, ≠, >, ≥). Se exige que los atributos x e y tengan dominios que puedan compararse mediante Θ. • x Θ c, donde x es una variable de dominio, Θ es un operador de comparación y c es una constante del dominio del atributo para el que x es una variable de dominio. Las fórmulas se construyen a partir de los átomos utilizando las reglas siguientes: Un átomo es una fórmula. Si P es una fórmula, también lo son ¬ P y (P). Si P y Q son fórmulas, también lo son P ∨ Q, P ∧ Q y P ⇒ Q. Si P(x) es una fórmula en x, donde x es una variable de dominio, ∃ x (P(x)) y ∀ x (P(x)) también son fórmulas. Corno notación abreviada, se escribe ∃ a, b, c (P(a, b, c)) en lugar de ∃ a (∃ b (∃ c (P(a, b, c))) 2.3.3.2 Consultas de ejemplo Ahora se van a utilizar consultas del cálculo relacionar de dominios para los ejemplos considerados anteriormente. Obsérvese la similitud de estas expresiones con las expresiones correspondientes del cálculo relacionar de tuplas: Averiguar el nombre de la sucursal, el número de préstamo y el importe de los préstamos superiores a 240.000 ptas.: {< b, l, a > | < b, l, a > ∈ préstamo ∧ a > 240000} Averiguar todos los números de préstamo de los préstamos por importe superior a 240.000 ptas.: {< 1 > | ∃ b, a < b, l, a > ∈ préstamo ∧ a > 240000)} Aunque la segunda consulta tenga un aspecto muy parecido al de la que se escribió para el cálculo relacionar de tuplas, hay una diferencia importante. En el cálculo de tuplas, cuando se es- cribe ∃ s para alguna variable tupla s, se vincula inmediatamente con una relación escribiendo ∃ s ∈ r. Sin embargo, cuando se escribe ∃ b en el cálculo de dominios, b no se refiere a una tupla, sino a un valor de dominio. Por tanto, el dominio de la variable b no está restringido hasta que la subfórmula b, l, a ∈ préstamo restringe b a los nombres de sucursal que aparecen en la relación préstamo. Tema 2: El modelo relacional 25
  • 26. Averiguar el nombre de todos los clientes que tienen concedido un préstamo en la sucursal de Navacerrada y averiguar el importe del préstamo: {< c, a > | ∃ l (<c,l> ∈ prestatario ∧ ∃ b (<b, l, a > ∈ préstamo ∧ b = “Navacerrada”))} Averiguar el nombre de todos los clientes que tienen concedido un préstamo, una cuenta abierta, o ambas cosas, en la sucursal de Navacerrada: {< c > | ∃ l (<c,l> ∈ prestatario ∧ ∃ b,a (<b, l, a > ∈ préstamo ∧ b = “Navacerrada”)) ∨ ∃ a (<c,a> ∈ impositor ∧ ∃ b,n (<b, a, n > ∈ cuenta ∧ b = “Navacerrada”))} Averiguar el nombre de todos los clientes que tienen una cuenta abierta en todas las sucursales sitas en Arganzuela: {< c > | ∀ x, y, z (< x, y, z > ∈ sucursal) ∧ y = “Arganzuela” ⇒ ∃ a,b (<x, a, b > ∈ cuenta ∧ <c, a > ∈ impositor)} En español la expresión anterior se interpreta como ‘el conjunto de todas las tuplas c (nombre-cliente) tales que para todas las tuplas x, y, z (nombre-sucursal, ciudad- sucursal, activos), si la ciudad de la sucursal es Arganzuela, las siguientes afirmaciones son verdaderas’: • Existe una tupla de la relación cuenta con número de cuenta a y nombre de sucursal x. • Existe una tupla de la relación impositor con cliente e y número de cuenta a. 2.3.3.3 Seguridad de las expresiones Ya se observó que en el cálculo relacional de tuplas es posible escribir expresiones que pueden generar relaciones infinitas. Esto llevó a definir la seguridad de las expresiones de cálculo relacionar de tuplas. Se produce una situación parecida en el cálculo relacionar de dominios. Las expresiones como {<b, l, a> | ¬(<b, l, a> ∈ préstamo)} no son seguras, porque permiten valores del resultado que no están en el dominio de la expresión. En el cálculo relacional de dominios también hay que tener en cuenta la forma de las fórmulas dentro de las instrucciones ‘existe’ y ‘para todo’. Considérese la expresión { <x> | ∃ y (<x,y> ∈ r) ∧ ∃ z (¬(<x,z> ∈ r) ∧ P(x,z)) } donde P es una fórmula que implica a x y a z. Se puede probar la primera parte de la fórmula, ∃ y (<x,y> ∈ r), tomando en consideración sólo los valores de r. Sin embargo, para probar la segunda parte de la fórmula, ∃ z (¬(<x,z> ∈ r) ∧ P(x,z)), hay que tomar en consideración valores de z que no aparecen en r. Dado que todas las relaciones son finitas, no aparece en r un número infinito de valores. Por tanto, no resulta posible en general probar la segunda parte de la fórmula sin tomar en consideración un número Tema 2: El modelo relacional 26
  • 27. infinito de valores de z. En vez de eso, se añaden ligaduras para prohibir expresiones como la anterior. En el cálculo relacionar de tuplas se restringió cualquier variable cuantificada existencialmente a variar sobre una relación concreta. Dado que no se hizo así en el cálculo de dominios, hay que añadir reglas a la definición de seguridad para tratar los casos parecidos a los del ejemplo. Se dice que la expresión {<x1,x2,...,xn> | P(x1,x2,...,xn)} es segura si se cumplen todas las condiciones siguientes: • Todos los valores que aparecen en las tuplas de la expresión son valores de dom(P). • Para cada subfórmula ‘existe’ de la forma ∃ x (P(x)), la subfórmula es cierta si y sólo si hay un valor x en dom(P) tal que P(x) es verdadero. • Para cada subfórmula para todo de la forma ∀ x (P(x)), la subfórmula es verdadera si y sólo si P(x) es verdadero para todos los valores x de dom(P). El propósito de las reglas adicionales es asegurar que se puedan probar las subfórmulas ‘para todo’ y ‘existe’ sin tener que probar infinitas posibilidades. Considérese la segunda regla de la definición de seguridad. Para que ∃ x (P(x)) sea verdadero sólo hay que encontrar una x para la que P(x) lo sea. En general, habría que probar infinitos valores. Sin embargo, si la expresión es segura, se sabe que se puede restringir la atención a los valores de dom(P). Esta ligadura reduce las tuplas que hay que tomar en consideración a un número finito. La situación de las subfórmulas de la forma ∀ x (P(x)) es parecida. Para asegurar que ∀ x (P(x)) es verdadero hay que probar en general todos los valores posibles, por lo que hay que examinar infinitos valores. Como antes, si se sabe que la expresión es segura, basta con probar P(x) para los valores tomados de dom(P). Todas las expresiones del cálculo relacionar de dominios que se han incluido en las consultas de ejemplo de este apartado son seguras. 2.3.3.4 Potencia expresiva de los lenguajes Cuando el cálculo relacional de dominios se restringe a expresiones seguras, es equivalente en potencia expresiva al cálculo relacional de tuplas restringido a expresiones seguras. Dado que se observó anteriormente que el cálculo relacional de tuplas restringido es equivalente al álgebra relacional, los tres lenguajes siguientes son equivalentes: • El álgebra relacionar. • El cálculo relacional de tuplas restringido a expresiones seguras. • El cálculo relacional de dominios restringido a expresiones seguras. Tema 2: El modelo relacional 27
  • 28. 2.3.4 Query by example Es un lenguaje relacional utilizado en el QMF de IBM (junto con SQL). QBE puede considerarse como una realización especialmente atractiva del cálculo de dominios (por la sencillez de su sintaxis). Básicamente, se trata de pedir al sistema unas tablas base sobre las que se distribuyen ejemplos (variables de dominio) en función de lo que se pretenda obtener, y el sistema computa los ejemplos proporcionados y devuelve los resultados que solicita el usuario. Ejemplo: “obtener los nombres de los proveedores que suministran al menos una parte suministrada por el proveedor S2” S S# SNOMBRE SP S# P# SP S# P# _SX P._NOMBREX _SX _PX S2 _PX El usuario pide al sistema que presente tres esqueletos de tablas en la pantalla, un para S y dos para SP y los llena como se muestra. Las entradas que comienzan con un _ representan ejemplos; otras entradas representan literales. El usuario pide al sistema que imprima (P.) valores de nombre de proveedor (_NOMBREX tales que, si el proveedor es _SX, _SX suministra alguna parte _PX, y la parte _PX a su vez es suministrada por el proveedor S2. Todos los cuantificadores existenciales están implícitos. Tema 2: El modelo relacional 28