Este documento describe el modelo relacional de bases de datos. Explica conceptos clave como dominios, relaciones, tablas, tuplas, atributos y claves primarias. También cubre reglas de integridad relacional como la unicidad y minimalidad de las claves primarias. Por último, introduce operaciones relacionales como el álgebra y cálculo relacional para manipular datos en el modelo relacional.
Diseño Logico de Base de datos Relacionales,Diseño Logico de Base de datos Relacionales,Diseño Logico de Base de datos Relacionales,Diseño Logico de Base de datos Relacionales
Diseño Logico de Base de datos Relacionales,Diseño Logico de Base de datos Relacionales,Diseño Logico de Base de datos Relacionales,Diseño Logico de Base de datos Relacionales
Guía para hacer un Plan de Negocio para tu emprendimiento.pdfpppilarparedespampin
Esta Guía te ayudará a hacer un Plan de Negocio para tu emprendimiento. Con todo lo necesario para estructurar tu proyecto: desde Marketing hasta Finanzas, lo imprescindible para presentar tu idea. Con esta guía te será muy fácil convencer a tus inversores y lograr la financiación que necesitas.
Anna Lucia Alfaro Dardón, Harvard MPA/ID.
Opportunities, constraints and challenges for the development of the small and medium enterprise (SME) sector in Central America, with an analytical study of the SME sector in Nicaragua. - focused on the current supply and demand gap for credit and financial services.
Anna Lucía Alfaro Dardón
Dr. Ivan Alfaro
Entre las novedades introducidas por el Código Aduanero (Ley 22415 y Normas complementarias), quizás la más importante es el articulado referido a la determinación del Valor Imponible de Exportación; es decir la base sobre la que el exportador calcula el pago de los derechos de exportación.
METODOS DE VALUACIÓN DE INVENTARIOS.pptxBrendaRub1
Los metodos de valuación de inentarios permiten gestionar y evaluar de una manera más eficiente los inventarios a nivel económico, este documento contiene los mas usados y la importancia de conocerlos para poder aplicarlos de la manera mas conveniente en la empresa
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