La normalizzazione richiede la conoscenza delle dipendenze funzionali (FD) e delle dipendenze di join (FD). Non li hai dati tu.
La tua applicazione Possiamo dirti le FD e le JD solo se sappiamo esattamente qual è "la relazione che volevo esprimere" (cioè il predicato) per ogni tabella (cioè al punto in cui potremmo guardare una situazione e sapere per ogni riga possibile se fa una vera proposizione dal predicato e quindi appartiene alla tabella) ed esattamente quali possibili situazioni possono sorgere (tramite "regole aziendali" su possibili situazioni applicative, equivalenti a vincoli sui possibili stati del database).
Le tue "chiavi" Non hai dato FD. Hai appena fornito una chiave candidata (CK) e una "chiave univoca". Ma non puoi determinare alcuni o tutti i CK senza sapere alcune cose sui FD. Quindi quando dai CK è come dire che ci sono e non ci sono certi FD. Devi dirci cosa ci hai dato quando fornisci alcuni set di colonne etichettati PK o "chiave univoca":una "chiave univoca" è un CK (che non contiene un sottoinsieme univoco più piccolo) o solo una superchiave (unica)? Hai dato tutti i CK o potrebbero essercene altri? Potrebbero esserci altre superchiavi oltre ai superset di quelli indicati? È molto utile se ci dici esattamente quali FD sai tenere (tramite una copertura minima) e quali sai non tenere.
Indovina
Non ho idea di cosa is_calculated
è per.
Forse una determinata date
e meal
la coppia ha esattamente un content
?
TL;DR Hai davvero bisogno di controllare ogni possibile insieme di colonne per vedere se determina funzionalmente l'un l'altra colonna. Vale a dire se per ogni stato del database appare un subrow di valori per l'insieme di colonne con un solo valore per la colonna. Possiamo solo indovinare senza una chiara comprensione dei tuoi predicati e della tua applicazione. È possibile ridurre il lavoro in base a quanto segue:Se un insieme di colonne è unico, i suoi superset determinano tutte le altre colonne. Se un insieme di colonne è minimamente unico (è un CK), nessuno dei suoi sottoinsiemi più piccoli determina tutte le altre colonne. Puoi cercare controesempi per FD presunti, in cui due righe possono avere lo stesso subrow di valori per un determinante presunto ma avere valori diversi per un attributo determinato presunto. Gli assiomi di Armstrong generano tutti gli FD impliciti in quelli dati.
JD La normalizzazione a 4NF e 5NF comporta la suddivisione della tabella in più tabelle per eliminare i JD che non sono impliciti nei CK. Il predicato di una tabella può essere espresso come AND di altri esattamente quando un JD vale corrispondente agli insiemi di colonne dei predicati. Una relazione è in 5NF quando ogni congiunto in ogni JD si sovrappone a qualcun altro su almeno un CK. (Algoritmo di appartenenza di Fagin.)
PS Se ti interessano i vincoli, ne hai perso uno quando sei passato da un tavolo a due?