Tema 6 - Modelo Relacional
Estática (relaciones en intensión y extensión)
Definiciones Básicas
- Relación: estructura básica del modelo. Se representa mediante una tabla.
- Atributo: Representa las propiedades de la relación. Se representa mediante una columna. (El Nº de atributos representa el grado)
- Dominio: Es el conjunto válido de valores que toma un atributo
- Tupla: Es una ocurrencia de la relación, se representa mediante una fila (El Nº de tuplas representa la cardinalidad)
- Grado: Número de atributos de una relación (número de columnas de una tabla)
- Cardinalidad: Número de tuplas de una tabla (número de filas de una tabla)
Estructura del Modelo Relacional
Tipos de esquemas de relación
IntensiónSe compone únicamente del nombre y los atributos de la relación asociados a un dominio de valores.La relación de intensión representa la cabecera de una tabla (nombres de las columnas), sin valores concretos
ExtensiónSe compone del nombre , atributos y tuplas . Donde cada una de estas tuplas contiene un valor para cada uno de los atributos de la relaciónExplicación de la función
- → Relación de estensión
- → Tupla genérica (fila ) y la definición de sus campos
- → El valor de la fila/tupla debe pertenecer al dominio (dominio del atributo (columna) )
- → El artributo toma el valor de la fila para la tupla actual
La relación de extensión representa la tabla (entera), con valores concretos
En adelante nos referiremos como tabla, relación o entidad a la relación de intensión
Representación del Modelo Relacional
Una entidad representa un elemento que se va a relacionar con otro(s), se escriben Mayúsculas, contiene las claves, entre paréntesis.
Al igual que las relaciones, se representa mediante una tabla
Características de una relación/entidad
Claves de una relación
Las diferentes claves de una relación se aplican a uno o varios atributos de la relación y se usan para expresar que atributos tienen un significado especial para la relación
- Candidata: Es el conjunto no vacío de atributos que identifica unívoca y mínimamente cada tupla de una relación. Estas son claves que toman valores irrepetibles respecto del resto de tuplas.
- Primaria: Es la clave candidata que elige el usuario para identificar las tuplas de la relación.
- Clave Alternativa (unique): Aquella clave candidata que no haya sido elegida como clave primaria. Es el identificador Alternativo de una entidad.
- Clave Ajena (foreign key): La clave ajena es un atributos cuyo valor pertenece a otra entidad, sirve para relacionar dos entidades.
Opciones de borrado (B:) y Modificación(M:) de una Clave Ajena
Las opciones de borrado/modificado hacen referencia al criterio que debemos de seguir cuando borramos o modificamos una tupla de la tabla cuyos atributos son usados como claves ajenas en otras tablas
- Restringido (R) → No se puede borrar/modificar si algún valor de la tupla aparece en otra tabla como clave ajena
- En Cascada (C) → Si se borra/modifica algún valor de la tupla, ha de hacerse también la misma operación en aquellas tablas que utilizen dicho valor como clave ajena
- Puesta a Nulos (N) → Si se borra/modifica algún valor de la tupla, se deberá poner como valor nulo en el resto de tablas dicho valor donde este aparecía como clave ajena
- Puesta a Por Defecto (D) → Si se borra/modifica algún valor de la tupla, se deberá poner como valor, el valor por defecto del atributo correspondiente, en el resto de tablas dicho valor donde este aparecía como clave ajena
Restricciones de verificación
CHECKEsta restricción permite establecer una condición para la relación actual. Esta condición será comprobada antes de toda operación de inserción, borrado o modificación. Si la verificación falla, la operación será cancelada.Ejemplo
Por ejemplo, para la relación EMPLEADOS podría definirse una restricción que comprobara que el sueldo de un empleado siempre ha de ser mayor o igual al salario mínimo (600 euros). Así, si se va a insertar un empleado con un sueldo de 300 euros, la operación se rechazaría
ASSERTA diferencia de los CHECKS, las aserciones se aplican sobre más de una relación
Otras propiedades de los atributos
- Admite Nulos: Representa un atributo opcional del modelo E/R, se identifica con
*
- No Admite nulos: Las claves son así por defecto pero aun así podemoas marcar un atributos con
NN
para explicitar esta característica
Representación de una relación/entidad
Representación de las características de una relación intensión
- Claves primarias →
- Claves alternativas →
negrita
- Claves ajenas →
cursiva
o
- Atributos opcionales o que admiten valores nulos →
*
- Atributos obligatorios (por defecto) →
NN
Restricciones Inherentes
Características de una relación derivadas de la definición de relación
- No puede haber tuplas dupliacadas (idénticas)
- El orden de las tuplas es irrelevante (orden de las filas)
- El orden de los atributos (orden de las columnas)
- La tabla es de 2 dimensiones, solo hay filas y columnas por lo que por cada cruce de estas solo puede haber un valor
Regla de Integridad de la entidad: Ningún atributo que forme parte de la clave primaria puede tomar nulo.
Regla de Integridad Referencial: si un atributo pertenece a la clave primaria de una relación, tiene que mantener su valor en cualquier lugar en el que sea referenciada (otra entidad o una interrelación)
Otras restricciones semánticas:
- Verificación (check): comprueba en toda operación si un predicado es cierto o falso, si no es cierto, rechaza la operación
- Aserción (assertion): Funciona de la misma forma que el check, pero sobre varios elementos de la tabla. Tiene un nombre identificador (tiene vida por si mismo)
- Disparador (trigger): Se establece una condición que cuando se cumple, ejecuta un procedimiento determinado por el usuario
Las 12 Reglas de Codd
El creador del Modelo Relacional definió las siguientes reglas
Regla 0.- Regla básica:
Cualquier sistema que se anuncie como SGBD relacionales debe ser capaz de gestionar por completo las BD utilizando sus capacidades relacionalesEl SGDB no debe recurrir a operaciones no relacionales para completar sus capacidades de gestión de datos (definición y manipulación)
Regla 1.- Representación de la información
Toda información almacenada en una base de datos relacional debe representarse explícitamente a nivel lógico, y de manera única, por medio de valores en tablas. Podríamos decir que éste es el principio básico del modelo relacional.
Regla 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.
Regla 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.
Regla 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 el relacional.La configuración/estructura de las tablas y sus atributos gestionados en un SGBD se almacenarán igualmente usando el mismo modelo relacional que los datos de una tabla cualquiera
Regla 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).Lenguage utilizado comúnmente → SQL
Regla 6.- Actualización de vistas:
Toda vista teóricamente actualizable debe poder ser actualizada por el sistema.
Regla 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 el que surge el modelo relacional actuaban registro a registro obligando al programador de una base de datos a navegar por la misma.
Regla 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.La forma en la que se accede a los datos no debe alterarse aún cuando se altera la forma en la que se almacenan los datos
Regla 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.
Regla 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 (metabase), no en los programas de aplicación.Dichas reglas de integridad será almacenados como metainformacón, por lo que deberán ser almacenados en el esquema de la BD al que se hace referencia en la Regla 4Las características de una tabla, como sus atributos y sus restricciones deberán poder ser modificadas por el usuario a través de un lenguaje destinado para ello
Regla 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 éstos posteriormente.
Regla 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.El SGBD debe servir los datos como si estos estuvieran en una única máquina, aunque estos estén distribuidos entre diferentes máquinas
Dinámica (álgebra relacional)
La dinámica del modelo relacional permite la transformación entre estados de la BD que se realiza aplicando un conjunto de operaciones para obtener un estado distinto
Álgebra Relacional
Operaciones Primitivas
Operadores Unarios: Se aplican a una sola relaciónProyección
→ Selecciona una columna
Este operación devuelve como resultado una relación con solo las columnas seleccionadasSintaxis del operadorEjemplo de la operación en SQLSELECT DISTINCT attr1, attr2 FROM myTable
Selección
→ Selecciona una fila según un criterio definido
Este operación devuelve como resultado una relación filas/tuplas que cumplen una condición concretaSintaxis del operadorEjemplo de la operación en SQLSELECT * FROM myTable
Operadores Binarios: Se aplica sobre dos relacionesUnión
→ Juntar las tuplas de dos tablas compatibles entre sí
Este operación devuelve como resultado una relación juntando todas las tuplas de estas dos en una tablas que comparter los mismos atributos (eliminando las tuplas repetidas)Sintaxis del operadorEjemplo de la operación en SQLSELECT attrX, attrY, attrZ FROM myTable1 UNION SELECT attrX, attrY, attrZ FROM myTable2;
Diferencia
→ Se toman las tuplas de una tabla sin las tuplas que sean iguales a las de la otra tabla
Este operación devuelve como resultado una relación a partir de las tuplas de una tablamyTable1
pero le quita las tuplas que sean identicas a alguna tupla de la tablamyTable2
Siempre y cuando estas tablas sean compatiblesSintaxis del operadorEjemplo de la operación en SQL# MySQL & PostgreSQL SELECT attrX, attrY, attrZ FROM tabla1 EXCEPT SELECT attrX, attrY, attrZ FROM tabla2; # Oracle SELECT attrX, attrY, attrZ FROM tabla1 MINUS SELECT attrX, attrY, attrZ FROM tabla2;
Producto cartesiano
→ Multiplicar todos los valores por todos
Este operación devuelve como resultado una relación con los atributos tanto de la primera tabla como de la segunda. Las tuplas se construyen calculando todas las combinaciones posibles entre las tuplas de la primera tabla y las de la segunda (parecido a la propiedad distributiva del producto de sumas en aritmética)Sintaxis del operadorEjemplo de la operación en SQLSELECT myTable1.*, myTable2.* # Utilizamos `<tabla>.<cols>` para hacer una proyección # de dichas columnas antes de hacer el producto cartesiano FROM myTable1 CROSS JOIN myTable2;
Dos relaciones son compatibles entre sí si:
- Tienen el mismo grado
- Se puede hacer corresponder a cada atributo de una tabla, otro atributo de la otra
Operaciones derivadasJoin
Intersección
División
Group by
Join
/ *
→ Une dos tablas basándose en la clave ajena que tengan ambas
Este operación devuelve como resultado una relación con los atributos tanto de la primera tabla como de la segunda. Las tuplas de construyen uniendo cada tupla de la primera tabla, con las tuplas de la segunda tabla que contengan, en un atributo concreto de ambas, el mismo valorLa condición (columna de referencia) se puede omitir si esta se llama igual en ambas tablasEste operador es equivalente a hacer:Sintaxis del operadorEjemplo de la operación en SQL# Sintaxis antigua (INNER JOIN implicito) SELECT * FROM myTable1, myTable2 WHERE myTable1.attrX=mytable2.attrX # Los atributos pueden tener distinto nombre mientras sus # valores pertenezcan al mismo dominio # Sintaxis actual SELECT * FROM myTable1 INNER JOIN myTable2 ON myTable1.attrX = myTable2.attrX;
Intersección
→ Coge los valores iguales en dos tablas
Este operación devuelve como resultado una relación a partir de dos tablas compatibles entre sí, con únicamente las tuplas que aparecen en ambas tablas (las tuplas deben ser identicas).Este operador es equivalente a la expresión:Sintaxis del operadorEjemplo de la operación en SQLSELECT attrX, attrY, attrZ FROM myTable1 INTERSECT SELECT attrX, attrY, attrZ FROM myTable1;
División :
→ Selecciona a los que tienen todo el divisor
Este operación devuelve como resultado una relación a partir de dos tablas. La primera tabla (dividendo) contendrá un número de atributos mientras que la segunda tabla (divisor) solo contendrá un atributo, equivalente con uno de los atributos de la primera tabla.Consite en encontrar todas las tuplas que en la columna en común estarían relacionadas con todas los valores de la tabla del divisorSi hicieramos un join entre el dividendo y el divisor, y agrupamos según todos los atributos menos el atributo común, nos queda un grupo de tuplas que es igual que el de la tabla divisor. Aquellos grupos con elcount(x)
igual que el numero inicial de tuplas del divisor, sería parte del resultadoEste operador es equivalente a la expresión:Sintaxis del operadorEjemplo de la operación en SQL
Group by
→ Agrupa una tabla en base al valor de un atributo concreto y realiza un calculo sobre cada uno de los grupos resultantes
Este operación devuelve como resultado una relación desde cero con un atributo que será el atributo sobre el que hemos agrupado. Como valores tendremos los valores sobre los que se han podido hacer grupos. Adicionalmente podemos añadir una columna extra conocidad como functión de agregaciónEsta operación no devuelve los grupos como tal, sino los valores del atributo sobre el cual se han podido hacer grupos, y un atributo correspondiente con el resultado de la función de agregación que se ha calculado sobre los miembros de ese grupoFunciones de agregación
COUNT(*)
→ Cuenta cuantas tuplas hay en cada grupo
AVG(attrX)
→ Calcula la media de los valores de la columnaattrX
SUM(attrX)
→ Calcula el sumatorio de los valores de la columnaattrX
MAX(attrX)
→ Busca el valor máximo entre los valores de la columnaattrX
MIN(attrX)
→ Busca el valor mínimo entre los valores de la columnaattrX
Sintaxis del operadorEjemplo de la operación en SQL# Contar, tras agrupar por `attrX`, # cuantas tuplas con valores diferentes hay en cada grupo SELECT COUNT(*), attrX FROM myTable1 GROUP BY attrX # >>> Construye una tabla con: (resultado_del_count, attrX) # donde `attrX` representa a cada grupo, y resultado_del_count # es el resultado del valor de la función de agregación # calculada en cada grupo