¿Cómo descomponer esta relación en relaciones 3NF?

Hoy leí sobre el algoritmo de descomposición 3NF. Decía:

  1. Encuentra una base mínima de F, digamos G
  2. Para cada FD X → A en G, use {X, A} como el esquema de una de las relaciones en la descomposición
  3. Si ninguno de los conjuntos de relaciones del Paso2 es una superclave para R, agregue otra relación cuyo esquema sea una clave para R

Quiero descomponer esta relación en 3NF.

R(A,B,C) S={A→B, A→C, B→A, B→C, C→A, C→ B, AB→ C, BC→A, AC→B, A→BC, B→AC, C→AB} 

Como podemos ver, la clave de R es: {A},{B},{C}

S tiene varias bases mínimas, como:

  1. {A→B, B→A, B→C, C→B}; y
  2. {A→B, B→C, C→A}

El problema es que si usamos la primera base mínima, entonces descomponemos R en 2 relaciones : (A, B), (B, C).

Si usamos la segunda base mínima, R se convierte en: (A, B), (B, C), (C, A).

Mi pregunta es: ¿cuál es la correcta?

Respuesta

En primer lugar, tenga en cuenta que La relación original ya está en Tercera Forma Normal, ya que cada atributo es primo (cada atributo es una clave, en realidad), por lo que se respeta la definición de 3NF.

Entonces, observe que el algoritmo está incompleto. Los pasos son:

  1. Encuentre una base mínima de F, digamos G
  2. Para cada grupo de FD con el mismo parte izquierda, X → A 1 , X → A 2 , …, X → A n en G, use {X, A 1 , A 2 , …, A n } como el esquema de una de las relaciones en la descomposición
  3. Eliminar todas las relaciones cuyos atributos están contenidos en otra relación.
  4. Si ninguno de los conjuntos de relaciones del Paso 2 es una superclave para R, agregue otra relación cuyo esquema sea una clave para R.

Entonces, en el primer caso, obtienes tres grupos de dependencias:

A → B B → A B → C C → B 

que producen tres relaciones, R 1 (A, B), R 2 (A, B, C), R 3 (B, C), y siguiendo el algoritmo, se obtiene como resultado solo R 2 , ya que los otros dos tienen atributos contenidos en ellos.

Así que tiene dos salidas diferentes del algoritmo, dependiendo de la base mínima utilizada (que a su vez depende de el orden en el que considera las dependencias al calcular la cobertura mínima).

Entonces, la respuesta a su pregunta:

que ¿uno es correcto?

es: ambos son correctos , ya que ambos satisfacen la definición de 3NF. Simplemente ha descubierto que el algoritmo de síntesis para descomponer una relación en 3NF puede producir diferentes soluciones.

Una pregunta diferente es: cuál es «mejor» y, por supuesto, la solución con una sola relación es «mejor» , ya que no es necesario unir tablas al hacer consultas.

Por supuesto, si uno pudiera verificar al principio si la relación ya está en 3NF, entonces puede evitar aplicar el algoritmo. Pero esto en general no se puede hacer, ya que la verificación requiere el cálculo exponencial de todas las claves para encontrar los atributos primos de la relación.

Comentarios

  • ¡Gracias por tu respuesta! Pero, ¿cómo generaste 3 relaciones: R1 (A, B), R2 (A, B, C), R3 (B, C)? Pensé que solo tiene R1 y R3. R2 es la relación original.
  • Para el segundo paso del algoritmo correcto, hay dos dependencias con la misma parte izquierda, B → A y B → C, por lo que debe poner todos los atributos juntos y obtener la relación (A, B, C). Solo lo dicta el algoritmo.
  • Vaya, no ' no sabía sobre ese segundo paso. Tomé el algoritmo de un libro llamado A First Course in Database System - 3rd edition. ¿Cuál debería seguir ahora?
  • Ese algoritmo no está completo. Todos los libros principales sobre bases de datos tienen el algoritmo que describí en la respuesta.

Deja una respuesta

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