Jaka jest różnica między 3NF a BCNF?

Czy ktoś może mi wyjaśnić różnicę między 3NF a BCNF? Byłoby świetnie, gdybyś mógł również podać kilka przykładów. Dzięki.

Author: philipxy, 2013-11-03

1 answers

Różnica między 3NF i BCNF jest subtelna.

3NF

Definicja

Relacja jest w 3NF, jeśli jest w 2NF i żaden atrybut nie-prime nie zależy przejściowo od klucza głównego. Innymi słowy, relacja R jest w 3NF, jeśli dla każdej zależności funkcyjnej X ⟶ A W R spełniony jest co najmniej jeden z następujących warunków:

  1. X jest kluczem lub superkey w R
  2. A jest atrybutem głównym w R

Przykład

Biorąc pod uwagę następujące relacja:

EMP_DEPT(firstName, employeeNumber, dateOfBirth, address, departmentNumber, departmentName)

Pracownik może pracować tylko w jednym dziale, A każdy dział ma wielu pracowników.

Kluczem kandydata jest employeeNumber .

Rozważmy następujące zależności funkcjonalne:

  1. employeeNumber ⟶ firstName, dateOfBirth, address, departmentNumber
  2. departmentNumber ⟶ departmentName

Biorąc pod uwagę definicję powyżej można wywnioskować, że relacja EMP_DEPT nie znajduje się w 3NF, ponieważ druga zależność funkcyjna nie spełnia żadnego z 2 Warunków 3NF:

  1. departmentNumber nie jest kluczem lub superkey w EMP_DEPT
  2. departmentName nie jest atrybutem prime w EMP_DEPT

BCNF

Definicja

Relacja R jest w BCNF, jeśli jest w 3NF i dla każdej zależności funkcyjnej X ⟶ A W R, X jest kluczem lub superkey w R. innymi słowy, jedynym różnica między 3NF i BCNF polega na tym, że w BCNF nie występuje drugi warunek 3NF. To sprawia, że bcnf jest bardziej rygorystyczne niż 3NF, ponieważ każda relacja, która jest w BCNF, będzie w 3NF, ale niekoniecznie każda relacja, która jest w 3NF, będzie w BCNF.

Przykład

Biorąc pod uwagę następującą relację:

STUDENT_COURSE (studentNumber, socialSecurityNumber, courseNumber)

Student może pomóc na wielu Kursach, a na kursie może być wielu studentów.

The klucz kandydata to:

  1. socialSecurityNumber, courseNumber
  2. studentNumber, courseNumber

Rozważmy następujące zależności funkcjonalne:

  1. studentNumber soci socialSecurityNumber
  2. socialSecurityNumber stud studentNumber

Biorąc pod uwagę powyższą definicję, można stwierdzić, że STUDENT_COURSE nie jest w BCNF, ponieważ przynajmniej studentNumber nie jest kluczem lub superkeyem w STUDENT_COURSE.

 46
Author: Mosty Mostacho,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-14 10:09:43