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:

  1. Eliminación de atributos extraños.
  2. Eliminación de dependencias redundantes.

Procedimiento de Cálculo de Claves Candidatas

  1. Eliminación de atributos independientes (RSI).
  2. Eliminación de descriptores equivalentes (RSIE).
  3. Determinación de un descriptor clave de RSIE (atributos no implicados).
  4. Determinación de un descriptor clave de RSIE (atributos implicados que sean implicantes).
  5. Tratamiento de atributos independientes para obtener una clave de la relación original.
  6. Tratamiento de descriptores equivalentes.

Preguntas de Repaso sobre Bases de Datos

  1. En el Análisis de Requisitos en el Modelado Conceptual se trata de responder a la pregunta: ¿Qué representar?
  2. Para generar el Esquema Conceptual es necesario: Todas las opciones
  3. Para que dos Diagramas E/R sean equivalentes es necesario que exista compatibilidad de: Dominio de datos
  4. La integración de vistas corresponde al diseño: Ascendente
  5. Cuando un atributo está basado en un dominio, la restricción de integridad se puede representar mediante la cláusula: CHECK
  6. Un Esquema representa: Ninguna de las opciones
  7. La expresión “... Una moto es un vehículo que sirve para transportar personas ...” indica una abstracción de: Generalización
  8. Las claves ajenas no pueden tener: Valores fuera de la tabla a la que referencian
  9. En el Modelo Entidad/Interrelación la Generalización siempre tiene una cardinalidad máxima y mínima en el supertipo de: (1,1)
  10. En la abstracción de Agregación de tipo Compuesto/Componente el agregado se obtiene como una: Unión
  11. Los atributos derivados se transforman al modelo relacional mediante la utilización de un atributo normal y una cláusula...: Ninguna de las opciones
  12. El paso a qué forma normal puede producir pérdidas en los datos o en las dependencias funcionales: FNBC
  13. En el modelo Relacional, el proceso de Síntesis permite obtener: Relaciones a partir de un conjunto de atributos
  14. Las Tablas Anidadas permiten tener un conjunto de elementos: No ordenado
  15. Un atributo extraño hace que una DF no sea: Ninguna de las opciones
  16. Una restricción de integridad está compuesta por: Todas las opciones
  17. 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
  18. Un Trigger es una regla de integridad de tipo: Procedimental
  19. El grupo más restrictivo de Dependencias es el de las: Funcionales
  20. 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;
/

Entradas relacionadas: