Różnica między BCNF i 3NF
Korzystanie z definicji BCNF
Wtedy i tylko wtedy, gdy dla każdej z jego zależności X → Y zachodzi przynajmniej jeden z następujących warunków :
- X → Y to trywialna zależność funkcjonalna (Y ⊆ X) lub
- X jest super kluczem dla schematu R.
i definicję 3NF
Wtedy i tylko wtedy, gdy dla każdej z jego zależności funkcjonalnych X → A zachodzi przynajmniej jeden z poniższych warunków:
- X zawiera A (to znaczy X → A jest trywialną zależnością funkcjonalną) lub
- X to superklucz lub
- Każdy element AX, różnica zestawu między A i X, jest atrybutem głównym (tj. Każdy atrybut w AX jest zawarty w jakimś kluczu kandydującym)
W prostych słowach widzimy następującą różnicę:
- W BCNF : każdy klucz częściowy (atrybut główny) może zależeć tylko od superklucza,
natomiast
- W 3NF : Klucz częściowy (atrybut główny) może również zależeć od atrybutu, który nie jest superkluczem (tj. Inny częściowy atrybut klucza / główny lub nawet atrybut inny niż główny).
Gdzie
- Główny atrybut to atrybut znaleziony w kluczu kandydującym, a
- Klucz potencjalny to minimalna nadkluczem w tym zakresie, a
- Nadkluczem to zestaw atrybutów zmiennej relacji, dla których uznaje, że we wszystkich stosunkach przypisanych do tej zmiennej, nie istnieją dwa odrębne krotki (wiersze), które mają te same wartości atrybutów w tym set.Equivalently nadkluczem może również być zdefiniowany jako zbiór atrybutów schematu relacji, od których wszystkie atrybuty schematu są funkcjonalnie zależne. (Superklucz zawsze zawiera klucz kandydujący / klucz kandydujący jest zawsze podzbiorem superklucza. Możesz dodać dowolny atrybut w relacji, aby uzyskać jeden z superkluczy).
Oznacza to, że żaden częściowy podzbiór (dowolny nietrywialny podzbiór z wyjątkiem pełnego zestawu) klucza kandydującego nie może być funkcjonalnie zależny od czegokolwiek innego niż superklucz.
Tabela / relacja nie w BCNF podlega anomaliom, takim jak anomalie aktualizacji wspomniane w przykładzie pizzy przez innego użytkownika. Niestety,
- BNCF nie zawsze można uzyskać , natomiast
- Zawsze można uzyskać 3NF .
Przykład 3NF kontra BCNF
Przykład różnicy można obecnie znaleźć pod adresem „ Tabela 3NF niezgodna z BCNF (normalna forma Boyce-Codda) ” w Wikipedii, gdzie poniższa tabela spełnia wymagania 3NF, ale nie BCNF, ponieważ „Tennis Court” (częściowy atrybut klucza / pierwszego) zależy na "Rate Type" (częściowy atrybut klucza / prime, który nie jest superkluczem), który jest zależnością, którą możemy określić, pytając klientów bazy danych, klub tenisowy:
Dzisiejsze rezerwacje kortów tenisowych ( 3NF, nie 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
Superklucze stołu to:
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
Problem 3NF : częściowy atrybut klucza / numeru głównego „Court” zależy od czegoś innego niż superklucz. Zamiast tego jest zależny od częściowego klucza / atrybutu głównego „Typ stawki”. Oznacza to, że użytkownik musi ręcznie zmienić typ stawki, jeśli aktualizujemy kort lub ręcznie zmienić kort, jeśli chce zastosować zmianę stawki.
- Ale co, jeśli użytkownik ulepszy kort, ale nie pamięta o podwyższeniu stawki? A co, jeśli do sądu zostanie zastosowany niewłaściwy rodzaj stawki?
(Z technicznego punktu widzenia nie możemy zagwarantować, że zależność funkcjonalna „Typ stawki” -> „Sąd” nie zostanie naruszona.)
Rozwiązanie BCNF : Jeśli chcemy umieścić powyższą tabelę w BCNF, możemy zdekomponować podaną relację / tabelę na następujące dwie relacje / tabele (zakładając, że wiemy, że typ stawki zależy tylko od sądu i statusu członkostwa, które moglibyśmy dowiedz się pytając klientów naszej bazy danych, właścicieli klubu tenisowego):
Typy stawek ( BCNF i słabszy 3NF, co jest implikowane przez BCNF)
Rate Type Court Member Flag
--------- ----- -----------
SAVER 1 Yes
STANDARD 1 No
PREMIUM-A 2 Yes
PREMIUM-B 2 No
Dzisiejsze rezerwacje kortów tenisowych ( BCNF i słabszy 3NF, co sugeruje 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
Problem rozwiązany : Teraz, jeśli zaktualizujemy kort, możemy zagwarantować, że typ stawki będzie odzwierciedlał tę zmianę i nie możemy naliczyć niewłaściwej ceny za sąd.
(Z technicznego punktu widzenia możemy zagwarantować, że zależność funkcjonalna „Typ stawki” -> „Sąd” nie zostanie naruszona.)