Hoje li sobre o algoritmo de decomposição 3NF. Dizia:
- Encontre uma base mínima de F, digamos G
- Para cada FD X → A em G, use {X, A} como o esquema de uma das relações na decomposição
- Se nenhum dos conjuntos de relações da Etapa 2 for uma superchave para R, adicione outra relação cujo esquema seja uma chave para R
Quero decompor essa relação em 3NF.
R(A,B,C) S={A→B, A→C, B→A, B→C, C→A, C→ B, AB→ C, BC→A, AC→B, A→BC, B→AC, C→AB}
Como podemos ver, a chave de R é: {A},{B},{C}
S tem várias bases mínimas, como:
-
{A→B, B→A, B→C, C→B}
; e -
{A→B, B→C, C→A}
O problema é que, se usarmos a 1ª base mínima, decomporemos R em 2 relações : (A, B), (B, C).
Se usarmos a 2ª base mínima, R se transforma em: (A, B), (B, C), (C, A).
Minha pergunta é: qual é a correta?
Resposta
Em primeiro lugar, observe que o a relação original já está na Terceira Forma Normal, pois cada atributo é primo (cada atributo é uma chave, na verdade), de forma que a definição de 3NF é respeitada.
Então, observe que o algoritmo está incompleto. As etapas são:
- Encontre uma base mínima de F, digamos G
- Para cada grupo de FD com o mesmo parte esquerda, X → A 1 , X → A 2 , …, X → A n em G, use {X, A 1 , A 2 , …, A n } como o esquema de uma das relações na decomposição
- Exclua todas as relações cujos atributos estão contidos em outra relação.
- Se nenhum dos conjuntos de relações da Etapa 2 for uma superchave para R, adicione outra relação cujo esquema seja uma chave para R.
Portanto, no primeiro caso, você obtém três grupos de dependências:
A → B B → A B → C C → B
que produzem três relações, R 1 (A, B), R 2 (A, B, C), R 3 (B, C) e, seguindo o algoritmo, você obtém o resultado apenas R 2 , uma vez que os outros dois têm atributos neles.
Então você tem duas saídas diferentes do algoritmo, dependendo da base mínima usada (que por sua vez depende de a ordem em que você considera as dependências ao calcular a cobertura mínima).
Portanto, a resposta à sua pergunta:
qual um está correto?
é: ambos estão corretos , já que ambos satisfazem a definição da 3NF. Você simplesmente descobriu que o algoritmo de síntese para decompor uma relação em 3NF pode produzir soluções diferentes.
Uma outra questão é: qual é “melhor” e, claro, a solução com uma única relação é “melhor” , já que você não precisa juntar tabelas ao fazer consultas.
Claro, se alguém pudesse verificar no início se a relação já está em 3NF, então ele pode evitar a aplicação do algoritmo. Mas isso em geral não pode ser feito, uma vez que a verificação requer o cálculo exponencial de todas as chaves, para encontrar os atributos principais da relação.
A First Course in Database System - 3rd edition
. Qual devo seguir agora?