Conceptos Básicos
En este modelo todos los datos son almacenados en relaciones, y como cada relación es un conjunto de datos, el orden en el que estos se almacenen no tiene relevancia (a diferencia de otros modelos como el jerárquico y el de red). Esto tiene la considerable ventaja de que es más fácil de entender y de utilizar por un usuario no experto. La información puede ser recuperada o almacenada por medio de consultas que ofrecen una amplia flexibilidad y poder para administrar la información.
Este modelo considera la base de datos como una colección de relaciones. De manera simple, una relación representa una tabla que no es más que un conjunto de filas, cada fila es un conjunto de campos y cada campo representa un valor que interpretado describe el mundo real. Cada fila también se puede denominar tupla o registro y a cada columna también se le puede llamar campo o atributo.
Para manipular la información utilizamos un lenguaje relacional, actualmente se cuenta con dos lenguajes formales el Álgebra relacional y el Cálculo relacional. El Álgebra relacional permite describir la forma de realizar una consulta, en cambio, el Cálculo relacional sólo indica lo que se desea devolver.
Los elementos del Modelo Relacional se describen a continuación, pero se describen con mayor profundidad en documentos posteriores:
Tablas o Relación: es un conjunto de datos referentes a un conjunto de entidades y organizados en forma tabular, que se compone de filas y columnas, (tuplas y atributos), en la que cada intersección de fila y columna contiene un valor.
Atributos: cada una de las características que posee una entidad, y que agrupadas permiten distingirla de otras entidades del mismo conjunto.
Esquemas: Es el nombre que se le da a una relación y el conjunto de atributos que contiene.
Tuplas: Cada uno de los renglones en una relación conteniendo valores para cada uno de los atributos.
Dominios: Un dominio D es un conjunto de valores atómicos. Por lo que respecta al modelo relacional, atómico significa indivisible; es decir, que por muy complejo o largo que sea un valor atómico, no tiene una estructuración interna para un SGBD relacional.
Grado de una relación: corresponde al numero de atributos que tiene.
Cardinalidad de una relación: numero de tuplas que tiene.
Algunos elementos bibliograficos que son de necesaria lectura para la comprensión de este tema:
Documento: Modelo Relacional
Documento: Modelo Relacional y Algebra Relacional
Libro digital: El Modelo Relacional para la Gestion de Bases de Datos (Solo accede desde la UFPS)
Propiedades de las Relaciones
Cada relación tiene un nombre y éste es distinto del nombre de todas las demás.
Los valores de los atributos son atómicos: en cada tupla, cada atributo toma un solo valor. Se dice que las relaciones están normalizadas.
No hay dos atributos que se llamen igual.
El orden de los atributos no importa: los atributos no están ordenados.
Cada tupla es distinta de las demás: no hay tuplas duplicadas.
El orden de las tuplas no importa: las tuplas no están ordenadas.
Revision de Conocimiento
Despues de revisados los documentos y conceptos anteriores podemos responder las siguientes preguntas:
Existe alguna diferencia entre extension y esquema.
Plantee ejemplos de dominios para diversos atributos, ya sea DNI, edad, tipo documento, etc.
El esquema P1(nombre, dni, apellido) y P2(dni, nombre, apellido) pueden existir en el mismo modelo relacional. ¿Existe alguna excepción?
Clases de Relaciones
Relaciones base: existen por si mismas, no en funcion de otras relaciones, y se crean especificando explicitamente su esquema de relacion. Sus extensiones al igual que sus definiciones, tambein se encuentran almacenadas. Corresponden al nivel conceptual de la arquitectura.
Vistas: son relaciones derivadas que se definen dando un nombre a una expresion de consulta. Se podria decir que son relaciones virtuales, ya que no almacenan datos, sino definicion en terminos de otra relaciones. Corresponden al nivel externo de la arquitectura.
Instantaneas: son relaciones derivadas al igual que las vistas, pero tienen datos propios almacenados, los cuales son el resultado de ejecutar la consulta especificada o de guardar una relacion base. Se les llama vistas materializadas, estas no se actualizan cuando cambian los datos, pero cada cierto tiempo se refrescan, basadas en las caracteristicas dadas por el usuario al momento de crearlas. Corresponden con el nivel interno de la arquitectura.
Temporales: a diferencia de las persistentes, una relacion temporal desaparee de la base de datos en un cierto tiempo sin necesidad de una accion de borrado especifica por el usuario; por ejemplo al terminar un sesion o una transaccion. Puede ser una relacion autonoma o una vista o una instantanea.
Resultados de consultas: tambien se conocen como resultados sin nombre, no se materializan sino que se entregan al usuario que ha realizado la consulta, pueden ser tanto resultados intermedios como finales. Estas son siempre temporales.
Reglas de Integridad
Clave Candidata: en una relacion es un conjnto de atributos que identifican univoca y minimamente cada tupla de la relacion.
Clave Primaria: es aquella clave candidata que el usuario escogera por consideraciones ajenas al modelo relacional, para identificar las tuplas de la relacion.
Clave Alternativa: con aquellas claves candidatas que no han sido escogidas como claves primarias.
Clave Ajena: conjunto no vacios de atributos, cuyos valores han de coincidir con los valores de la clave candidata de otra relacion.
Regla de Nulos:
Regla de Integridad Entidad:
Regla de Integridad Referencial:
Algebra Relacional
El álgebra relacional es un lenguaje formal con una serie de operadores que trabajan sobre una o varias relaciones para obtener otra relación resultado, sin que cambien las relaciones originales. Tanto los operandos como los resultados son relaciones, por lo que la salida de una operación puede ser la entrada de otra operación. Esto permite anidar expresiones del álgebra, del mismo modo que se pueden anidar las expresiones aritméticas. A esta propiedad se le denomina clausura: las relaciones son cerradas bajo el álgebra, del mismo modo que los números son cerrados bajo las operaciones aritméticas.
En este apartado se presentan los operadores del álgebra relacional de un modo informal. Primero se describen los ocho operadores originalmente propuestos por Codd y después se estudian algunos operadores adicionales que añaden potencia al lenguaje.
De los ocho operadores, sólo hay cinco que son fundamentales: restricción, proyección, producto cartesiano, unión y diferencia, que permiten realizar la mayoría de las operaciones de obtención de datos. Los operadores no fundamentales son la concatenación (join), la intersección y la división, que se pueden expresar a partir de los cinco operadores fundamentales.
La restricción y la proyección son operaciones unarias porque operan sobre una sola relación. El resto de las operaciones son binarias porque trabajan sobre pares de relaciones. En las definiciones que se presentan a continuación, se supone que R y S son dos relaciones cuyos atributos son A=(a
, a, ..., a) y B=(b, b, ..., b) respectivamente.
Restricción
: R WHERE condición
La restricción, también denominada selección, opera sobre una sola relación R y da como resultado otra relación cuyas tuplas son las tuplas de R que satisfacen la condición especificada. Esta condición es una comparación en la que aparece al menos un atributo de R, o una combinación booleana de varias de estas comparaciones.
Ejemplo Obtener todos los empleados con un salario anual superior a 15.000 euros.
PLANTILLA WHERE salario>15000
Ejemplo Obtener todos los inmuebles de Castellón con un alquiler mensual de hasta 350 euros.
INMUEBLE WHERE población=`Castellón' AND alquiler<=350
Proyección
: R[a
, ..., a] La proyección opera sobre una sola relación R y da como resultado otra relación que contiene un subconjunto vertical de R, extrayendo los valores de los atributos especificados y eliminando duplicados.
Ejemplo Obtener un listado de empleados mostrando su número, nombre, apellido y salario.
PLANTILLA [enum,nombre,apellido,salario]
Ejemplo Obtener los distintos puestos que pueden ocupar los empleados.
PLANTILLA [puesto]
Producto cartesiano
: R TIMES S
El producto cartesiano obtiene una relación cuyas tuplas están formadas por la concatenación de todas las tuplas de R con todas las tuplas de S.
La restricción y la proyección son operaciones que permiten extraer información de una sola relación. Habrá casos en que sea necesario combinar la información de varias relaciones. El producto cartesiano ``multiplica" dos relaciones, definiendo una nueva relación que tiene todos los pares posibles de tuplas de las dos relaciones. Si la relación R tiene
tuplas y atributos y la relación S tiene tuplas y atributos, la relación resultado tendrá tuplas y atributos. Ya que es posible que haya atributos con el mismo nombre en las dos relaciones, el nombre de la relación se antepondrá al del atributo en este caso para que los nombres de los atributos sigan siendo únicos en la relación resultado.
Ejemplo Obtener los nombres de los inquilinos y los comentarios que éstos han realizado cuando han visto algún inmueble.
INQUILINO[qnum,nombre,apellido] TIMES VISITA[qnum,inum,comentario]
Como se puede observar, la relación resultado contiene más información de la que se necesita. Por ejemplo, la primera tupla tiene distintos números de inquilino: el comentario realizado en la visita no corresponde al inquilino cuyo nombre y apellido se muestra. Para obtener el listado que se pide en el ejemplo, es necesario realizar una restricción para quedarse solamente con las tuplas en donde INQUILINO.Qnum = VISITA.Qnum.
(INQUILINO[qnum,nombre,apellido] TIMES VISITA[qnum,inum,comentario])
WHERE inquilino.qnum=visita.qnum
El resultado de esta operación se muestra a continuación.
La combinación del producto cartesiano y la restricción del modo en que se acaba de realizar, se puede reducir a la operación de concatenación ( join) que se presenta más adelante.
Unión
: R UNION S
La unión de dos relaciones R y S, con y tuplas respectivamente, es otra relación que tiene como mucho tuplas siendo éstas las tuplas que se encuentran en R o en S o en ambas relaciones a la vez. Para poder realizar esta operación, R y S deben ser compatibles para la unión.
Se dice que dos relaciones son compatibles para la unión si ambas tienen la misma cabecera, es decir, si tienen el mismo número de atributos y éstos se encuentran definidos sobre los mismos dominios. En muchas ocasiones será necesario realizar proyecciones para hacer que dos relaciones sean compatibles para la unión.
Ejemplo Obtener un listado de las áreas en las que hay oficinas o inmuebles para alquilar.
OFICINA[área] UNION INMUEBLE[área]
Diferencia
: R MINUS S
La diferencia obtiene una relación que tiene las tuplas que se encuentran en R y no se encuentran en S. Para realizar esta operación, R y S deben ser compatibles para la unión.
Ejemplo Obtener un listado de todas las poblaciones en donde hay una oficina y no hay inmuebles para alquilar.
OFICINA[población] MINUS INMUEBLE[población]
Población
Villarreal
Concatenación (Join)
: R JOIN S
La concatenación de dos relaciones R y S obtiene como resultado una relación cuyas tuplas son todas las tuplas de R concatenadas con todas las tuplas de S que en los atributos comunes (que se llaman igual) tienen los mismos valores. Estos atributos comunes aparecen una sola vez en el resultado.
Ejemplo Obtener los nombres y los comentarios que los inquilinos han realizado cuando han visto algún inmueble.
INQUILINO JOIN VISITA
Esta expresión obtiene el mismo resultado que la expresión final del ejemplo 4.5, ya que la concatenación es, en realidad, un producto cartesiano y una restricción de igualdad sobre los atributos comunes.
Concatenacion externa (Oute - join)
: R JOIN S (+)
La concatenación externa es una concatenación en la que las tuplas de R que no tienen valores en común con ninguna tupla de S, también aparecen en el resultado.
Ejemplo Obtener un listado de todos los inmuebles y las visitas que han tenido.
INMUEBLE JOIN VISITA (+)
La expresión S (+) JOIN R es equivalente a R JOIN S (+). Cuando en ambas relaciones hay tuplas que no se pueden concatenar y se desea que en el resultado aparezcan también todas estas tuplas (tanto las de una relación como las de la otra), se utiliza la concatenación externa completa: R (+) JOIN S (+)
Intersección
: R INTERSECT S
La intersección obtiene como resultado una relación que contiene las tuplas de R que también se encuentran en S. Para realizar esta operación, R y S deben ser compatibles para la unión.
La intersección se puede expresar en términos de diferencias:
R INTERSECT S = R MINUS (R MINUS S)
División
: R DIVIDEBY S
Suponiendo que la cabecera de R es el conjunto de atributos A y que la cabecera de S es el conjunto de atributos B, tales que B es un subconjunto de A, y si C = A - B (los atributos de R que no están en S), la división obtiene una relación cuya cabecera es el conjunto de atributos C y que contiene las tuplas de R que están acompañadas de todas las tuplas de S.
Ejemplo Obtener los inquilinos que han visitado todos los inmuebles de tres habitaciones.
VISITA[qnum,inum] DIVIDEBY (INMUEBLE WHERE hab=3)[inum]
Qnum
Q56
Además de las operaciones que Codd incluyó en el álgebra relacional, otros autores han aportado otras operaciones para dar más potencia al lenguaje. Es de especial interés la agrupación, también denominada resumen, que añade capacidad computacional al álgebra.
Agrupación
: SUMMARIZE R GROUPBY(a
,...,a) ADD cálculo AS atributo Esta operación agrupa las tuplas de R que tienen los mismos valores en los atributos especificados y realiza un cálculo sobre los grupos obtenidos. La relación resultado tiene como cabecera los atributos por los que se ha agrupado y el cálculo realizado, al que se da el nombre especificado en atributo.
Los cálculos que se pueden realizar sobre los grupos de filas son: suma de los valores de un atributo ( SUM(a
)), media de los valores de un atributo ( AVG(a)), máximo y mínimo de los valores de un atributo ( MAX(a
), MIN(a)) y número de tuplas en el grupo ( COUNT(*)). La relación resultado tendrá tantas filas como grupos se hayan obtenido.
Ejemplo Obtener el salario total que se gasta en los empleados de cada oficina.
SUMMARIZE PLANTILLA GROUPBY(oficina) ADD SUM(salario) AS salario_total
Documento: Algebra relacional
Documento: Formalización del Algebra Relacional
Calculo Relacional
El cálculo relacional usa un enfoque completamente diferente al álgebra relacional. No obstante, los dos lenguajes son lógicamente equivalentes. Esto significa que cualquier consulta que pueda resolverse en un lenguaje puede resolverse en el otro. La solución para toda consulta en este tipo de cálculo se define por:
Una lista de resultados
Una sentencia de cualificación
La lista de resultados está clara, son aquellos registros que cumplen las condiciones que deseamos. La sentencia de cualificación contiene las condiciones que deseamos que cumplan los registros de la lista de resultados. La diferencia entre el cálculo y el álgebra radica en que el cálculo realiza la operación en un único paso, sin necesidad de tener que obtener tablas intermedias, el álgebra realiza las operaciones paso a paso.
Normalmente el cálculo relacional se apoya en algún lenguaje de interrogación de bases de datos como puede ser el SQL.
El cálculo relacional incluye un concepto nuevo denominado cuantificador, los cuantificadores tratan de averiguar el número de registros afectados por una determinada operación, incluso antes de realizarla.
Enlace Web: http://blogs.ua.es/bd1blog/2009/03/19/calculo-relacional-%C2%BFpero-que-necesidad-tengo-yo/
Documento: Calculo Relacional
Bibliografia