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ón
Se compone únicamente del nombre (R) y los atributos (A) de la relación asociados a un dominio(D) de valores.
R(A1:D1,A2:D2,...,An:Dn)
💡
La relación de intensión representa la cabecera de una tabla (nombres de las columnas), sin valores concretos
Extensión
Se compone del nombre (r(R)), atributos (A)y tuplas (t). Donde cada una de estas tuplas contiene un valor (V)para cada uno de los atributos de la relación
tj{<campos>} → Tupla genérica (fila j) y la definición de sus campos
Vij∈Di → El valor i de la fila/tupla j debe pertenecer al dominio Di (dominio del atributo (columna) i)
An:Vnj → El artributo n toma el valor n de la fila j 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
CHECK
Esta 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
ASSERT
A 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 → subrayado
Claves alternativas → negrita
Claves ajenas → cursiva o subrayadodiscontinuo−−−−−−−−−−−−−
Atributos opcionales o que admiten valores nulos → *
Atributos obligatorios (por defecto) → NN
Ejemplo de la representación de claves y características de los atributos
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 reglasRegla 0.- Regla básica:
Cualquier sistema que se anuncie como SGBD relacionales debe ser capaz de gestionar por completo las BD utilizando sus capacidades relacionales
El 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 poderser 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 datosdebe 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 afectadospor 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 4
Las 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ón
Proyección(π)→ Selecciona una columna
Este operación devuelve como resultado una relación con solo las columnas seleccionadas
Sintaxis del operador
πattr1,attr2myTable
Ejemplo de la operación en SQL
SELECT 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 concreta
Sintaxis del operador
σattr1="value1"myTable
Ejemplo de la operación en SQL
SELECT * FROM myTable
Operadores Binarios: Se aplica sobre dos relaciones
Unió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 operador
myTable1∪myTable2
Ejemplo de la operación en SQL
SELECT 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 tabla myTable1 pero le quita las tuplas que sean identicas a alguna tupla de la tabla myTable2 Siempre y cuando estas tablas sean compatibles
Sintaxis del operador
myTable1−myTable2
Ejemplo 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 operador
myTable1×myTable2
Ejemplo de la operación en SQL
SELECT 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 θ / *→ 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 valor
💡
La condición (columna de referencia) se puede omitir si esta se llama igual en ambas tablas
Este operador es equivalente a hacer: π∗(σmyTable1.attrX=myTable2.attrXmyTable1×myTable2)
Sintaxis del operador
myTable1∗myTable2myTable1.attrX=myTable2.attrX
Ejemplo 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: R1−(R1−R2)
Sintaxis del operador
myTable1∩myTable2
Ejemplo de la operación en SQL
SELECT 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 k 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 divisor
💡
Si 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 n tuplas que es igual que el de la tabla divisor. Aquellos grupos con el count(x) igual que el numero inicial de tuplas del divisor, sería parte del resultado
Este operador es equivalente a la expresión:
πC(R1)−πC(R2×πC(R1)−R1)
Sintaxis del operador
myTable1:myTable2
Ejemplo de la operación en SQL
Group by ⊓...GroupBy →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ón
💡
Esta 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 grupo
Funciones de agregación
COUNT(*) → Cuenta cuantas tuplas hay en cada grupo
AVG(attrX) → Calcula la media de los valores de la columna attrX
SUM(attrX) → Calcula el sumatorio de los valores de la columna attrX
MAX(attrX) → Busca el valor máximo entre los valores de la columna attrX
MIN(attrX) → Busca el valor mínimo entre los valores de la columna attrX
Sintaxis del operador
⊓someFunc(param)GroupByattr
Ejemplo 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