Vastus: Kui ma vaatan C.J Date ja J. Celko töid, siis nad mainivad seda normaalkuju lühidalt, ajaloolise tagasivaate ja esitluse täielikkuse huvides. C.J. Date osundab, et EVNK-le viidatakse kirjanduses vähe.
EVNK on kolmanda normaalkuju (3NK) ja Boyce/Coddi normaalkuju (BCNK) vahel - kui tabel on elementaarvõtme normaalkujul, siis on see ka kolmandal normaalkujul. Eesmärk on ikkagi jõuda Boyce/Coddi normaalkujuni. Muide,
see artikkel, kus EVNK välja pakutakse, annab head 3NK ja BCNK definitsioonid. EVNK käsitleb olukorda, kui tabelil on rohkem kui üks liitvõti ja need võtmed osaliselt kattuvad (st neil on ühiseid veerge). Sellisel juhul võib kattuvates veergudes olla korduvaid andmeid.
C. J. Date defineerib EVNK järgnevalt: "Tabel on elementaarvõtme normaalkujul (EVNK) siis ja ainult siis kui iga mittetriviaalse funktsionaalse sõltuvuse X=>Y korral on kas
a) X tabeli supervõti või
b) Y on mõne elementaarvõtme alamvõti.
K on tabeli T elementaarvõti siis ja ainult siis kui tabelis T on selline veerg V, mille puhul funktsionaalne sõltuvus K=>{V} on mittetriviaalne ja täielik." (
https://learning.oreilly.com/library/view/database-design-and/9781449330187/ch13.html#concluding_remarks-id4)
J. Celko esitab tabeli sellele normaalkujule viimise kohta näite.
https://learning.oreilly.com/library/view/joe-celkos-sql/9780123693792/9780123693792_ch02lev1sec5.html Aine_deklareerimine (yliopilaskood, ainekood, aine_nimetus)
Primaarvõti (yliopilaskood, ainekood)
Alternatiivvõti (yliopilaskood, aine_nimetus)
Mittetriviaalsed täielikud funktsionaalsed sõltuvused selles tabelis:
(yliopilaskood, ainekood) => aine_nimetus
(yliopilaskood, aine_nimetus) => ainekood
ainekood=>aine_nimetus
aine_nimetus=>ainekood
Ülekanduvaid sõltuvusi selles tabelis ei ole ja seega on see tabel kolmandal normaalkujul.
Leidub funktsionaalseid sõltuvusi, mille determinant ei ole kandidaatvõti ning seega pole see Boyce/Coddi normaalkujul.
ainekood=>aine_nimetus
aine_nimetus=>ainekood
Lähemal vaatlemisel ilmneb, et tabelis võivad ainete andmed olla erinevates ridades dubleeritud, st selles tabelis on andmete liiasust, mida saaks täiendava normaliseerimisega vähendada.
Tabeli elementaarvõtmed on minu arusaamise kohaselt.
(yliopilaskood, ainekood)
(sest leidub veerg aine_nimetus, nii et (yliopilaskood, ainekood) => aine_nimetus)
(yliopilaskood, aine_nimetus)
(sest leidub veerg ainekood, nii et (yliopilaskood, aine_nimetus) => ainekood)
Need on kandidaatvõtmed, st nende atribuutide pärisalamhulk ei ole enam võti. Järelikult eelnevalt välja kirjutatud neljast funktsionaalsest sõltuvusest kaks viimast ei rahulda EVNK tingimusi.
Lahendus oleks luua tabelid
Aine (ainekood, aine_nimetus)
Primaarvõti (ainekood)
Alternatiivvõti (aine_nimetus)
Aine_deklareerimine (yliopilaskood, ainekood)
Primaarvõti (yliopilaskood, ainekood)
Välisvõti (ainekood) Viitab Aine (ainekood)
Need tabelid on ka BCNK-l.