EL MODELO RACIONAL
El Modelo Racional, se ha establecido como el principal modelo de datos para las
aplicaciones de procesos de datos, ya que es simple y facilita el trabajo del
programador en comparación a otros modelos. El modelo Racional se basa en un
conjunto de tablas. El usuario del sistema de bases de datos puede consultar
esas tablas, insertar nuevas tuplas, borrar tuplas y actualizar (modificar) las
tuplas.
Hay
varios lenguajes para expresar estas operaciones. Se describe tres lenguajes
formales de consulta, se usan para especificar las solicitudes de información;
estos son más cómodos de usar, pero a cambio sirven como base formal para
lenguajes de consulta que sí lo son. El primer lenguaje, el álgebra relacional,
forma la base del lenguaje de consulta SQL ampliamente usado; el cálculo
relacional de tuplas y el cálculo relacional de dominios(es la base del
lenguaje QBE), que son lenguajes declarativos de consulta basados en la lógica matemática.
3.1 LA ESTRUCTURA DE LAS BASES DE DATOS RELACIONALES
Una
base de datos relacional consiste en un conjunto de tablas, a cada una de las
cuales se les asigna un nombre exclusivo. Cada fila de la tabla representa una relación
entre un conjunto de valores. Dado que cada tabla es un conjunto de dichas
relaciones, que corresponden entre el concepto de tabla y el concepto matemático
de relación.
3.1.1
Estructura básica
Considérese
la tabla cuenta, tiene tres cabeceras de columna: número-cuenta,
nombre-sucursal y saldo. Siguiendo la terminología del modelo relacional se
puede hacer referencia a estas cabeceras como atributos. Para cada
atributo hay un conjunto de valores permitidos, llamado dominio de ese atributo. Para el
atributo nombre-sucursal, por ejemplo, el dominio es el conjunto de los nombres
de las sucursales.
Supongamos
que D1 denota el conjunto de todos los números de cuenta, D2 el
conjunto de todos los nombres de sucursal y D3 el conjunto de los saldos.
Todas las filas de cuenta deben consistir en una tupla (v1, v2,
v3), donde v1 es un número de cuenta (es decir, v1
está en el dominio D1), v2 es un nombre de sucursal (es
decir, v2 está en el dominio D2) y v3 es un saldo
(es decir, v3 está en el dominio D3).
Como
las tablas son esencialmente relaciones, se utilizarán los términos matemáticos
relación y tupla en lugar de los términos tabla y fila. Una variable tupla es
una variable que representa a una tupla; en otras palabras, una tupla que representa
al conjunto de todas las tuplas.
En
la relación cuenta hay siete tuplas. Dado que las relaciones son conjuntos se
utiliza la notación matemática t ∈ r para denotar
que la tupla t está en la relación r.
Un
dominio es atómico si los elementos del dominio se consideran unidades indivisibles. Por ejemplo, el
conjunto de los enteros es un dominio atómico, pero el conjunto de todos los
conjuntos de enteros es un dominio no atómico. La diferencia es que no se suele
considerar que los enteros tengan subpartes, pero sí se considera que los
conjuntos de enteros las tienen; por ejemplo, los enteros que forman cada
conjunto.
Es posible que varios atributos tengan
el mismo dominio Es posible que los atributos nombre-cliente y nombre-empleado
tengan el mismo dominio, el conjunto de todos los nombres de
personas, que en el nivel físico son cadenas de caracteres. Los dominios
de saldo y nombre-sucursal, por otra parte, deberían ser
distintos. En
el nivel físico, tanto los nombres de clientes como los nombres de sucursales
son cadenas de caracteres. Sin embargo, en el nivel lógico puede que se desee
que nombre-cliente y nombre-sucursal tengan dominios diferentes. Un valor de
dominio que es miembro de todos los dominios posibles es el valor nulo, que
indica que el valor es desconocido o no existe.
3.1.2 Esquema de la base de datos
Cuando se habla de bases de datos se
debe diferenciar entre el esquema de la base de datos, o diseño lógico de la
misma, y el ejemplar de la base de datos, que es una instantánea de los datos
de la misma en un momento dado.
El concepto de relación se corresponde
con el concepto de variable de los lenguajes de programación. El concepto de
esquema de la relación se corresponde con el concepto de definición de tipos de
los lenguajes de programación.
Se adopta el convenio de utilizar
nombres en minúsculas para las relaciones y nombres que comiencen por una letra
mayúscula para los esquemas de las relaciones. Siguiendo esta notación se
utilizará Esquema-cuenta para denotar el esquema de la relación
de la relación cuenta. Por tanto,
Esquema-cuenta = (número-cuenta, nombre-sucursal,
saldo)
Los esquemas de las relaciones
incluyen una lista de los atributos y de sus dominios correspondientes.
El concepto de ejemplar de relación se
corresponde con el concepto de valor de una variable en los lenguajes de
programación, cuyo valor puede cambiar con el tiempo, e incluso el contenido
del ejemplar de una relación cuando la relación se actualiza. El utilizar
atributos comunes en los esquemas de las relaciones es una manera de relacionar
las tuplas de relaciones diferentes. Por ejemplo, supóngase que se desea obtener
información sobre todas las cuentas abiertas en sucursales ubicadas en
Arganzuela. Primero se busca en la relación sucursal para encontrar los nombres de todas
las sucursales sitas en Arganzuela. Luego, para cada una de ellas, se mira en
la relación cuenta para encontrar la información sobre las cuentas abiertas en esa
sucursal. Esto no es sorprendente: recuérdese que los atributos que forma la
clave primaria de un conjunto de entidades fuertes aparecen en la tabla creada
para representar el conjunto de entidades, así como en las tablas creadas para
crear relaciones en las que participar el conjunto de entidades.
3.1.3 Claves
Por ejemplo, en Esquema-sucursal,
tanto {nombre-sucursal} como {nombre-sucursal, ciudad-sucursal}
son superclaves. {nombre-sucursal, ciudad-sucursal} no es una
clave candidata porque {nombre-sucursal} es un subconjunto de {nombre-sucursal,
ciudad-sucursal} y {nombre-sucursal} es una superclave. Sin
embargo, {nombre-sucursal} es una clave candidata, y servirá también
como clave primaria para estos fines. El atributo ciudad-sucursal no es
una superclave, dado que dos sucursales de la misma ciudad pueden tener nombres
diferentes (y diferentes volúmenes de activos).
Una superclave de un conjunto de entidades es un conjunto de uno o más
atributos que, tomados colectivamente, permiten identificar unívocamente una
entidad en un conjunto de entidades. Se elige una superclave mínima para cada
conjunto de entidades de entre sus superclaves; la superclave mínima se
denomina la clave primaria del
conjunto de entidades. Análogamente, un conjunto de relaciones es un conjunto
de uno o más atributos que, tomados colectivamente, permiten identificar
unívocamente una relación en un conjunto de relaciones. De igual forma se elige
una superclave mínima para cada conjunto de relaciones de entre todas sus
superclaves; ésta es la clave primaria del conjunto de relaciones.
Un conjunto de entidades que no tiene
suficientes atributos para formar una clave primaria se denomina conjunto de entidades débiles. Un
conjunto de entidades que
tiene una clave primaria se denomina conjunto de entidades fuertes.
Sea R el esquema de una
relación. Si se dice que un subconjunto K de R es una superclave
de R para las relaciones r(R) en las que no hay dos
tuplas diferentes que tengan los mismos valores en todos los atributos de K.
Es decir, si t1 y t2 están en R y t1 ≠ t2, entonces t1[K]
≠ t2[K]. Si el esquema de una base
de datos relacional se basa en las tablas derivadas de un esquema E-R es
posible determinar la clave primaria del esquema de una relación a partir de
las claves primarias de los conjuntos de entidades o de relaciones de los que
se deriva el esquema:
• Conjunto de entidades fuertes. La clave primaria del conjunto de
entidades se convierte en la clave primaria de la relación.
• Conjunto de entidades débiles. La tabla y, por tanto, la relación
correspondientes a un conjunto de entidades débiles incluyen:
— Los atributos del conjunto de
entidades débiles.
— La clave primaria del conjunto de
entidades fuertes del que depende el conjunto de entidades débiles.
La clave primaria de la relación
consiste en la unión de la clave primaria del conjunto de entidades fuertes y el
discriminante del conjunto de entidades débil.
• Conjunto de relaciones. La unión de las claves primarias de los
conjuntos de entidades relacionados se transforma en una superclave de la relación.
Si la relación es de varios a varios, esta superclave es también la clave
primaria.
• Tablas combinadas. Un conjunto binario de relaciones de varios a
uno entre A y B puede representarse mediante una tabla que
consista en los atributos de A y en los atributos (si hay alguno) del
conjunto de relaciones. La clave primaria de la entidad «varios» se transforma
en la clave primaria de la relación (es decir, si el conjunto de relaciones es de
varios a uno entre A y B, la clave primaria de A es la clave
primaria de la relación).
• Atributos multivalorados. Un atributo multivalorado M se representa
mediante una tabla consistente en la clave primaria del conjunto de entidades o
de relaciones del que M es atributo y en una columna C que guarda
un valor concreto de M.
3.1.4 Diagramas de esquema
Un esquema de bases de datos, junto
con las dependencias de clave primaria y externa, se puede mostrar gráficamente
mediante diagramas de esquema.
No hay que confundir un diagrama de
esquema con un diagrama E-R. En particular, los diagramas E-R no muestran
explícitamente los atributos clave externa, mientras que los diagramas de
esquema sí.
3.1.5 Lenguajes de consulta
Un lenguaje de consulta es un lenguaje
en el que un usuario solicita información de la base de datos. Estos lenguajes
suelen ser de un nivel superior que el de los lenguajes de programación
habituales. Los lenguajes de consulta pueden clasificarse como procedimentales
o no procedimentales. En los lenguajes procedimentales el usuario instruye al
sistema para que lleve a cabo una serie de operaciones en la base de datos para
calcular el resultado deseado. En los lenguajes no procedimentales el usuario describe
la información deseada sin dar un procedimiento concreto para obtener esa
información.
3.2 EL
ÁLGEBRA RELACIONAL
Es un lenguaje de consulta
procedimental. Consta de un conjunto de operaciones que toman como entrada una
o dos relaciones y producen como resultado una nueva relación. Las operaciones
fundamentales del álgebra relacional son selección, proyección, unión,
diferencia de conjuntos, producto cartesiano y renombramiento.
Además de las operaciones fundamentales hay otras operaciones, por ejemplo,
intersección de conjuntos, reunión natural, división y asignación.
3.2.1.1. La operación
selección
La operación selección selecciona tuplas que satisfacen un predicado dado. Se
utiliza la letra griega sigma minúscula (σ) para denotar la
selección. El predicado aparece como subíndice de σ.
La relación del argumento se da entre paréntesis a continuación de σ.
Por tanto, para seleccionar las tuplas de la relación préstamo en que la
sucursal es «Navacerrada» hay que escribir:
σnombre-sucursal = «Navacerrada» (préstamo)
3.2.1.2. La operación
proyección
Supóngase que se desea hacer una lista
de todos los números de préstamo y del importe de los mismos, pero sin que
aparezcan los nombres de las sucursales. La operación proyección permite
producir esta relación. La operación proyección es una operación unaria que devuelve
su relación de argumentos, excluyendo algunos argumentos.
3.2.1.3. Composición de operaciones relacionales
Es importante el hecho de que el resultado de una operación
relacional sea también una relación. Considérese la consulta más compleja
«Encontrar los clientes que viven en Peguerinos». Hay que escribir:
Πnombre-cliente (σciudad-cliente = «Peguerinos» (cliente))
3.2.1.4. La operación unión
Considérese una consulta para
averiguar el nombre de todos los clientes del banco que tienen una cuenta, un préstamo
o ambas cosas. Obsérvese que la relación cliente no contiene esa información,
dado que los clientes no necesitan tener ni cuenta ni préstamo en el banco.
Para contestar a esta consulta hace
falta la información de la relación impositor y la de la relación prestatario.
Se conoce la manera de averiguar los nombres de todos los clientes con
préstamos en el banco:
Πnombre-cliente
(prestatario)
3.2.1.5. La operación
diferencia de conjuntos
La operación diferencia de conjuntos, denotada por –, permite buscar las tuplas
que estén en una relación pero no en la otra. La expresión r – s da
como resultado una relación que contiene las tuplas que están en r pero
no en s.
Se pueden buscar todos los clientes
del banco que tienen abierta una cuenta pero no tienen concedido ningún préstamo
escribiendo
Πnombre-cliente (impositor) – Πnombre-cliente (prestatario)
3.2.1.6. La operación
producto cartesiano
La operación producto cartesiano, denotada por un aspa (×), permite combinar
información de cualesquiera dos relaciones. El producto cartesiano de las
relaciones r1 y r2 como r1 × r2.
Las relaciones se definen como
subconjuntos del producto cartesiano de un conjunto de dominios. A partir de
esta definición ya se debe tener una intuición sobre la definición de la
operación producto cartesiano. Sin embargo, dado que el mismo nombre de
atributo puede aparecer tanto en r1 como en r2, hay que crear un
esquema de denominaciones para distinguir entre ambos atributos. En este caso
se logra adjuntando al atributo el nombre de la relación de la que proviene
originalmente.
3.2.1.7.
La operación renombramiento
A diferencia de las relaciones de la
base de datos, los resultados de las expresiones de álgebra relacional no
tienen un nombre que se pueda utilizar para referirse a ellas. Resulta útil
poder ponerles nombre; el operador renombramiento,
denotado por la letra griega rho minúscula (ρ), permite realizar
esta tarea. Dada una expresión E del álgebra relacional, la
expresión ρx (E) devuelve
el resultado de la expresión E con el nombre x. Las relaciones r
por sí mismas se consideran expresiones (triviales) del álgebra relacional.
Por tanto, también se puede aplicar la operación renombramiento a una relación r
para obtener la misma relación con un nombre nuevo.
3.3
MODIFICACION DE LA BASE DE DATOS
3.3.1 Borrado
En lugar de mostrar las tuplas al
usuario, se eliminan de la base de datos las tuplas seleccionadas. Sólo se pueden
borrar tuplas enteras; no se pueden borrar valores de atributos concretos. En
el álgebra relacional los borrados se expresan mediante r ← r – E donde r es
una relación y E es una consulta del álgebra relacional.
3.4.2. Inserción
Para insertar datos en una relación
hay que especificar la tupla que se va a insertar o escribir una consulta cuyo resultado
sea un conjunto de tuplas que vayan a insertarse. Evidentemente, el valor de
los atributos de las tuplas insertadas deben ser miembros del dominio de cada
atributo. De manera parecida, las tuplas insertadas deben ser de la aridad
correcta. En el álgebra relacional las inserciones se expresan mediante r ← r
∪ E donde r es
una relación y E es una expresión del álgebra relacional. La inserción
de una sola tupla se expresa haciendo que E sea una relación constante
que contiene una tupla.
3.4.3. Actualización
Puede que, en algunas situaciones, se
desee modificar un valor de una tupla sin modificar todos los valores de
la tupla. Se puede utilizar el operador proyección generalizada para realizar
esta tarea:
r←ΠF1, F2, …, Fn
(r) donde cada Fi es el i-ésimo atributo de r,
si el i-ésimo atributo no está actualizado, o, si hay que actualizar el
atributo, una expresión, que sólo implica constantes y los atributos de r,
que da el nuevo valor del atributo.
3.4 EL CÁLCULO 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.
3.4.1. Definición
formal
Ahora se tiene la preparación
necesaria para una definición formal. Las expresiones del cálculo relacional 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.
3.4.2. 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)}
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
restricciones del cálculo relacional 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. Así,
el dominio de P es el conjunto de todos los valores que aparecen
explícitamente en una o más relación cuyos nombres aparecen en P. Por
ejemplo, dom(t ∈ préstamo ∧ t[importe] >
1200) es el conjunto que contiene a 1200 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.
3.4.3. Potencia
expresiva de los lenguajes
El cálculo relacional de tuplas
restringido a expresiones seguras es equivalente en potencia expresiva al álgebra
relacional básica (con los operadores ∪,
– , ×, σ y ρ, pero sin los operadores
relacionales extendidos tales como la proyección generalizada G y las
operaciones de reunión externa). Por tanto, para
cada expresión del álgebra relacional hay una
expresión equivalente del cálculo relacional de
tuplas, y para cada expresión del cálculo relacional de
tuplas hay una expresión equivalente del álgebra
relacional.
3.5. EL
CALCULO RELACIONAL DE DOMINIOS**
Hay una segunda forma de cálculo
relacional denominada cálculo
relacional de dominios. Esta forma utiliza variables de dominio
que toman sus valores del dominio de un atributo, en vez de tomarlos de una
tupla completa. El cálculo relacional de dominios, sin embargo, se halla
estrechamente relacionado con el cálculo relacional de tuplas.
3.5.1. Definición
formal
Las expresiones del cálculo relacional
de dominios son de la forma:
{< x1, x2, …, xn > | P(x1,
x2, …, xn)}
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.
3.7.2.
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 relacional de tuplas. Se produce una situación
parecida en el cálculo relacional de dominios.
Las
expresiones como:
{< p, s, i
> | ¬ (< p, s, i > ∈ 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.
3.7.3. 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 relacional básica (sin
las operaciones extendidas)
• El cálculo relacional de tuplas
restringido a expresiones seguras
• El cálculo relacional de dominios
restringido a expresiones seguras
Comentarios
Publicar un comentario