machine learning examples dbms data 2nf 1nf relational-database database-normalization decomposition

relational database - learning - Descomponiendo una relación en BCNF



normalization forms in dbms (2)

Tengo problemas para establecer cuándo una relación está en la Forma normal de Boyce-Codd y cómo descomponerla en BCNF si no lo está. Dado este ejemplo:

R (A, C, B, D, E) con dependencias funcionales: A -> B, C -> D

¿Cómo hago para descomponerlo?

Los pasos que he tomado son:

A+ = AB C+ = CD R1 = A+ = **AB** R2 = ACDE (since elements of C+ still exist, continue decomposing) R3 = C+ = **CD**

R4 = ACE (no hay cierres FD residen en esta relación)

Así que ahora sé que ACE compondrá toda la relación, pero la respuesta para la descomposición es: AB, CD, ACE.

Supongo que estoy luchando con la forma de descomponer correctamente una relación en el formulario BCNF y cómo saber cuándo ha terminado. Apreciaría mucho a cualquiera que pueda guiarme a través de su proceso de pensamiento al resolver estos problemas. ¡Gracias!


1NF -> 2NF -> 3NF -> BCNF

Según el conjunto de FD dado, "ACE" forma la clave. Claramente, R (A, B, C, D, E) no está en 2NF. La descomposición 2NF da R1 (A, B), R2 (C, D) y R3 (A, C, E). esta descomposición las relaciones descompuestas están en 3NF y también en BCNF.


Aunque la pregunta es antigua, las otras preguntas / respuestas no parecen proporcionar una respuesta general paso a paso muy clara sobre la determinación y descomposición de las relaciones con BCNF.

1. Determine BCNF:
Para que la relación R esté en BCNF, todas las dependencias funcionales (FD) que se mantienen en R deben satisfacer la propiedad de que los determinantes X son todas las superclaves de R. es decir, si X-> Y se mantiene en R, entonces X debe ser una superclave de R para estar en BCNF.

En su caso, se puede mostrar que la única clave candidata (clave mínima) es ACE. Por lo tanto, ambos FD: A-> B y C-> D están violando BCNF, ya que tanto A como C no son superclaves ni R.

2. Descomponer R en forma BCNF:
Si R no está en BCNF, descomponemos R en un conjunto de relaciones S que están en BCNF.
Esto se puede lograr con un algoritmo muy simple:

Initialize S = {R} While S has a relation R'' that is not in BCNF do: Pick a FD: X->Y that holds in R'' and violates BCNF Add the relation XY to S Update R'' = R''-Y Return S

En su caso los pasos iterativos son los siguientes:

S = {ABCDE} // Intialization S = {R} S = {ACDE, AB} // Pick FD: A->B which violates BCNF S = {ACE, AB, CD} // Pick FD: C->D which violates BCNF // Return S as all relations are in BCNF

Por lo tanto, R (A, B, C, D, E) se descompone en un conjunto de relaciones: R1 (A, C, E), R2 (A, B) y R3 (C, D) que satisfacen BCNF.

Tenga en cuenta también que en este caso, la dependencia funcional se conserva, pero la normalización a BCNF no garantiza esto.

Espero que esto ayude.