Decomposição sem perda de informação

Projeção de dependências, BCNF, junção sem perda, chase e síntese em 3FN.

TLDR

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

Separar Venda em Produto e Item retira o nome repetido de cada compra. Precisamos agora de provar duas coisas.

Primeiro, que a junção recupera exatamente os tuplos originais. Segundo, que conseguimos verificar as regras nas novas tabelas. Ausência de perda, preservação de dependências e forma normal são propriedades distintas.

Projeções e reconstrução

Decompor R(A,B,C)R(A,B,C) em R1(A,B)R_1(A,B) e R2(B,C)R_2(B,C) divide os atributos. Cada nova instância é uma projeção de RR, com eliminação de duplicados na teoria relacional. Os esquemas, em conjunto, têm de conter todos os atributos originais.

Para reconstruir, fazemos a junção natural dos resultados. A decomposição é sem perda se, para toda a instância de RR que satisfaz as DFs, essa junção devolve exatamente RR. Não pode acrescentar tuplos espúrios nem retirar os originais.

Considera dois tuplos originais:

ABC
123
425

As projeções são (1,2),(4,2)(1,2),(4,2) em ABAB e (2,3),(2,5)(2,3),(2,5) em BCBC. Como os quatro pares partilham B=2B=2, a junção devolve quatro tuplos: os dois originais e (1,2,5),(4,2,3)(1,2,5),(4,2,3). A reconstrução fica assim:

ABCOrigem
123original
125espúrio
423espúrio
425original

As linhas espúrias misturam o A de um tuplo com o C do outro. Nenhum atributo desapareceu, mas perdeu-se a correspondência entre A e C.

Critério para duas relações

Para uma decomposição binária R→R1,R2R\to R_1,R_2, sob DFs, a junção é sem perda se e só se o conjunto comum determina um dos lados:

(R1∩R2)→R1ou(R1∩R2)→R2.(R_1\cap R_2)\to R_1 \quad\text{ou}\quad (R_1\cap R_2)\to R_2.

As dependências são avaliadas no fecho do conjunto original. Se decompomos ABCABC em ABAB e BCBC, o comum é BB. A condição é B→AB\to A ou B→CB\to C, omitindo os atributos triviais.

Se B→CB\to C, todas as linhas com o mesmo B têm o mesmo C. Uma linha de AB só pode juntar-se ao C que já tinha. Por isso a junção não inventa outra combinação.

No contraexemplo anterior, B=2B=2 tem dois valores de C e dois de A. Nenhuma das condições se verifica.

Quando a condição se verifica, a reconstrução é exata. Com B→CB\to C e os tuplos (1,2,3)(1,2,3) e (4,2,3)(4,2,3), as projeções são (1,2),(4,2)(1,2),(4,2) em AB e (2,3)(2,3) em BC. A junção devolve os dois originais e nenhum espúrio.

Não concluas que qualquer sequência de projeções é sem perda só porque “as tabelas têm uma coluna comum”. Uma coluna comum permite juntar; a dependência funcional é que justifica a reconstrução correta.

Projetar dependências

Ao estudar uma relação resultante, usamos todas as DFs implicadas que envolvem apenas os seus atributos. Não basta retirar da lista original as setas com atributos ausentes.

Com A→BA\to B e B→CB\to C, a projeção sobre ACAC inclui A→CA\to C, embora essa seta não estivesse escrita originalmente. Para a descobrir, calculamos A+A^+ no conjunto original e conservamos os atributos de AC que aparecem no fecho.

Uma forma sistemática é calcular fechos dos subconjuntos do novo esquema e obter as dependências internas. Em esquemas pequenos, é praticável à mão. Omite as triviais e as redundantes quando apresentares uma base da projeção.

Decompor até BCNF

Escolhe uma DF não trivial X→YX\to Y cujo determinante não seja superchave. Uma decomposição usual é:

R1=X∪Y,R2=R−(Y−X).R_1=X\cup Y,\qquad R_2=R-(Y-X).

A interseção contém X, que determina R1R_1, por isso este passo é sem perda. A variante que usa X+X^+ escolhe R1=X+R_1=X^+ e R2=X∪(R−X+)R_2=X\cup(R-X^+). Também é válida. Em ambos os casos, projeta as DFs e repete até todas as relações estarem em BCNF.

Vamos decompor R(A,B,C,D,E)R(A,B,C,D,E) com AB→CAB\to C, C→DC\to D e D→ED\to E. Já sabemos que a candidata é AB.

  1. D→ED\to E viola BCNF, porque D+=DED^+=DE. Separamos DEDE e ABCDABCD. O comum D determina DE, logo não há perda.
  2. Em ABCD, C→DC\to D viola BCNF. Separamos CD e ABC. O comum C determina CD.
  3. DE está em BCNF, com candidata D. CD também, com candidata C. Em ABC, AB determina C e é candidata; a relação está em BCNF.

O resultado é ABC,CD,DEABC,CD,DE. Cada passo é sem perda, logo a composição dos passos também o é.

A preservação verifica-se em separado. Cada DF original aparece projetada numa das relações: AB→CAB\to C em ABC, C→DC\to D em CD e D→ED\to E em DE. A preservação segue dessa localização das DFs, não da ausência de perda. São propriedades independentes, como mostra a secção seguinte.

Uma ordem diferente de escolhas pode produzir esquemas diferentes. Verifica propriedades dos esquemas obtidos, em vez de decorar uma única resposta textual.

Preservação de dependências

Uma decomposição preserva as dependências quando as DFs projetadas sobre as novas relações, tomadas em conjunto, implicam todas as DFs originais. Assim, podemos verificar as regras separadamente sem juntar tabelas.

Considere-se R(A,B,C)R(A,B,C) com AB→CAB\to C e C→BC\to B. A DF C→BC\to B viola BCNF. Decompomos em CBCB e ACAC.

A junção é sem perda: o atributo comum C determina CB. As duas relações estão em BCNF. Porém, não preservam AB→CAB\to C. Em CB só temos C→BC\to B; em AC não há DF não trivial. O fecho de AB sob as DFs locais continua AB, sem C.

O problema pode ser visto nos dados. CB contém (c1,b)(c_1,b) e (c2,b)(c_2,b); AC contém (a,c1)(a,c_1) e (a,c2)(a,c_2). Cada tabela respeita as suas DFs, mas a junção tem dois C distintos para o mesmo par (a,b)(a,b), violando AB→CAB\to C.

Síntese em 3FN

A síntese em 3FN consegue uma decomposição sem perda que preserva DFs, aceitando a exceção dos atributos primos.

  1. Obtém uma cobertura mínima com um atributo à direita.
  2. Para cada DF X→AX\to A, cria uma relação com X∪{A}X\cup\{A\}. Podes reunir DFs com o mesmo determinante numa relação.
  3. Retira relações cujo esquema esteja contido no de outra.
  4. Se nenhuma relação contiver uma chave candidata do esquema original, acrescenta uma relação com essa chave.

A última condição assegura a ligação necessária à reconstrução. Não basta criar uma relação para cada seta e esquecer atributos sem dependências.

Para R(A,B,C,D)R(A,B,C,D) com cobertura mínima A→BA\to B, B→CB\to C, A→DA\to D, obtemos ABD e BC. A candidata A já está em ABD. As relações estão em 3FN, a junção é sem perda pelo comum B que determina BC, e cada DF tem lugar numa das relações.

Para o exemplo AB→CAB\to C, C→BC\to B, a síntese cria ABC e CB. Como CB está contida em ABC, retiramo-la. Ficamos com ABC, que está em 3FN porque todos os atributos são primos. Conservamos a dependência que a decomposição BCNF tinha perdido.

Atributos ausentes das dependências

Em R(A,B,C,D,E)R(A,B,C,D,E) com AB→CAB\to C, C→BC\to B e A→DA\to D, a síntese começa por ABC, CB e AD. CB está contida em ABC e pode ser retirada. Mas E ainda não aparece em nenhum esquema: ABC e AD nem sequer cobrem todos os atributos de R.

As candidatas são ABE e ACE. A e E têm de estar em qualquer chave porque nenhuma DF os produz. Acrescentar B permite obter C e D; acrescentar C permite obter B e D. Nenhum atributo desses pares substitui A ou E.

Acrescentar ABE ou ACE resolve a cobertura e a exigência de incluir uma candidata. Acrescentar apenas AE recupera o atributo E, mas não garante ausência de perda: AE só liga E a A e não conserva a combinação desse E com B e C. Cobrir atributos e conter uma candidata são verificações distintas do último passo da síntese.

Chase para várias relações

O critério binário não testa diretamente uma decomposição arbitrária em três ou mais relações. O chase constrói um tableau e aplica as DFs para descobrir se a junção consegue recuperar um tuplo sem ambiguidades.

Cria uma coluna por atributo e uma linha por relação. Numa coluna A, escreve o símbolo distinguido aAa_A se a relação dessa linha contém A. Nas outras células, escreve símbolos próprios, como b1Cb_{1C}, que começam distintos de todos os restantes.

Para cada DF X→YX\to Y, procura linhas que concordem nas colunas X. Unifica os símbolos nas colunas Y, substituindo todas as ocorrências do símbolo. Se um dos símbolos for distinguido, conserva-o; se nenhum for, escolhe um e conserva a escolha. Repete até estabilizar. Se alguma linha ficar com símbolos distinguidos em todas as colunas, a decomposição é sem perda.

Exemplo: R(A,B,C)R(A,B,C), A→BA\to B, B→CB\to C, decomposta em AB, BC e AC.

RelaçãoABC
ABaAa_AaBa_Bb1Cb_{1C}
BCb2Ab_{2A}aBa_BaCa_C
ACaAa_Ab3Bb_{3B}aCa_C

As linhas AB e AC concordam em aAa_A. Por A→BA\to B, substituímos b3Bb_{3B} por aBa_B:

RelaçãoABC
ABaAa_AaBa_Bb1Cb_{1C}
BCb2Ab_{2A}aBa_BaCa_C
ACaAa_AaBa_BaCa_C

Agora as três linhas concordam em B. Por B→CB\to C, substituímos b1Cb_{1C} por aCa_C:

RelaçãoABC
ABaAa_AaBa_BaCa_C
BCb2Ab_{2A}aBa_BaCa_C
ACaAa_AaBa_BaCa_C

A linha AB ficou (aA,aB,aC)(a_A,a_B,a_C), provando junção sem perda.

O chase aplica igualdades de símbolos, não faz uma junção numérica de uma amostra. Se estabilizar sem linha totalmente distinguida, a decomposição tem perda para alguma instância que satisfaz as DFs dadas. Isto não afirma que todas as amostras geram tuplos espúrios; afirma que não há garantia para todas as instâncias válidas.

Exercícios

Coluna comum não chega

R(A,B,C) tem apenas A → B. A decomposição em AB e BC é sem perda? Dá uma justificação por dependências e um contraexemplo se falhar.

Pista
O atributo comum é B, não A.
Mais uma pista

Experimenta (1,2,3) e (4,2,5), que satisfazem A → B.

Solução

Não há garantia de junção sem perda. B+ é só B, não determina AB nem BC. Nos tuplos (1,2,3) e (4,2,5), a DF A → B é satisfeita, mas as projeções AB e BC juntam também (1,2,5) e (4,2,3). Estes são tuplos espúrios. A presença de B nos dois lados não conserva a correspondência original entre A e C.

Confere a tua resposta:

  • Usei o fecho do atributo comum.
  • Dei uma instância válida e dois tuplos espúrios.

Erros frequentes

Não testes a DF a partir de uma amostra que por acaso tem Bs distintos. A propriedade tem de valer para todas as instâncias válidas.

Voltar à explicação
Sem perda mas sem preservação

R(A,B,C), com AB → C e C → B, é decomposta em CB e AC. Verifica BCNF, junção sem perda e preservação das DFs.

Pista

C determina CB. Em AC, há alguma DF não trivial projetada?

Mais uma pista

Calcula AB+ usando apenas C → B, a DF local não trivial.

Solução

CB está em BCNF, com candidata C; AC está em BCNF, com candidata AC e sem DFs não triviais. A junção é sem perda porque a interseção C determina CB. Não preserva AB → C: sob as DFs locais, AB+ = AB. CB com (c1,b),(c2,b) e AC com (a,c1),(a,c2) respeitam as regras locais, mas a junção dá dois Cs para o mesmo AB. O original já estava em 3FN, por isso mantê-lo é uma alternativa se a preservação for necessária.

Confere a tua resposta:

  • Verifiquei BCNF nas duas relações.
  • Provei junção sem perda.
  • Demonstrei a dependência não preservada.

Erros frequentes

As três propriedades não são sinónimos. Sem perda refere-se à reconstrução de projeções válidas; preservação refere-se à suficiência das verificações locais.

Voltar à explicação
A síntese precisa de ligar os factos

R(A,B,C,D) tem apenas A → B e C → D. A síntese cria AB e CD. Está completa? Obtém uma decomposição em 3FN sem perda e que preserve as dependências.

Pista
Quais os atributos que não aparecem à direita?
Solução

A e C têm de pertencer a todas as chaves. AC determina B e D, e retirar A ou C deixa de determinar o esquema completo, por isso AC é candidata. AB e CD preservam as duas dependências, mas não contêm uma candidata original. Acrescenta AC, ficando AB, CD e AC. O passo da candidata completa a síntese sem perda. Podemos também ver a reconstrução em duas etapas: AC junta AB pelo A, que determina AB; o resultado ABC junta CD pelo C, que determina CD. Todas as relações estão em BCNF e, portanto, em 3FN.

Confere a tua resposta:

  • Encontrei AC como candidata.
  • Acrescentei AC à síntese AB e CD.
  • Justifiquei preservação e junção sem perda.

Erros frequentes

AB e CD não têm atributos comuns e a sua junção é um produto cartesiano, que pode inventar combinações de A e C. Preservar as setas não chega para conservar a correspondência original.

Voltar à explicação
O chase termina sem provar a reconstrução

R(A,B,C) tem apenas AB → C e é decomposta em AB, AC e BC. Aplica o chase. A decomposição é sem perda? Confere também a instância (1,1,2), (1,2,1), (2,1,1).

Pista

A DF só atua quando duas linhas concordam em A e B ao mesmo tempo.

Solução

As linhas iniciais são (aA,aB,b1C), (aA,b2B,aC) e (b3A,aB,aC). Nenhum par concorda simultaneamente em A e B. Não há unificações e nenhuma linha fica totalmente distinguida, logo a decomposição tem perda. Na instância dada, cada AB é diferente, por isso AB → C é satisfeita. Porém, as projeções contêm AB=(1,1), AC=(1,1) e BC=(1,1). A junção acrescenta (1,1,1). Ter conservado todos os pares não conservou o triplo.

Confere a tua resposta:

  • Construí três linhas com símbolos diferentes nas posições ausentes.
  • Observei que nenhuma DF pode unificar símbolos.
  • Dei um tuplo espúrio numa instância que satisfaz AB → C.

Erros frequentes

Não unifiques apenas porque duas linhas concordam em A, nem uses a DF ao contrário. Os símbolos das posições ausentes começam distintos.

Voltar à explicação
Decompor até BCNF por etapas

R(A,B,C,D,E) tem AB → C, C → D e D → E. Decompõe até BCNF, prova que cada passo é sem perda e verifica preservação das dependências.

Pista

Escolhe uma DF cujo fecho não contenha o esquema inteiro.

Solução

D+ = DE, por isso D → E viola BCNF. Separa DE e ABCD; o comum D determina DE. Em ABCD, onde E já saiu, C+ = CD, por isso C → D viola BCNF. Separa CD e ABC; o comum C determina CD. DE, CD e ABC estão em BCNF, com candidatas D, C e AB. Cada DF original vive numa relação, por isso a decomposição também preserva as dependências.

Confere a tua resposta:

  • Justifiquei cada DF escolhida com um fecho incompleto.
  • Provei cada passo sem perda pelo atributo comum.
  • Verifiquei BCNF e preservação no resultado.

Erros frequentes

Não concluas preservação a partir da ausência de perda. Localiza cada DF original nas relações finais.

Voltar à explicação
Recuperar um atributo não é conservar as suas combinações

R(A,B,C,D,E) está em 1FN e tem apenas AB → C, C → B e A → D. Uma síntese propõe ABC, CB e AD. Encontra todas as candidatas e retira esquemas contidos noutros. Compara acrescentar AE com acrescentar ABE ou ACE.

Para conferir AE, usa os tuplos (a,b1,c1,d,e1) e (a,b2,c2,d,e2), com b1≠b2, c1≠c2 e e1≠e2. Quais as propriedades garantidas por cada opção? Indica tuplos espúrios quando existirem.

Pista
E não aparece nas DFs, mas continua a ser atributo de R. O que liga cada E ao par B/C original?
Solução

A e E têm de estar em todas as candidatas. AE não obtém B nem C. ABE obtém C por AB → C e D por A → D; ACE obtém B por C → B e D por A → D. São mínimas e são as únicas candidatas. CB está contida em ABC, por isso ficamos com ABC e AD, ainda sem E.

Acrescentar AE cobre todos os atributos e conserva relações em 3FN. As DFs originais são verificáveis em ABC e AD. Porém, não garante junção sem perda: as projeções ABC e AD mantêm os dois pares B/C e AE contém (a,e1) e (a,e2). A junção acrescenta (a,b1,c1,d,e2) e (a,b2,c2,d,e1). A instância original satisfaz as três DFs, mas a ligação de E ao par perdeu-se.

Acrescentar ABE ou ACE inclui uma candidata e completa a síntese em 3FN, sem perda e com preservação. Em ABC, AB e AC são candidatas e B é primo, por isso C → B satisfaz 3FN. AD tem candidata A. ABE e ACE não têm DFs não triviais internas e estão em BCNF. A garantia final resulta do algoritmo completo, incluindo a relação da candidata.

Confere a tua resposta:

  • Encontrei ABE e ACE como únicas candidatas.
  • Distingui cobertura de atributos, forma normal e ausência de perda.
  • Mostrei tuplos espúrios com AE e completei a síntese com uma candidata.
Voltar à explicação

À tua maneira

Aparência

Modo de cor
Tema
Cor de destaque

Leitura

Fonte de leitura

Álgebra, lógica e uma ideia de cada vez.

Código

Fonte do código

Navegação

Cursor de leitura, sem edição. h, j, k, l movem; / pesquisa nesta página. v seleciona caracteres; V seleciona linhas; y copia. Tab permite destacar ou comentar. Espaço ou Enter abre blocos recolhíveis. Nos cartões, h, j, k, l mudam o foco.

CSS personalizado

Ativa uma sugestão ou guarda o teu CSS. Só muda este navegador.

Usa --page, --text e --accent para acompanhar o tema.

Seletores e recuperação

.site-header, .prose, .course-card, [data-reading-history], [data-playground] e .page-actions.

Abre a aparência com a tecla vírgula ou no rodapé. Se o CSS esconder os controlos, abre esta página sem CSS personalizado.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Copiar fórmula

A cópia automática não está disponível. Copia o LaTeX abaixo.

Pesquisar nesta página

Enter procura · n / N repetem · Esc cancela. Ctrl / Cmd K pesquisa todo o site.

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.