2017-01-02 2 views
1

Könnten Sie mir bitte einen Artikel geben, der ein Beispiel für ein DB-Design gibt, das in 3NF, aber nicht in BCNF ist, und dann veranschaulicht, wie es in BCNF konvertiert wird? Alle Artikel, die ich gesehen habe, die BCNF zu erklären versuchen, geben Beispiele von Tabellen, die in 1NF sind, und wandeln sie dann in BCNF um. Das lässt mich den Unterschied zwischen 3NF und BCNF nicht sehen.BCNF Normalisierung

Vielen Dank im Voraus

+0

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

Antwort

0

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