A normalização requer o conhecimento de dependências funcionais (FDs) e dependências de junção (FDs). Você não os deu.
Seu aplicativo Só podemos dizer os FDs e JDs se soubermos exatamente qual é "a relação que eu queria expressar" (ou seja, predicado) para cada tabela (ou seja, até o ponto em que possamos olhar para uma situação e saber para cada linha possível se ele faz uma proposição verdadeira a partir do predicado e, portanto, pertence à tabela) e exatamente quais situações possíveis podem surgir (via "regras de negócios" sobre possíveis situações de aplicação, equivalentes a restrições sobre possíveis estados do banco de dados).
Suas "chaves" Você não deu FDs. Você acabou de fornecer uma chave candidata (CK) e uma "chave exclusiva". Mas você não pode determinar alguns ou todos os CKs sem saber certas coisas sobre os FDs. Então, quando você dá CKs, é o mesmo que dizer que existem e não certos FDs. Você precisa nos dizer o que você nos deu quando você fornece alguns conjuntos de colunas rotulados como PK ou "chave única":Uma "chave única" é uma CK (não contendo nenhum subconjunto único menor) ou apenas uma superchave (única)? Você deu todos os CKs ou poderia haver outros? Poderia haver outras superchaves além dos superconjuntos dos dados? É mais útil se você nos disser exatamente quais FDs você sabe que possuem (através de uma cobertura mínima) e quais você sabe que não possuem.
Suposições
Não tenho ideia do que
is_calculated
é para.Talvez uma determinada
date
e meal
par tem exatamente um content
? TL;DR Você realmente precisa verificar cada conjunto possível de colunas para ver se ele determina funcionalmente cada outra coluna. Ou seja, se para cada estado do banco de dados uma sublinha de valores para o conjunto de colunas aparece apenas com um valor para a coluna. Só podemos adivinhar sem uma compreensão clara de seus predicados e sua aplicação. Você pode reduzir o trabalho da seguinte forma:Se um conjunto de colunas for exclusivo, seus superconjuntos determinarão todas as outras colunas. Se um conjunto de colunas for minimamente exclusivo (é um CK), nenhum de seus subconjuntos menores determinará todas as outras colunas. Você pode procurar contra-exemplos para FDs putativos, onde duas linhas podem ter a mesma sub-linha de valores para um determinante putativo, mas ter valores diferentes para um atributo determinado putativo. Os axiomas de Armstrong geram todos os FDs implicados por alguns dados.
JDs A normalização para 4NF e 5NF envolve dividir a tabela em várias tabelas para eliminar JDs que não estão implícitos em CKs. O predicado de uma tabela pode ser expresso como o AND de outras exatamente quando um JD contém correspondentes aos conjuntos de colunas dos predicados. Uma relação está na 5FN quando cada conjunto em cada JD se sobrepõe a algum outro em pelo menos um CK. (Algoritmo de associação de Fagin.)
PS Se você se preocupa com restrições, você perdeu uma quando passou de uma mesa para duas?