Conceptos Clave de Bases de Datos: Normalización, Dependencias y PL/SQL
Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones
Escrito el en español con un tamaño de 6,24 KB
Formas Normales de Bases de Datos
- 1FN: Una relación está en 1FN cuando cada atributo solo toma un valor atómico.
- 2FN: Está en 1FN y cada atributo no principal tiene dependencia funcional plena respecto de cada clave candidata.
- 3FN: Está en 2FN y no existe ningún atributo no principal que dependa transitivamente de alguna clave candidata de R.
- FNBC: Una relación se encuentra en FNBC si, y solo si, toda parte izquierda de una dependencia funcional es una clave candidata.
- 4FN: Una relación se encuentra en 4FN si, y solo si, toda dependencia multivaluada viene determinada por una clave candidata.
- 5FN: Está en todas las anteriores y toda dependencia de combinación está implicada por una clave candidata.
Conceptos Relacionados con Dependencias Funcionales
Recubrimiento Minimal
Partiendo de las dependencias funcionales elementales:
- Eliminación de atributos extraños.
- Eliminación de dependencias redundantes.
Procedimiento de Cálculo de Claves Candidatas
- Eliminación de atributos independientes (RSI).
- Eliminación de descriptores equivalentes (RSIE).
- Determinación de un descriptor clave de RSIE (atributos no implicados).
- Determinación de un descriptor clave de RSIE (atributos implicados que sean implicantes).
- Tratamiento de atributos independientes para obtener una clave de la relación original.
- Tratamiento de descriptores equivalentes.
Preguntas de Repaso sobre Bases de Datos
- En el Análisis de Requisitos en el Modelado Conceptual se trata de responder a la pregunta: ¿Qué representar?
- Para generar el Esquema Conceptual es necesario: Todas las opciones
- Para que dos Diagramas E/R sean equivalentes es necesario que exista compatibilidad de: Dominio de datos
- La integración de vistas corresponde al diseño: Ascendente
- Cuando un atributo está basado en un dominio, la restricción de integridad se puede representar mediante la cláusula: CHECK
- Un Esquema representa: Ninguna de las opciones
- La expresión “... Una moto es un vehículo que sirve para transportar personas ...” indica una abstracción de: Generalización
- Las claves ajenas no pueden tener: Valores fuera de la tabla a la que referencian
- En el Modelo Entidad/Interrelación la Generalización siempre tiene una cardinalidad máxima y mínima en el supertipo de: (1,1)
- En la abstracción de Agregación de tipo Compuesto/Componente el agregado se obtiene como una: Unión
- Los atributos derivados se transforman al modelo relacional mediante la utilización de un atributo normal y una cláusula...: Ninguna de las opciones
- El paso a qué forma normal puede producir pérdidas en los datos o en las dependencias funcionales: FNBC
- En el modelo Relacional, el proceso de Síntesis permite obtener: Relaciones a partir de un conjunto de atributos
- Las Tablas Anidadas permiten tener un conjunto de elementos: No ordenado
- Un atributo extraño hace que una DF no sea: Ninguna de las opciones
- Una restricción de integridad está compuesta por: Todas las opciones
- En una relación si existe un atributo no principal que depende funcionalmente de un subconjunto de la clave primaria, ¿en qué forma normal más alta se encuentra?: 1FN
- Un Trigger es una regla de integridad de tipo: Procedimental
- El grupo más restrictivo de Dependencias es el de las: Funcionales
- El método que actúa sobre un tipo de objeto es: Método Estático
Procedimiento PL/SQL de Ejemplo
CREATE OR REPLACE PROCEDURE listado AS
-- Declaración de variables
idcursor INTEGER;
v_dummy INTEGER;
instruccion VARCHAR2(200);
v_nomdep tdepto.nomdep%TYPE;
v_cont NUMBER(38);
v_salar NUMBER(38);
v_presu NUMBER(38);
v_numdep NUMBER(38);
-- Declaración de cursores
CURSOR cur1 IS
SELECT nomdep, numdep, presu FROM tdepto ORDER BY nomdep;
CURSOR cur2 IS
SELECT SUM((salar * 12) / 2) FROM temple WHERE numdep = v_numdep;
BEGIN
-- Verificar si la tabla TLISTADO existe
SELECT COUNT(*) INTO v_cont FROM user_tables WHERE table_name = 'TLISTADO';
-- Preparar la instrucción SQL (DELETE o CREATE TABLE)
IF (v_cont <> 0) THEN
-- La tabla existe, se vacía
instruccion := 'DELETE FROM tlistado';
ELSE
-- La tabla no existe, se crea
instruccion := 'CREATE TABLE TLISTADO ( numdep NUMBER(38), nomdep VARCHAR2(40))';
END IF;
-- Ejecutar la instrucción SQL dinámica
idcursor := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(idcursor, instruccion, DBMS_SQL.NATIVE);
v_dummy := DBMS_SQL.EXECUTE(idcursor);
DBMS_SQL.CLOSE_CURSOR(idcursor);
-- Procesar departamentos
OPEN cur1;
LOOP
FETCH cur1 INTO v_nomdep, v_numdep, v_presu;
EXIT WHEN cur1%NOTFOUND;
-- Calcular salario total para el departamento
OPEN cur2;
FETCH cur2 INTO v_salar;
-- Assuming cur2 will always return one row (SUM of salaries)
-- EXIT WHEN cur2%NOTFOUND; -- Not needed if only one row is expected
CLOSE cur2; -- Close cur2 inside the outer loop
-- Comparar presupuesto con salario total (assuming this was the intended comparison)
IF (v_presu > v_salar) THEN
-- Insertar en TLISTADO si el presupuesto es mayor que el salario total
instruccion := 'INSERT INTO tlistado VALUES ( :p_numdep, :p_nomdep )';
idcursor := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(idcursor, instruccion, DBMS_SQL.NATIVE);
DBMS_SQL.BIND_VARIABLE(idcursor, ':p_numdep', v_numdep);
DBMS_SQL.BIND_VARIABLE(idcursor, ':p_nomdep', v_nomdep);
v_dummy := DBMS_SQL.EXECUTE(idcursor);
DBMS_SQL.CLOSE_CURSOR(idcursor);
END IF;
END LOOP;
CLOSE cur1;
END listado;
/