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.
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:
- X jest kluczem lub superkey w R
- 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:
- employeeNumber ⟶ firstName, dateOfBirth, address, departmentNumber
- 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:
- departmentNumber nie jest kluczem lub superkey w EMP_DEPT
- 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:
- socialSecurityNumber, courseNumber
- studentNumber, courseNumber
Rozważmy następujące zależności funkcjonalne:
- studentNumber soci socialSecurityNumber
- 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.
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