sql >> Databáze >  >> RDS >> Mysql

Potřebuje můj stůl více normalizace?

Normalizace vyžaduje znalost funkčních závislostí (FD) a spojitých závislostí (FD). Nedal jsi je.

Vaše aplikace FD a JD vám můžeme říct pouze tehdy, když přesně víme, co je to „vztah, který jsem chtěl vyjádřit“ (tj. predikát) pro každou tabulku (tj. do bodu, kdy bychom se mohli podívat na situaci a vědět pro každý možný řádek, zda vytváří pravdivý návrh z predikátu, a tak patří do tabulky) a přesně jaké možné situace mohou nastat (prostřednictvím "obchodních pravidel" o možných situacích aplikace, ekvivalentní omezením na možné stavy databáze).

Vaše "klíče" Nedal jsi FD. Právě jste dali jeden kandidátský klíč (CK) a „jedinečný klíč“. Ale nemůžete určit některé nebo všechny CK, aniž byste věděli určité věci o FD. Takže když dáte CK, je to stejné, jako byste řekli, že existují a nejsou jisté FD. Musíte nám sdělit, co jste nám dali, když dáváte některé sady sloupců označené PK nebo „unikátní klíč“:Je „jedinečný klíč“ CK (neobsahuje žádnou menší jedinečnou podmnožinu) nebo jen superklíč (unikátní)? Dali jste všechny CK nebo mohli být i další? Mohou existovat jiné superklíče než nadmnožiny daných? Nejužitečnější je, když nám přesně sdělíte, o kterých FD víte, že drží (přes minimální kryt) a o kterých víte, že ne.

Hádám
Nemám ponětí, co is_calculated je pro.
Možná dané date a meal pár má přesně jeden content ?

TL;DR Opravdu musíte zkontrolovat každou možnou sadu sloupců, abyste zjistili, zda funkčně určuje každý jiný sloupec. Tj. zda se pro každý stav databáze objeví podřádek hodnot pro sadu sloupců pouze s jednou hodnotou pro sloupec. Můžeme jen hádat bez jasného pochopení vašich predikátů a vaší aplikace. Práci můžete snížit následujícím způsobem:Pokud je sada sloupců jedinečná, pak její nadmnožiny určují všechny ostatní sloupce. Pokud je sada sloupců minimálně jedinečná (je CK), pak žádná z jejích menších podmnožin neurčuje všechny ostatní sloupce. Můžete hledat protipříklady k domnělým FD, kde dva řádky mohou mít stejný podřádek hodnot pro domnělý determinant, ale mají různé hodnoty pro domnělý určený atribut. Armstrongovy axiomy generují všechny FD implikované danými.

JD Normalizace na 4NF a 5NF zahrnuje rozdělení tabulky do více tabulek, aby se odstranily JD, které nejsou implikovány CK. Predikát tabulky může být vyjádřen jako AND ostatních přesně tehdy, když JD platí odpovídající množinám sloupců predikátů. Vztah je v 5NF, když každý konjunkce v každém JD překrývá nějaký jiný alespoň na CK. (Faginův algoritmus členství.)

PS Pokud vám záleží na omezeních, ztratili jste jedno, když jste přešli od jednoho stolu ke dvěma?



  1. ORACLE Prohledejte všechny tabulky řetězce pomocí sloupce BLOB

  2. příkaz mysql není synchronizován při provádění insert z celeru

  3. Postgres Funkce pro vložení více záznamů do dvou tabulek

  4. Django ORM porovná n-tice / lexikografické řazení