it-swarm-eu.dev

Existuje nějaký nástroj ke kontrole, zda je moje databáze normalizována na třetí normální formu?

Nedávno jsem se dozvěděl o normalizaci a pochopil jsem, jak je důležité při implementaci nového schématu.

Jak mohu zkontrolovat, zda má databáze kompatibilní s 2NF nebo 3NF?

Ruční kontrola je jistá možnost, ale zde hledám automatizovaný nástroj.

Nehledám nástroj point-and-click, více něco, co by zvýraznilo možné optimalizace, aby tabulka vyhovovala 3NF. Myslím, že by mohla použít statistiky založené na dobrých vzorových datech nebo sémantické analýze názvů sloupců.

20
ack__

Normalizace se absolutně používá v reálném světě ... a doufejme, že víte, že 3NF je jen třetí z ... co je teď, 8? Ale 3NF by měl být snadný cíl.

Nicméně ... rád bych řekl, že takový nástroj nemůže existovat.

Normalizace je technicky atributem každé tabulky. V rámci dané databáze mohou mít různé tabulky různé úrovně normalizace.

Každá tabulka představuje fakta ... fakta o případech určitého typu věci (osoba, účet, objednávka, zásilka, položka, místo), včetně někdy cizích klíčů, které vás vedou k jiným druhům faktů o této věci.

Normalizace má co do činění s tím, jak přesně a účinně jsou v tabulkách znázorněna fakta, stejně jako se schopností návrhu tabulky zabránit dvojznačným a nadbytečným vzorcům dat.

Je tedy třeba porozumět skutečným skutečnostem ... což je mimo rozsah automatizovaných nástrojů.

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

Ve světě, kde všichni lektoři učili všechny předměty a každý student mohl vzít jakoukoli kombinaci, ale ne více než jeden kurz na každý předmět od každého instruktora, by tato tabulka mohla být skutečně považována za 3NF. Ve skutečném světě je absurdní tvrzení 3NF pro tuto tabulku.

Abychom pochopili, že to není v 3NF, vyžaduje pochopení povahy skutečností, které představuje. V naší realitě tato tabulka nebude 3NF, protože (mimo jiné) jsou předmět a instruktor spojeny dohromady způsobem, který nemá nic společného se studentem. Pokud máme kurzy, kde instruktoři vyučují předměty uložené jinde v naší databázi, proč bychom zkopírovali obě hodnoty sem namísto cizího klíče z jiné tabulky, což naznačuje, že student byl zapsán do kurzu? Pokud je instruktor nahrazen, musíme změnit více záznamů na více místech.

Čím je databáze více normalizovaná, tím je vnitřně konzistentnější se skutečným světem a se sebou samým, a čím obtížnější je, aby fakta databáze byla neúmyslně nepravdivá. Návrh databáze je umění, ale rozhodně je to také věda.

Přestože nevidím všechno, co píše, z očí do očí, doporučil bych knihu Chrisa Date, Návrh databáze a teorie vztahů: Normální formy a vše, co jazzuje který jde do neznesitelného detailu o základní teorii relačního modelu.

24
Michael - sqlbot

Součástí používání formálních metod při vývoji relační teorie bylo vyvinout postupy, které by mohly být automatizovány. Jsem si docela jistý, že C.J. Date vyjde hned a říká, že v jeho Úvod do databázových systémů.

Několik nástrojů CASE uvolněných na konci 80. nebo začátkem 90. let mohlo odvodit každé možné schéma 5NF buď analýzou ER diagramů nebo statistickou analýzou vzorků.

Aplikace Visio Enterprise Architect (myslím) je v tomto směru relativně novým nástrojem.

Velmi pochybuji o tom, že stále potřebujete odpověď, ale v případě, že vám nebo někomu jinému může pomoci, zkuste tento nástroj vyzkoušet: http://uisacad5.uis.edu/cgi- bin/mcrem2/database_design_tool.cgi

Myslím, že pokud byste mohli napsat nástroj, jak to udělat, stále by to vyžadovalo ruční kontrolu, aby fungovalo. normální formy jsou definovány na základě funkčních závislostí a ty nelze určit pouhou kontrolou dat. Jinými slovy, je to spíše otázka induktivní než deduktivní logiky, aby se určilo, zda existuje funkční závislost.

2
Chris Travers