Natknąłem się na problem z projektowaniem bazy danych, który jest poza moją ligą, a mój guru DBA bierze udział w ćwiczeniach przeciwpożarowych.
Zasadniczo mam tabelę z następującym kluczem podstawowym (PK dla zwięzłości):
child_id integer
parent_id integer
date datetime
child_id
i parent_id
są kluczami obcymi do tabel encji. Sama tabela „podrzędna” zawiera także klucz obcy do tabeli „nadrzędnej”, a lo child_id
zawsze odnosi się do tego samego, parent_id
jak oczekiwano w powyższej tabeli. W rzeczywistości okazuje się, że jest jakiś dodatkowy kod, który utrzymuje synchronizację między nimi.
Co sprawia, że ten nadmiernie entuzjastyczny nowicjusz normalizacyjny mówi: „Zamiast tego powinienem usunąć redundancję!”
Rozkładam się na następujące:
Table_1 PK:
child_id integer
date datetime
Table_2 PK:
parent_id integer
date datetime
Table_3: (already exists)
child_id integer PRIMARY KEY
parent_id integer FOREIGN KEY
A kiedy dołączę do nich w naturalny sposób, odzyskuję oryginalny stół. Z mojego zrozumienia wynika, że to 5NF.
Teraz jednak zdaję sobie sprawę, że istnieje ukryta zasada biznesowa.
Zazwyczaj daty powiązane z danym child_id
muszą być podzbiorem dat powiązanych z odpowiednim parent_id
. Widać, że pierwsza tabela wymusza tę regułę.
Mój rozkład nie wymusza reguły, ponieważ możesz swobodnie dodawać do tabeli 1, dopóki daty nie staną się zbyt duże.
Co prowadzi mnie tutaj z następującymi pytaniami:
Czy to rozkład 5NF? Chociaż powiedziałbym, że pozwala na anomalie wstawiania, wydaje się, że podąża za przykładem Wiki, który sam podąża za tym przewodnikiem . Wyrażenie (moje podkreślenie) „możemy zrekonstruować wszystkie prawdziwe fakty ze znormalizowanej formy składającej się z trzech oddzielnych typów rekordów” daje mi specjalną pauzę, ponieważ bez względu na to, jak dużo śmieci wpompowuję
Table_1
, naturalne połączenie wciąż je ignoruje.Załóżmy, że nie podoba mi się ten rozkład (nie lubię). Przyjmuję do wiadomości, że praktycznym rozwiązaniem jest pozostawienie tabeli i kodu bez zmian. Ale teoretycznie, czy istnieje sposób na rozłożenie i / lub dodanie ograniczeń, aby oderwać się od pierwszego stołu i zachować zasady biznesowe?