Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Existem práticas/diretrizes para criação de tabelas não normalizadas durante o processo de normalização?


TL;DR Você precisa seguir um algoritmo publicado para decompor em uma determinada forma normal.

PS Você não obteve Artista do CD original via normalização, pois introduziu uma nova coluna. Mas suponha que o artista da mesa tenha o significado óbvio. Por que você acha que "novamente não está na terceira forma normal, tanto quanto eu entendo"? Se artista -> ano no CD original, também aparece em Artista. Mas então {artist} é, com {artist_id}, um CK (candidate key) de Artist, e Artist está em 3NF (e 5NF).

Da versão original da sua pergunta mais a atual, você tem um CD de tabela base proposto com colunas cd_id, título, grupo e ano, contendo tuplas onde cd cd_id intitulado título foi feito pelo grupo grupo que se formou no ano ano . A coluna cd_id é única, portanto, é um CK. FD {grupo} -> ano também vale.

A normalização não introduz novos nomes de coluna. Ela substitui uma tabela base proposta por outras, cada uma com um subconjunto menor de suas colunas, que sempre se juntam ao que teria sido seu valor. A normalização até BCNF é baseada em FDs (dependências funcionais), que também determinam os CKs de uma tabela base. Portanto, sua pergunta não contém uma decomposição. Uma possível decomposição que lembra sua pergunta, que pode ou não ter propriedades específicas, seria para tabelas com conjuntos de colunas {cd_id, title, group} e {group, year}.

Outros FDs mantêm-se no original. Alguns se sustentam por causa do que são as colunas; alguns seguram por causa do CK; alguns se mantêm porque {grupo} -> ano se mantém; em geral, alguns são válidos porque todos os três são válidos. E talvez outros se mantenham por causa de quais tuplas devem entrar na relação e quais situações podem surgir. Você precisa decidir para cada possível FD se ele se mantém.

Claro, você pode ter sido dito que os únicos que se sustentam são os que têm de se sustentar nessas circunstâncias. Mas você não vai foi dito que o único FD que mantém é {group} -> ano, porque existem FDs triviais e todo superconjunto de um CK determina funcionalmente cada conjunto de colunas .

Uma definição de 3NF é que uma relação está em 2NF e nenhuma coluna não primo é transitivamente funcionalmente dependente de qualquer CK. (Observe que cada condição envolve outras definições.) Se você quiser usar isso para descobrir se sua relação está na 3FN, então você precisa descobrir o que todos os CKs são. Você pode fazer isso mais rápido por meio de um algoritmo apropriado, mas pode apenas ver quais conjuntos de colunas determinam funcionalmente cada coluna, mas não contêm um conjunto menor, pois esses são os CKs. Em seguida, verifique as duas condições na definição.

Se você deseja normalizar para 3NF, precisa seguir um algoritmo para decompor para 3NF. Você não explica qual processo você acha que deve seguir. Mas se você não estiver seguindo um algoritmo comprovado, quaisquer componentes que você escolher podem ou não sempre se juntar ao original e podem ou não estar em qualquer forma normal superior específica. Observe que exemplos de decomposições que você viu não são apresentações de algoritmos de decomposição .

As definições de NF (forma normal) dão condições que uma relação deve atender para estar nessa NF. Eles não dizem como decompor sem perdas (preservando FDs quando possível) para relações em NFs mais altas. As pessoas elaboraram algoritmos para produzir decomposições para NFs particulares. (E a decomposição em uma determinada NF geralmente não envolve a primeira decomposição em NFs mais baixas. Passar por NFs mais baixas pode realmente impedir que boas decomposições de NF mais altas do original sejam geradas quando você começa a decompor por uma NF mais alta.)

Você também pode não perceber que, quando alguns FDs são válidos, outros devem ser mantidos. O último pode ser determinado através dos axiomas de Armstrong do primeiro. Então, só porque você se decompôs para se livrar de um determinado FD cuja presença viola um determinado NF não significa que não havia um monte de outros que o violaram com os quais você não lidou. Eles podem estar presentes nos novos componentes. Ou eles podem não estar presentes de maneira problemática, de modo que você não os "preserva" quando poderia, levando a designs ruins.

Aprenda sobre algoritmos de NF específicos e, nesse caso, NFs e normalização em si, em um livro/curso/apresentação de faculdade/universidade. Muitos estão online.