Como decompor essa relação em relações 3NF?

Hoje li sobre o algoritmo de decomposição 3NF. Dizia:

  1. Encontre uma base mínima de F, digamos G
  2. Para cada FD X → A em G, use {X, A} como o esquema de uma das relações na decomposição
  3. 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:

  1. {A→B, B→A, B→C, C→B}; e
  2. {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:

  1. Encontre uma base mínima de F, digamos G
  2. 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
  3. Exclua todas as relações cujos atributos estão contidos em outra relação.
  4. 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.

Comentários

  • Obrigado pela sua resposta! Mas como você produziu 3 relações: R1 (A, B), R2 (A, B, C), R3 (B, C)? Achei que só tivesse R1 e R3. R2 é a relação original.
  • Para a segunda etapa do algoritmo correto, existem duas dependências com a mesma parte esquerda, B → A e B → C, então você deve colocar todos os atributos juntos e obter a relação (A, B, C). É apenas ditado pelo algoritmo.
  • Uau, eu não ' sabia sobre a segunda etapa. Peguei o algoritmo de um livro chamado A First Course in Database System - 3rd edition. Qual devo seguir agora?
  • Esse algoritmo não está completo. Todos os principais livros sobre bancos de dados têm o algoritmo que descrevi na resposta.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *