Hoy leí sobre el algoritmo de descomposición 3NF. Decía:
- Encuentra una base mínima de F, digamos G
- Para cada FD X → A en G, use {X, A} como el esquema de una de las relaciones en la descomposición
- 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:
-
{A→B, B→A, B→C, C→B}
; y -
{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:
- Encuentre una base mínima de F, digamos G
- 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
- Eliminar todas las relaciones cuyos atributos están contenidos en otra relación.
- 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.
A First Course in Database System - 3rd edition
. ¿Cuál debería seguir ahora?