Conceptos Fundamentales de Bases de Datos Relacionales y SQL
Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones
Escrito el en español con un tamaño de 6,22 KB
1. Definición de Base de Datos
Una base de datos es un sistema para la captación y manutención de registros computarizados que permite la modificación, inserción, borrado y consulta de datos de forma organizada.
2. Reglas de Integridad del Modelo Relacional
- Regla de integridad de entidad: Ningún valor de la clave primaria de una tabla (relación) puede ser nulo.
- Regla de integridad referencial: Si en una relación existe una clave foránea, sus valores deben coincidir con valores existentes en la clave primaria a la que hace referencia, o bien ser nulos (si la restricción lo permite).
3. Operaciones de Álgebra Relacional
Operadores Tradicionales (Conjuntistas)
- Unión (binario)
- Intersección (binario)
- Diferencia (binario)
- Producto Cartesiano (binario)
Operadores Relacionales Específicos
- Selección (unario o monario)
- Proyección (unario o monario)
- Reunión (Join) (binario)
- División (binario)
4. Problemas Comunes de Inserción y Borrado en Bases de Datos
Al insertar o borrar datos en una base de datos sin un diseño adecuado (por ejemplo, sin normalizar), pueden surgir problemas como:
- Anomalías de inserción (dificultad para añadir datos sin información relacionada).
- Anomalías de borrado (pérdida no intencionada de datos al borrar registros).
- Anomalías de modificación.
- Aparición de valores nulos innecesarios.
- Redundancia de datos en las tuplas.
- Generación de tuplas espurias (en operaciones como JOINs mal definidos).
5. Ejemplos de Consultas SQL
a) Hallar el número de departamentos y la media anual de sus presupuestos para aquellos cuyo tipo de director no sea 'en propiedad' (P)
SELECT COUNT(NUMDE) AS "NUMERO_DEPARTAMENTOS", AVG(PRESU) AS "MEDIA_ANUAL"
FROM TDEPTO
WHERE TIDIR NOT LIKE 'P';
b) Para los departamentos cuya suma total de salarios de sus empleados supera al salario medio general de la empresa, hallar cuántas extensiones telefónicas distintas tienen
SELECT D.NUMDE, COUNT(DISTINCT E.EXTEL) AS "NUMERO_EXTENSIONES"
FROM TDEPTO D, TEMPLE E
-- Asumiendo que TEMPLE E necesita unirse con TDEPTO D por D.NUMDE = E.NUMDE (implícito por GROUP BY D.NUMDE)
-- WHERE D.NUMDE = E.NUMDE -- Esta condición JOIN es necesaria normalmente
GROUP BY D.NUMDE
HAVING SUM(E.SALAR) > (SELECT AVG(SALAR) FROM TEMPLE); -- Corregido para comparar con la media global explícitamente
Nota: La consulta original comparaba SUM(E.SALAR) con AVG(E.SALAR) dentro del HAVING, lo cual es semánticamente inusual. Se ha ajustado la descripción y la consulta para reflejar una intención más probable: comparar la suma del departamento con la media global. Si la intención era otra, la consulta original debería revisarse.
c) Para cada departamento, hallar su nombre, número, el número total de empleados y el número de empleados con comisión, indicando si el grupo corresponde a empleados 'CON COMISIONES' o 'SIN COMISIONES'
SELECT D.NOMDE, D.NUMDE, COUNT(E.NUMEM), COUNT(E.COMIS), 'CON COMISIONES' AS TIPO
FROM TEMPLE E, TDEPTO D
WHERE E.NUMDE = D.NUMDE AND E.COMIS IS NOT NULL
GROUP BY D.NOMDE, D.NUMDE
UNION
SELECT D.NOMDE, D.NUMDE, COUNT(E.NUMEM), COUNT(E.COMIS), 'SIN COMISIONES' AS TIPO
FROM TEMPLE E, TDEPTO D
WHERE E.NUMDE = D.NUMDE AND E.COMIS IS NULL
GROUP BY D.NOMDE, D.NUMDE;
Nota: Se añadió alias de columna 'TIPO' y la condición de JOIN explícita `E.NUMDE = D.NUMDE` que es fundamental para que la consulta funcione correctamente. `COUNT(COMIS)` contará 0 para el grupo 'SIN COMISIONES' por definición.
6. Algoritmos de Normalización (Ejemplo Teórico)
A continuación se presentan esquemas básicos de algoritmos relacionados con la normalización y el manejo de dependencias funcionales.
Conjunto de Atributos: T = { S, T, V, W, X, Y}
Conjunto de Dependencias Funcionales: D = { X → Y, T → W, SW → V, SW → V, XS → T, ST → W }
Nota: La dependencia SW → V está duplicada. ST → W es redundante si se tienen XS → T y T → W (por transitividad: XS → T y T → W implica XS → W, no ST → W directamente, pero ST → W podría derivarse de otras formas o ser una dependencia dada).
Algoritmo de Síntesis (Esquema Conceptual)
Paso 1
E = T - {Atributos en la parte derecha de cualquier dependencia en D}
Paso 2
Calcular Cierre(Atributos Esenciales de E). Si Cierre(Esenciales(E)) = T, fin.
Paso 3
N = {Atributos en parte izquierda de D} - {Atributos en parte derecha de D}
P = T - (E ∪ N)
Paso 4
Uo = Cierre(Esenciales(E)) ∪ {Ak | Ak ∈ P} (Conceptual: combinar esenciales con atributos candidatos)
V = ∅
I = 0
Paso 5
Calcular Cierre(Esenciales(Uo)). Si es igual a T, estos forman una clave candidata.
Identificar atributos en T que no están en Cierre(Esenciales(Uo)).
Considerar añadir atributos de P si mejoran el cierre.
Paso 6
Si Cierre(Esenciales(Uo)) ≠ T, refinar la selección de atributos (volver al Paso 4 o similar, dependiendo del algoritmo específico).
Paso 7
Identificar todas las claves candidatas. Fin.
Algoritmo de Simplificación-Reducción (Esquema Conceptual)
Paso 1
I = 0
To = T (Conjunto total de atributos)
Mo = D (Conjunto inicial de dependencias)
Paso 2
E = T - {Atributos en la parte derecha de cualquier dependencia en Mo}
N = {Atributos en parte izquierda de Mo} - {Atributos en parte derecha de Mo}
P = T - (E ∪ N)
Paso 3
Si Mo está vacío, fin.
Si Eo (Esenciales) y No (No esenciales en parte izquierda) están vacíos, fin.
Paso 4
Calcular Cierre(Esenciales(Eo)).
Eliminar dependencias redundantes o simplificar partes izquierdas en Mo.
(Repetir proceso hasta que no haya más simplificaciones).
Nota: Los pasos descritos para los algoritmos son muy esquemáticos y pueden variar significativamente según la versión específica del algoritmo (Bernstein, etc.) y la interpretación de la notación original.