Czy istnieje narzędzie do sprawdzenia, czy moja baza danych jest znormalizowana do trzeciej normalnej postaci?

20

Niedawno dowiedziałem się o normalizacji i rozumiem, jak ważne jest wdrożenie nowego schematu.

Jak mogę sprawdzić, czy moja baza danych jest zgodna z 2NF lub 3NF?

Ręczna recenzja jest pewną opcją, ale szukam tutaj zautomatyzowanego narzędzia.

Nie szukam narzędzia typu „wskaż i kliknij”, a raczej czegoś, co podkreśliłoby możliwe optymalizacje w celu zapewnienia zgodności tabeli 3NF. Wydaje mi się, że może korzystać ze statystyk opartych na dobrych przykładowych danych i / lub analizie semantycznej nazw kolumn.

ack__
źródło
1
Mam nadzieję, że takie narzędzie nie istnieje. 2NF / 3NF nie musi być egzekwowany. Projektowanie schematu / modelu często musi uwzględniać praktyczne aspekty i względy wydajnościowe, które zwykle wyrzucają xNF przez okno
Philᵀᴹ
2
Czy to oznacza, że ​​normalizacja nie jest stosowana w rzeczywistości? Planowałem użyć go jako punktu wyjścia i rozważę denormalizację, gdy spowolni on wydajność.
ack__
3
Projektowanie schematów jest bardziej sztuką niż nauką. Jasne, że są podstawowe zasady, których należy przestrzegać, ale kiedy to zrobisz wystarczająco dużo, zaczynasz rozumieć, co działa, a co nie. Kunszt.
datagod
Nie zgadzam się z Philem. Normalizacja to czasem droga. Innym razem schemat gwiazdy jest lepszy. To zależy od tego, co robisz. Będziesz potrzebować bardzo dużo stolików, zanim automatyzacja się opłaci.
Walter Mitty

Odpowiedzi:

24

Normalizacja jest absolutnie używana w prawdziwym świecie ... i mam nadzieję, że wiesz, że 3NF jest dopiero trzecim z ... co jest teraz, 8? Ale 3NF powinien być łatwym celem.

Jednak ... Zaryzykowałbym stwierdzenie, że nie może być takiego narzędzia.

Normalizacja, technicznie rzecz biorąc, jest atrybutem każdej tabeli. W obrębie danej bazy danych różne tabele mogą mieć różne poziomy normalizacji.

Każda tabela przedstawia fakty ... fakty dotyczące przypadków określonego rodzaju rzeczy (osoba, konto, zamówienie, przesyłka, pozycja, lokalizacja), w tym czasem klucze obce, które prowadzą do innych faktów na ten temat.

Normalizacja ma związek z dokładnością i wydajnością faktów przedstawianych w tabelach, a także ze zdolnością projektu tabeli do zapobiegania dwuznacznym i zbędnym wzorcom danych.

Dlatego konieczne jest zrozumienie faktów ... co wykracza poza zakres zautomatyzowanych narzędzi.

Q: Is a table with { student, subject, instructor } in 3NF?
A: What are students, subjects and instructors?

W świecie, w którym wszyscy instruktorzy uczyli wszystkich przedmiotów, a każdy uczeń mógł wziąć dowolną kombinację, ale nie więcej niż jeden kurs z każdego przedmiotu od każdego instruktora, rzeczywiście można powiedzieć, że ta tabela jest w 3NF. W prawdziwym świecie twierdzenie, że 3NF dla tej tabeli jest absurdalne.

Aby zrozumieć, że nie ma tego w 3NF, konieczne jest zrozumienie charakteru faktów, które reprezentuje. W naszej rzeczywistości ta tabela nie będzie 3NF, ponieważ (między innymi) przedmiot i instruktor są ze sobą powiązani w sposób, który nie ma nic wspólnego z uczniem. Jeśli mamy kursy, w których instruktorzy uczą przedmiotów przechowywanych gdzie indziej w naszej bazie danych, dlaczego mielibyśmy kopiować obie wartości tutaj zamiast klucza obcego z drugiej tabeli wskazującej, że uczeń został zapisany na kurs? Jeśli instruktor zostanie zastąpiony, musimy zmienić wiele rekordów w wielu miejscach.

Im bardziej znormalizowana jest baza danych, tym bardziej jest ona wewnętrznie spójna ze światem rzeczywistym i samym sobą, a tym trudniejsze jest, aby fakty bazy danych były nieumyślnie nieprawdziwe. Projektowanie baz danych jest sztuką, ale z całą pewnością jest również nauką.

Mimo że nie widzę wszystkiego, co pisze, polecam książkę Chrisa Datea, Database Design and Relational Theory: Normal Forms and All That Jazz, która zawiera dręczące szczegóły na temat teorii leżącej u podstaw modelu relacyjnego.

Michael - sqlbot
źródło
2
Dziękuję za tę szczegółową odpowiedź. Jednak zgodnie z twoim przykładem narzędzie analizujące przykładowe dane powinno wykryć, że wartości „instruktora” są często powtarzane, a także pojawiają się w innej tabeli, co sugeruje, że może to być kandydat na klucz obcy lub dowolną inną zmianę, która sprawiłoby, że ten stół byłby zgodny z 3nf, czy coś mi brakuje?
ack__
2
To prawda, ale kluczowym słowem jest nadal „sugeruj”. Narzędzie może sugerować zmiany strukturalne poprzez szukanie pozornej redundancji, ale nadal utrzymywałbym, że prawdziwa redundancja i przypadkowy wygląd korelacji byłyby trudne dla takiego narzędzia do rozróżnienia. Wymagana jest znajomość rzeczywistego charakteru danych.
Michael - sqlbot
@ack__: być w 3. normalnej formie, czy nie, jest własnością relacji innej niż para lub zestaw relacji. Nie widzę więc, aby ustanowienie relacji klucza obcego miało coś wspólnego z trzecią normalną formą.
miracle173
Myślę, że większym problemem jest to, że określenie zależności między kolumnami jest problematyczne szczególnie. jeśli wartości mogą być takie same, a jednak reprezentują różne byty (tj. gdzie zaangażowane są klucze złożone). Rozważmy tabelę: (adres_tekstowy, miasto, województwo, kod pocztowy, kraj). Teraz to nie jest znormalizowane. (miasto, prowincja_stanu) -> (kraj). Aby więc w pełni się znormalizować, musimy podzielić to na co najmniej trzy tabele, może cztery (obsługa kodu pocztowego!), Ale złożone klucze sprawiają, że jest to problematyczne w wykrywaniu w locie. Również komp. klucze są kluczem do idei nf, więc nie ignorujcie ich!
Chris Travers
Czy ktoś mógłby wyjaśnić, dlaczego „W świecie, w którym uczeń może odbyć kurs tylko z jednego przedmiotu, a wszyscy instruktorzy uczyli wszystkich przedmiotów, ten stół rzeczywiście można powiedzieć, że jest w 3NF”. To wydaje się potwierdzać, że Uczniowie -> przedmiot i nic więcej. Rozumiem, że kluczem do tego stołu byłby (uczniowie, instruktor), czy to nie złamałoby 3NF? W czym pomaga każdy nauczyciel nauczający każdego przedmiotu?
Drew Verlee,
5

Jednym z celów stosowania metod formalnych w rozwijaniu teorii relacji było opracowanie procedur, które można zautomatyzować. Jestem prawie pewien, że CJ Date wychodzi od razu i mówi to w swoim Wprowadzenie do systemów baz danych .

Kilka narzędzi CASE wydanych pod koniec lat 80. lub na początku lat 90. XX wieku mogło uzyskać każdy możliwy schemat 5NF albo poprzez analizę diagramów ER lub przez statystyczną analizę przykładowych danych.

Visio Enterprise Architect (myślę) to stosunkowo nowe narzędzie zgodne z tymi założeniami.

Mike Sherrill „Cat Recall”
źródło
Miły. Rzeczywiście szukałem obu sposobów analizy schematu (diagram ER i analiza danych przykładowych). Czy znasz jakieś inne najnowsze oprogramowanie niż Visio? Nie mam (jeszcze) licencji na to.
ack__
1
Ale twoje diagramy ER są zasadniczo diagramami modelowymi. To nie do końca to samo, co pobranie istniejącej bazy danych i ustalenie, czy jest z niej znormalizowana.
Chris Travers,
2
Analiza tabel z przykładowymi danymi i sugestiami dotyczącymi normalizacji była cechą Access i we wczesnych wersjach, jeśli dobrze pamiętam.
ypercubeᵀᴹ
@Chris: tak, odnosiłem się do diagramów ER wyłącznie w celu analizy semantycznej.
ack__
@ypercube: Dzięki za wskazówkę, przyjrzę się Access.
ack__
2

Myślę, że gdybyś mógł napisać narzędzie do zrobienia tego, nadal by to działało ręcznie. normalne formularze są definiowane na podstawie zależności funkcjonalnych i nie można ich ustalić na podstawie samej kontroli danych. Innymi słowy, jest to kwestia logiki raczej indukcyjnej niż dedukcyjnej w celu ustalenia, czy istnieje zależność funkcjonalna.

Chris Travers
źródło
Rzeczywiście będzie trochę ręcznego przeglądu, nie oczekuję, że narzędzie zrobi to w pełni automatycznie. Ale jestem pewien, że większość pracy można zautomatyzować, analizując istniejące dane w bazie danych (przynajmniej jej próbki) i / lub nazwę / typ pola.
ack__
1
W jaki sposób? Normalizacja jest definiowana na podstawie zależności łączenia i zależności funkcjonalnych. Zależność funkcjonalną można w zasadzie łatwo zdefiniować jako: dla każdej możliwej wartości superklucza istnieje dokładnie jedna wartość w zależności funkcjonalnej. Nie możesz się tam dostać, automatyzując przegląd danych, ponieważ tylko dlatego, że masz w swoim obecnym zestawie coś, co wydaje się zależnością funkcjonalną, nie oznacza to, że nowy klucz będzie zgodny. To bardzo przypomina starą korelację vs podział przyczynowy. Nie można indukować zależności funkcjonalnej, obserwując zawartość bazy danych.
Chris Travers
2
przynajmniej narzędzie może sugerować, że może istnieć relacja. jeżeli jakość i wielkość próbki danych jest wystarczająco duża, dokładność takiego odgadnięcia będzie wystarczająco wysoka do celów praktycznych.
miracle173
Może. Ale weźmy prawdziwy przykład, który jest dość piekielny pod względem projektowania relacji: adresy. Jak należy znormalizować adresy mailowe? Ile stolików należy zasugerować? W moim rozumieniu 3NF potrzebujesz tabel dla krajów, stanów / prowincji i miast. Nie wiem, czy awarie kodów pocztowych / miast mają sens, ale prawdopodobnie tak. Ale w jaki sposób analizujesz istniejące dane i określasz, że (miasto, państwo) -> kraj? Jak ustalić, czy kody pocztowe odnoszą się globalnie do tych konstrukcji?
Chris Travers