Formas normales en DBMS

Requisito previo: normalización de la base de datos y concepto de dependencia funcional .

La normalización es el proceso de minimizar la redundancia de una relación o conjunto de relaciones. La redundancia en la relación puede causar anomalías de inserción, eliminación y actualización. Por lo tanto, ayuda a minimizar la redundancia en las relaciones. Los formularios normales se utilizan para eliminar o reducir la redundancia en las tablas de la base de datos.

1. Primera Forma Normal –

Si una relación contiene un atributo compuesto o multivaluado, viola la primera forma normal o una relación está en la primera forma normal si no contiene ningún atributo compuesto o multivaluado. Una relación está en primera forma normal si cada atributo en esa relación es un atributo de valor único .

  • Ejemplo 1: la relación ESTUDIANTE en la tabla 1 no está en 1NF debido al atributo de varios valores STUD_PHONE. Su descomposición en 1NF se muestra en la tabla 2.

  • Ejemplo 2 –
     
    ID   Name   Courses
    ------------------
    1    A      c1, c2
    2    E      c3
    3    M      C2, c3
    

    En la tabla anterior, Course es un atributo de varios valores, por lo que no está en 1NF.

    La siguiente tabla está en 1NF ya que no hay un atributo de varios valores

    ID   Name   Course
    ------------------
    1    A       c1
    1    A       c2
    2    E       c3
    3    M       c2
    3    M       c3
    

     

2. Segunda Forma Normal –

Para estar en segunda forma normal, una relación debe estar en primera forma normal y la relación no debe contener ninguna dependencia parcial. Una relación está en 2FN si no tiene dependencia parcial, es decir , ningún atributo no primo (atributos que no forman parte de ninguna clave candidata) depende de ningún subconjunto adecuado de ninguna clave candidata de la tabla.

Dependencia parcial: si el subconjunto adecuado de la clave candidata determina un atributo no principal, se denomina dependencia parcial.

  • Ejemplo 1: considere la tabla 3 de la siguiente manera.
    STUD_NO            COURSE_NO        COURSE_FEE
    1                     C1                  1000
    2                     C2                  1500
    1                     C4                  2000
    4                     C3                  1000
    4                     C1                  1000
    2                     C5                  2000
    

    {Tenga en cuenta que hay muchos cursos que tienen la misma tarifa de curso. }

    Aquí,
    COURSE_FEE no puede decidir por sí solo el valor de COURSE_NO o STUD_NO;
    COURSE_FEE junto con STUD_NO no pueden decidir el valor de COURSE_NO;
    COURSE_FEE junto con COURSE_NO no pueden decidir el valor de STUD_NO;
    Por lo tanto,
    COURSE_FEE sería un atributo no primo, ya que no pertenece a la única clave candidata {STUD_NO, COURSE_NO};
    Pero, COURSE_NO -> COURSE_FEE, es decir, COURSE_FEE depende de COURSE_NO, que es un subconjunto adecuado de la clave candidata. El atributo no principal COURSE_FEE depende de un subconjunto adecuado de la clave candidata, que es una dependencia parcial y, por lo tanto, esta relación no está en 2FN.

    Para convertir la relación anterior a 2NF,
    necesitamos dividir la tabla en dos tablas como:
    Tabla 1: STUD_NO, COURSE_NO
    Tabla 2: COURSE_NO, COURSE_FEE

           Table 1                                    Table 2
    STUD_NO            COURSE_NO          COURSE_NO                COURSE_FEE     
    1                 C1                  C1                        1000
    2                 C2                  C2                        1500
    1                 C4                  C3                        1000
    4                 C3                  C4                        2000
    4                 C1                  C5                        2000        

    2 C5

    NOTA: 2NF intenta reducir los datos redundantes que se almacenan en la memoria. Por ejemplo, si hay 100 estudiantes que toman el curso C1, no necesitamos almacenar su tarifa como 1000 para todos los 100 registros; en su lugar, podemos almacenarla una vez en la segunda tabla, ya que la tarifa del curso para C1 es 1000.

  • Ejemplo 2: considere las siguientes dependencias funcionales en la relación R (A, B, C, D)
    AB -> C  [A and B together determine C]
    BC -> D  [B and C together determine D]

    En la relación anterior, AB es la única clave candidata y no hay dependencia parcial, es decir, cualquier subconjunto propio de AB no determina ningún atributo no primo.

  • 3. Tercera Forma Normal –

    Una relación está en tercera forma normal, si no hay dependencia transitiva para atributos no primos, así como está en segunda forma normal.
    Una relación está en 3NF si al menos una de las siguientes condiciones se cumple en cada dependencia de función no trivial X –> Y

  1. X es una superclave.
  2. Y es un atributo principal (cada elemento de Y es parte de alguna clave candidata).

image5

Dependencia transitiva: si A->B y B->C son dos FD, entonces A->C se denomina dependencia transitiva.

  • Ejemplo 1 – En la relación ESTUDIANTE dada en la Tabla 4,

    Conjunto de FD: {STUD_NO -> STUD_NAME, STUD_NO -> STUD_STATE, STUD_STATE -> STUD_COUNTRY, STUD_NO -> STUD_AGE}
    Clave candidata: {STUD_NO}

    Para esta relación en la tabla 4, STUD_NO -> STUD_STATE y STUD_STATE -> STUD_COUNTRY son verdaderos. Entonces STUD_COUNTRY depende transitivamente de STUD_NO. Viola la tercera forma normal. Para convertirlo en la tercera forma normal, descompondremos la relación ESTUDIANTE (NÚMERO_ESTUDIO, NOMBRE_ESTUDIO, TELÉFONO_ESTUDIO, ESTADO_ESTUDIO, PAÍS_ESTUDIO_EDAD_ESTUDIO) como:
    ESTUDIANTE (NÚMERO_ESTUDIO, NOMBRE_ESTUDIO, TELÉFONO_ESTUDIO, ESTADO_ESTUDIO, EDAD_ESTUDIO)
    ESTADO_PAÍS (ESTADO, PAÍS)

  • Ejemplo 2: Considere la relación R(A, B, C, D, E)
    A -> BC,
    CD -> E,
    B -> D,
    E -> A
    Todas las posibles claves candidatas en la relación anterior son {A, E, CD , BC} Todos los atributos están en el lado derecho de todas las dependencias funcionales son primos.
  • 4. Forma normal de Boyce-Codd (BCNF) –

    Una relación R está en BCNF si R está en Tercera Forma Normal y para cada FD, LHS es superclave. Una relación está en BCNF iff en cada dependencia funcional no trivial X –> Y, X es una superclave.

    • Ejemplo 1: encontrar la forma normal más alta de una relación R(A,B,C,D,E) con FD establecido como {BC->D, AC->BE, B->E}
      Paso 1. Como podemos ver , (AC)+ ={A,C,B,E,D} pero ninguno de sus subconjuntos puede determinar todos los atributos de la relación, por lo que AC será la clave candidata. A o C no se pueden derivar de ningún otro atributo de la relación, por lo que solo habrá 1 clave candidata {AC}.
      Paso 2. Los atributos principales son aquellos atributos que forman parte de la clave candidata {A, C} en este ejemplo y otros serán no principales {B, D, E} en este ejemplo.
      Paso 3. La relación R está en la primera forma normal, ya que un DBMS relacional no permite atributos multivaluados o compuestos.
      La relación está en la segunda forma normal porque BC->D está en la segunda forma normal (BC no es un subconjunto propio de la clave candidata AC) y AC->BE está en la segunda forma normal (AC es la clave candidata) y B->E está en la segunda forma normal (B no es un subconjunto propio de la clave candidata AC).
      La relación no está en la 3ra forma normal porque en BC->D (ni BC es una superclave ni D es un atributo principal) y en B->E (ni B es una superclave ni E es un atributo principal) pero para satisfaga la 3ra normal para, ya sea LHS de un FD debe ser super clave o RHS debe ser atributo principal.
      Entonces, la forma normal más alta de relación será la segunda forma normal.
    • Ejemplo 2: por ejemplo, considere la relación R (A, B, C)
      A -> BC,
      B ->
      A y B, ambas son superclaves, por lo que la relación anterior está en BCNF.

    Puntos clave –

  1. BCNF está libre de redundancia.
  2. Si una relación está en BCNF, entonces también se satisface 3NF.
  3.  Si todos los atributos de la relación son atributos primos, entonces la relación siempre está en 3FN.
  4. Una relación en una base de datos relacional está siempre y al menos en forma 1NF.
  5. Cada relación binaria (una relación con solo 2 atributos) siempre está en BCNF.
  6. Si una relación tiene solo claves candidatas singleton (es decir, cada clave candidata consta de solo 1 atributo), entonces la relación siempre está en 2NF (porque no es posible una dependencia funcional parcial).
  7. A veces, optar por la forma BCNF puede no preservar la dependencia funcional. En ese caso, vaya a BCNF solo si no se requieren los FD perdidos, de lo contrario, normalice solo hasta 3NF.
  8. Hay muchas más formas normales que existen después de BCNF, como 4NF y más. Pero en los sistemas de bases de datos del mundo real, generalmente no se requiere ir más allá de BCNF.

Ejercicio 1 : Encuentre la forma normal más alta en R (A, B, C, D, E) bajo las siguientes dependencias funcionales.

  ABC --> D
  CD --> AE 

Puntos importantes para resolver el tipo de pregunta anterior.
1) Siempre es una buena idea comenzar a verificar desde BCNF, luego 3 NF, y así sucesivamente.
2) Si alguna dependencia funcional satisface una forma normal, entonces no hay necesidad de verificar la forma normal inferior. Por ejemplo, ABC -> D está en BCNF (tenga en cuenta que ABC es una superclave), por lo que no es necesario verificar esta dependencia para formas normales inferiores.

Las claves candidatas en la relación dada son {ABC, BCD}

BCNF: ABC -> D está en BCNF. Verifiquemos CD -> AE, CD no es una súper clave, por lo que esta dependencia no está en BCNF. Entonces, R no está en BCNF.

3NF: ABC -> D no necesitamos verificar esta dependencia ya que ya satisfizo BCNF. Consideremos CD -> AE. Como E no es un atributo primo, la relación no está en 3NF.

2NF: En 2NF, necesitamos verificar la dependencia parcial. CD es un subconjunto propio de una clave candidata y determina E, que es un atributo no principal. Entonces, la relación dada tampoco está en 2NF. Entonces, la forma normal más alta es 1 NF.

Preguntas de GATE CS Corner
Practicar las siguientes preguntas lo ayudará a evaluar su conocimiento. Todas las preguntas se han hecho en GATE en años anteriores o en pruebas simuladas de GATE. Es muy recomendable que los practiques.

  1. GATE CS 2012, Pregunta 2
  2. GATE CS 2013, Pregunta 54
  3. GATE CS 2013, Pregunta 55
  4. GATE CS 2005, Pregunta 29
  5. GATE CS 2002, Pregunta 23
  6. GATE CS 2002, Pregunta 50
  7. GATE CS 2001, Pregunta 48
  8. GATE CS 1999, Pregunta 32
  9. GATE IT 2005, Pregunta 22
  10. GATE IT 2008, Pregunta 60
  11. GATE CS 2016 (Conjunto 1), Pregunta 31

Consulte el cuestionario sobre formularios normales de la base de datos para conocer todas las preguntas del año anterior.

Este artículo es una contribución de Sonal Tuteja . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *