La diferencia entre BCNF y 3NF
Usando la definición BCNF
Si y solo si para cada una de sus dependencias X → Y, se cumple al menos una de las siguientes condiciones :
- X → Y es una dependencia funcional trivial (Y ⊆ X), o
- X es una súper clave para el esquema R
y la definición 3NF
Si y solo si, para cada una de sus dependencias funcionales X → A, se cumple al menos una de las siguientes condiciones:
- X contiene A (es decir, X → A es una dependencia funcional trivial), o
- X es una superclave, o
- Cada elemento de AX, la diferencia establecida entre A y X, es un atributo principal (es decir, cada atributo en AX está contenido en alguna clave candidata)
Vemos la siguiente diferencia, en términos simples:
- En BCNF : cada clave parcial (atributo principal) solo puede depender de una superclave,
mientras
- En 3NF : una clave parcial (atributo principal) también puede depender de un atributo que no es una superclave (es decir, otra clave parcial / atributo principal o incluso un atributo no principal).
Dónde
- Un atributo principal es un atributo que se encuentra en una clave candidata y
- Una clave candidata es una superclave mínima para esa relación, y
- Una superclave es un conjunto de atributos de una variable de relación para la cual se sostiene que en todas las relaciones asignadas a esa variable, no hay dos tuplas (filas) distintas que tengan los mismos valores para los atributos en este conjunto. se define como un conjunto de atributos de un esquema de relación del cual todos los atributos del esquema dependen funcionalmente. (Una superclave siempre contiene una clave candidata / una clave candidata es siempre un subconjunto de una superclave. Puede agregar cualquier atributo en una relación para obtener una de las superclaves).
Es decir, ningún subconjunto parcial (cualquier subconjunto no trivial excepto el conjunto completo) de una clave candidata puede depender funcionalmente de otra cosa que no sea una superclave.
Una tabla / relación que no está en BCNF está sujeta a anomalías como las anomalías de actualización mencionadas en el ejemplo de pizza por otro usuario. Desafortunadamente,
- BNCF no siempre se puede obtener , mientras
- 3NF siempre se puede obtener .
Ejemplo 3NF versus BCNF
Un ejemplo de la diferencia se puede encontrar actualmente en la " tabla 3NF que no cumple con BCNF (forma normal de Boyce-Codd) " en Wikipedia, donde la siguiente tabla cumple con 3NF pero no BCNF porque "Cancha de tenis" (una clave parcial / atributo principal) depende en "Tipo de tasa" (una clave parcial / atributo principal que no es una superclave), que es una dependencia que podríamos determinar preguntando a los clientes de la base de datos, el club de tenis:
Reservas de canchas de tenis de hoy ( 3NF, no BCNF )
Court Start Time End Time Rate Type
------- ---------- -------- ---------
1 09:30 10:30 SAVER
1 11:00 12:00 SAVER
1 14:00 15:30 STANDARD
2 10:00 11:30 PREMIUM-B
2 11:30 13:30 PREMIUM-B
2 15:00 16:30 PREMIUM-A
Las superclaves de la tabla son:
S1 = {Court, Start Time}
S2 = {Court, End Time}
S3 = {Rate Type, Start Time}
S4 = {Rate Type, End Time}
S5 = {Court, Start Time, End Time}
S6 = {Rate Type, Start Time, End Time}
S7 = {Court, Rate Type, Start Time}
S8 = {Court, Rate Type, End Time}
ST = {Court, Rate Type, Start Time, End Time}, the trivial superkey
El problema 3NF : La clave parcial / atributo principal "Court" depende de algo más que una superclave. En cambio, depende de la clave parcial / atributo principal "Tipo de tasa". Esto significa que el usuario debe cambiar manualmente el tipo de tarifa si mejoramos una cancha, o cambiar la cancha manualmente si desea aplicar un cambio de tarifa.
- Pero, ¿qué sucede si el usuario actualiza la cancha pero no recuerda aumentar la tarifa? ¿O qué sucede si se aplica el tipo de tarifa incorrecto a un tribunal?
(En términos técnicos, no podemos garantizar que no se viole la dependencia funcional "Tipo de tarifa" -> "Corte").
La solución de BCNF : si queremos ubicar la tabla anterior en BCNF, podemos descomponer la relación / tabla dada en las siguientes dos relaciones / tablas (suponiendo que sepamos que el tipo de tasa depende solo del estado de la corte y de la membresía, lo cual podríamos descubra preguntando a los clientes de nuestra base de datos, los propietarios del club de tenis):
Tipos de tasa ( BCNF y el 3NF más débil, que implica BCNF)
Rate Type Court Member Flag
--------- ----- -----------
SAVER 1 Yes
STANDARD 1 No
PREMIUM-A 2 Yes
PREMIUM-B 2 No
Reservas de canchas de tenis de hoy ( BCNF y el 3NF más débil, que está implícito en BCNF)
Member Flag Court Start Time End Time
----------- ----- ---------- --------
Yes 1 09:30 10:30
Yes 1 11:00 12:00
No 1 14:00 15:30
No 2 10:00 11:30
No 2 11:30 13:30
Yes 2 15:00 16:30
Problema resuelto : ahora, si mejoramos el tribunal, podemos garantizar que el tipo de tarifa reflejará este cambio, y no podemos cobrar el precio incorrecto por un tribunal.
(En términos técnicos, podemos garantizar que no se violará la dependencia funcional "Tipo de tarifa" -> "Tribunal").