Bases de Datos - Tema 2
Estructura de una base de datos relacional
Definición
El modelo relacional es un modelo de datos que representa la información en forma de tablas. Cada tabla se compone de filas y columnas, donde cada fila representa una entidad y cada columna un atributo de la entidad. Las tablas se relacionan entre sí mediante claves primarias y claves foráneas. Su representación sería como la siguiente tabla:
Elementos
Atributos
Los atributos son las columnas de la tabla, y representan las características de las entidades. En el ejemplo anterior, los atributos serían ID, Nombre y Edad.
Se llama dominio del atributo al conjunto de valores permitidos para un atributo. Estos atributos normalmente tienen que ser atómicos, es decir, no pueden descomponerse en otros atributos.
Los atributos cuentan con un valor especial, el null que está en todos los dominios y expresa el desconocimiento del valor. Sin embargo, este valor puede causar complicaciones en la definición de algunas operaciones.
Tuplas
Las tuplas son las filas de la tabla, y representan las entidades. En el ejemplo anterior, las tuplas serían (1, Diego, 21), (2, Juan, 22) y (3, María, 20).
Orden de las tuplas
El orden de las tuplas no importa, ya que en una tabla relacional no hay un orden preestablecido. Por tanto, no se puede asumir que la primera tupla de una tabla sea la primera en ser insertada.
Esquema de la base de datos
El esquema de la base de datos es la estructura lógica de la base de datos. Por otra parte, tenemos la instancia de la base de datos, que es una instantánea de la información de la base de datos en un momento concreto.
✏️Ejemplo
Un posible esquema sería:
Estudiantes(ID, Nombre, Edad)
Y para este esquema, una posible instancia sería:
Claves
Superclaves. Definición
Sea , donde es un conjunto de atributos de una relación, decimos que es una superclave de si los valores de son suficientes para identificar de forma única una tupla de cada posible relación .
✏️Ejemplo
Consideramos la siguiente relación:
En este caso en particular, tanto {ID} como {ID, Nombre} son superclaves, ya que permiten identificar de forma única una tupla.
Claves candidatas. Definición
Decimos que una superclave es una clave candidata si es minimal, es decir, si no contiene atributos innecesarios para la identificación de una única tupla.
✏️Ejemplo
En el caso anterior, la clave candidata sería {ID}
Clave primaria. Definición
Llamamos clave primaria a una clave candidata que se ha seleccionado como clave principal de la relación. Esta clave debe de ser única y estable en el tiempo y, en general, suele ser la que tiene menos atributos.
✏️Ejemplo
En el caso anterior, la clave primaria sería {ID}
Clave foránea. Definición
Llamamos clave foránea a un atributo (o conjunto de atributos) de una relación que hacen referencia a la clave primaria de otra relación. Así, se establecen dos relaciones:
- Relación referenciable: La relación que contiene la clave foránea.
- Relación referenciada: La relación que contiene la clave primaria a la que hace referencia la clave foránea.
Lenguajes de Consulta Relacionales
Clasificación de los lenguajes de consulta
Los lenguajes de consulta en bases de datos pueden clasificarse en dos categorías principales:
- Lenguajes procedurales: Especifican cómo obtener los datos, definiendo una secuencia de operaciones a realizar.
- Lenguajes no procedurales o declarativos: Especifican qué datos se desean sin necesidad de indicar los pasos para obtenerlos.
Lenguajes ``puros''
Existen tres lenguajes de consulta relacionales considerados ``puros'':
- Álgebra relacional
- Cálculo relacional de tuplas
- Cálculo relacional de dominios
Estos tres lenguajes son equivalentes en términos de capacidad computacional, lo que significa que cualquier consulta expresada en uno de ellos puede ser representada en los otros dos.
Álgebra relacional
En este capítulo nos enfocaremos en el estudio del álgebra relacional, el cual es un lenguaje procedural que consiste en un conjunto de operaciones que toman uno o dos conjuntos de entrada y producen una nueva relación como resultado. Algunas características básicas del álgebra relacional:
- No es equivalente a una máquina de Turing.
- Se compone de 6 operaciones básicas (seleccionar, proyectar, unir, restar, producto cartesiano y renombrar).
Seleccionar
La operación de selección se encarga de seleccionar las tuplas que satisfacen un predicado dado. Se denota como:
donde es una relación y es un predicado.
✏️Ejemplo:
Consideramos la relación alumnos con las siguientes tuplas:
Para seleccionar las tuplas cuyo nombre sea ``Diego''. La operación (Query) sería:
En las operaciones de selección, el predicado admite los operadores de comparación comunes, es decir:
Y para combinar predicados, se pueden usar los conectores lógicos usuales, es decir:
✏️Ejemplo
En la relación anterior, queremos las tuplas cuyo nombre sea ``Diego'' y edad 21:
Proyección
La operación de proyección es unaria y devuelve la misma relación de entrada, pero omitiendo ciertos atributos. Se denota como:
donde:
- son nombres de atributos.
- es el nombre de la relación.
El resultado de la proyección es una nueva relación que contiene únicamente los atributos seleccionados, eliminando las columnas que no están en la lista. Además, dado que las relaciones son conjuntos, se eliminan automáticamente las filas duplicadas.
✏️Ejemplo
Consideramos la relación alumnos con las siguientes tuplas:
Y queremos proyectar las columnas ID y name. La operación sería:
El resultado sería:
Como no hay repetidos, no se eliminaría ninguna fila. Sin embargo, si hacemos la proyección de name, es decir:
El resultado sería:
Y se eliminaría una fila con el nombre ``Diego'' ya que hay dos filas con ese nombre.
Producto Cartesiano
La operación de producto cartesiano nos permite combinar información de dos relaciones distintas. Se denota con el símbolo y su resultado es una nueva relación que contiene todas las combinaciones posibles de tuplas de ambas relaciones.
Si tenemos dos relaciones y , su producto cartesiano se expresa como:
✏️Ejemplo
Consideremos las relaciones instructor y teaches:
El producto cartesiano de estas relaciones se expresa como:
Nota: Dado que ambas relaciones contienen el atributo ID, es necesario diferenciarlos, usando el nombre de la relación como prefijo:
instructor.IDteaches.ID
Así, el resultado sería:
Composición de Operaciones
El resultado de una operación del álgebra relacional es una relación, por lo que podemos componer múltiples operaciones en una única expresión de álgebra relacional.
✏️Ejemplo
Consideramos la relación alumnos con las siguientes tuplas:
Si queremos seleccionar las tuplas cuyo nombre sea ``Diego'' y proyectar las columna ID, para ello, haríamos:
Y obtendríamos:
Join
La operación de join (\bowtie) nos permite combinar información de dos relaciones mediante una condición específica sobre los atributos. Es el resultado de aplicar una selección sobre el producto cartesiano de dos relaciones.
Dado un predicado \theta y dos relaciones r y s , la operación se define como:
✏️Ejemplo
Consideramos las relaciones instructor y teaches:
Si queremos hacer un join de estas dos relaciones, seleccionando las tuplas cuyo ID sea el mismo, la operación sería:
Y el resultado sería:
Notamos que la sintaxis del query sería equivalente a:
Unión
La operación de unión nos permite combinar dos relaciones que tienen la misma estructura. Se denota como:
donde y son relaciones.
Para que la unión sea válida, se deben cumplir las siguientes condiciones:
- y deben tener la misma aridad (mismo número de atributos).
- Los dominios de los atributos deben ser compatibles, es decir, cada columna en debe contener el mismo tipo de datos que la columna correspondiente en .
✏️Ejemplo
Consideramos las relaciones alumnos con las siguientes tuplas:
Si queremos seleccionar los nombres de los alumnos que tienen 21 años o menos y nacieron en los primeros 4 meses del año y los nombres de los alumnos que tienen 21 o más años y nacieron en los primeros 6 meses del año (y los que cumplen ambas), la operación sería:
Y el resultado sería:
Intersección
La operación de intersección nos permite obtener las tuplas que están presentes en ambas relaciones de entrada. Se denota como:
donde y son relaciones.
Para que la intersección sea válida, se deben cumplir las siguientes condiciones:
- y deben tener la misma aridad.
- Los dominios de los atributos deben ser compatibles.
✏️Ejemplo
Siguiendo el ejemplo anterior, si queremos seleccionar aquellos que cumplen las dos condiciones anteriores, es decir, los nombres de los alumnos que tienen 21 años o menos y nacieron en los primeros 4 meses del año y los nombres de los alumnos que tienen 21 o más años y nacieron en los primeros 6 meses del año, la operación sería:
Y el resultado sería:
Diferencia de Conjuntos
La operación de diferencia de conjuntos nos permite encontrar las tuplas que están en una relación pero no en otra. Se denota como:
donde y son relaciones.
Para que la diferencia de conjuntos sea válida, se deben cumplir:
- y deben tener la misma aridad.
- Los dominios de los atributos deben ser compatibles.
✏️Ejemplo
Queremos seleccionar aquellos alumnos que cumplen la condición de tener 21 años o menos y nacieron en los primeros 4 meses del año, pero no cumplen la condición de tener 21 o más años y haber nacido en los primeros 6 meses del año. La operación sería:
Y el resultado sería:
Asignación
En algunas situaciones, es conveniente escribir una expresión de álgebra relacional asignando partes de la consulta a variables temporales. La operación de asignación se denota con el símbolo y funciona de manera similar a la asignación en los lenguajes de programación.
✏️Ejemplo
Consideramos la relación alumnos con las siguientes tuplas:
Si queremos seleccionar los nombres de los alumnos que estudian Informática o Matemáticas, la operación sería:
Y ahora bastaría con hacer la unión de estas dos variables:
Y el resultado sería:
💡Nota
Con la operación de asignación, un query puede ser escrito como un programa secuencial consistente en una serie de asignaciones seguidas de una expresión final cuyo resultado es la respuesta a la consulta.
Renombrar
Los resultados de las operaciones de álgebra relacional no tienen un nombre que podamos usar para referirnos a ellos. Para ello, podemos usar el operador renombrar () que nos permite asignar un nombre a una relación.
Sea una expresión de algebra relacional, entonces:
devuelve el resultado de con el nombre .
También, se pueden renombrar los atributos de una relación como:
donde son los atributos de la relación .
Consultas equivalentes
En el álgebra relacional, existen múltiples formas de expresar una misma consulta sin alterar el resultado. La elección de una u otra forma puede afectar únicamente a la eficiencia de la consulta.
En los casos en los que dos consultas no idénticas en estructura arrojan el mismo resultado para cualquier conjunto diremos que son equivalentes.
💡Nota
Notar que no todas las consultas que arrojen el mismo resultado son equivalentes. Para que dos consultas sean equivalentes, deben arrojar el mismo resultado para cualquier conjunto de datos.