das Prädikat und Anpassungszwänge zu haben.
| Mitarbeiter (EMP_ID), mit E-Mail (EMAIL), nahm Kurs (CRS_ID) in Jahr (YR).
Für jeden Mitarbeiter und Kurs; Dieser Mitarbeiter nahm diesen Kurs höchstens einmal, es ist möglich, dass mehr als ein Mitarbeiter diesen Kurs belegt hat.
Für jeden Mitarbeiter hat dieser Mitarbeiter genau eine E-Mail.
Für jede E-Mail hat genau ein Mitarbeiter diese E-Mail.
Für jeden einzelnen Mitarbeiter und Kurs; dieser Mitarbeiter hat diesen Kurs in genau einem Jahr absolviert.
Für jeden Mitarbeiter und Jahr; Es ist möglich, dass der Mitarbeiter in diesem Jahr mehr als einen Kurs belegt hat.
Für jeden Kurs und Jahr; Es ist möglich, dass mehr als ein Mitarbeiter diesen Kurs in diesem Jahr absolviert hat.
R {EMP_ID, EMAIL, CRS_ID, YR}
KEY {EMP_ID, CRS_ID}
KEY {EMAIL, CRS_ID}
FDS hierfür sind
FD {EMP_ID, CRS_ID} --> {YR}
FD {EMAIL, CRS_ID} --> {YR}
FD {EMP_ID} --> {EMAIL}
FD {EMAIL} --> {EMP_ID}
Also, jede dieser bedenkt wie FD X --> Y
gilt, dass entweder,
- X Superkey ist
- Y ein Unterschlüssel
daher die R
im 3. NF ist.
Für BCNF ist die Anforderung, dass für alle nichttrivialen FD X --> Y
in R
X ein Superkey ist.
So, jetzt konnten wir dies zersetzen
{EMP_ID, EMAIL} {EMP_ID, CRS_ID, YR}
OR
{EMP_ID, EMAIL} {EMAIL, CRS_ID, YR}
, welche diese beiden FDs zu Subkeys beseitigen würde.
Hier ist eine Checkliste für 2NF
---------------------------------------
For each nontrivial | NF
FD X --> Y |
at least one holds | 2nd 3rd BCNF
---------------------------------------
X is a superkey ✔ ✔ ✔
Y is a subkey ✔ ✔
X is not a subkey ✔
---------------------------------------
FD X --> Y is trivial iff Y ⊆ X
Mögliches Duplikat BCNF [Differenz zwischen 3NF und BCNF in einfachen Worten (muss auf einen 8-jährigen erklären kann)] (http://stackoverflow.com/questions/8437957/difference-between-3nf-and-bcnf-in-simple-terms-must-be-able-to-explain-to-an-8) – sqlvogel