Você está na página 1de 4

Todos estes algoritmos so baseados numa relao R(T, F), onde T so os atributos da relao e F so as dependncias funcionais dessa relao.

Nota: Deve ter em conta que antes de aplicar qualquer dos algoritmos a seguir, tem que conhecer qual a chave da relao. IMPORTANTE: Uma relao esta em terceira forma normal (3FN) se e s se para cada dependncia funcional X Y, do conjunto de dependncias funcionais F, se cumpre que X chave ou Y primo. Um atributo, ou conjunto de atributos, primo si um subconjunto de alguma chave.

Algoritmo de decomposio 3FN 1. D uma dependncia funcional, X Y, onde X e Y so disjuntos e X Y viola as condies para 3NF, ou seja, X no e chave e Y no primo. 2. Obter (S1 = P (XY) (R)) e (S2 = P (U-Y) (R)). Como mencionado acima, X Y no viola 3FN e condies de S1, porque X chave em S1. 3. Se S1 ou S2 no esta em 3FN, descompor mais uma vez, etc. Exemplo: Temos uma relao R(T, F), onde T = {A,B,C,D,E,G} e F ={ABC, CA, BCD, ACDB, DEG, BEC, CGBD, CEAG} Isto : R(A,B,C,D,E,G) F={ABC, CA, BCD, ACDB, DEG, BEC, CGBD, CEAG} Normalizar a 3FN. Primeiro temos que calcular uma chave da relao. (AB)+=ABCDEG, chave D+=DEG C+=CA (BE)+=BECDAG, chave (BC)+=BCADEG, chave (CG)+=CGBDEA, chave (ACD)+=ACDBEG, chave (CE)+=CEAGBD, chave Obtemos chaves candidatas: AB, BC, ACD, BE, CG, CE. Temos que escolher uma de elas para chave da relao. Escolhemos AB como chave da relao. Agora h que verificar quais so aquelas dependncias funcionais que no esta a cumprir a condio de 3FN. Condies de 3FN Condies de 3FN X Y X Y
Antecedente no chave, consequente no primo (EG no e subconjunto de nenhuma chave candidata). Temos problemas nesta dependncia funcional. Antecedente no chave, consequente primo

AB

Antecedente chave

EG

Antecedente no chave, consequente

BE

primo Antecedente no chave, consequente no primo (BD no e subconjunto de nenhuma chave candidata). Temos problemas nesta dependncia funcional. Antecedente no chave, consequente no primo (AG no e subconjunto de nenhuma chave candidata). Temos problemas nesta dependncia funcional.

BC

Antecedente no chave, consequente primo

CG

BD

ACD

Antecedente no chave, consequente primo

CE

AG

Ento podemos descompor por qualquer destas 3 dependncias funcionais: DEG, CGBD e CEAG. Vamos descompor por a dependncia funcional DEG Sendo assim, temos: R1(D,E,G) F1={DEG} A dependncia funcional DEG no pode estar no conjunto F2, porque ela foi escolhida para fazer a decomposio. Tambm no podem estar em F2 aquelas dependncias funcionais que tenham atributos que no existem em R2 R2(A,B,C,D) F2={ABC, CA, BCD, ACDB, DEG, BEC, CGBD, CEAG} Ento no R2 e F2 temos: R2(A,B,C,D) F2={ABC, CA, BCD, ACDB} Esta primeira decomposio fica assim: R1(D,E,G) F1={DEG} R2(A,B,C,D) F2={ABC, CA, BCD, ACDB} Temos que analisar se as duas relaes (R1 e R2) cumprem as condies para 3FN R1(D,E,G) F1={DEG} a chave D e antecedente chave, logo cumpre as condies de 3FN R2(A,B,C,D) F2={ABC, CA, BCD, ACDB} tem muitas chaves candidatas e so: (AB)+=ABCD (BC)+=BCDA (ACD)+=ACDB Escolhemos ACD como a chave da relao. Sendo assim, temos que verificar as condies de 3FN na relao. X AB C BC ACD

Y C A D B

Condies de 3FN
Antecedente no chave, consequente primo Antecedente no chave, consequente primo Antecedente no chave, consequente primo Antecedente chave

Ento a relao R2 esta a cumprir as condies da 3FN. O resultado do algoritmo as relaes R1 e R2. NOTA IMPORTANTE: Se no pao anterior escolhemos como chave uma outra que no

ACD, o resultado muda. Vamos a ver isto. R2(A,B,C,D) F2={ABC, CA, BCD, ACDB} R2(A,B,C,D) F2={ABC, CA, BCD, ACDB} tem muitas chaves candidatas e so: (AB)+=ABCD (BC)+=BCDA (ACD)+=ACDB Escolhemos AB como a chave da relao. Sendo assim, temos que verificar as condies de 3FN na relao. X AB C BC ACD

Y C A D B

Condies de 3FN
Antecedente chave Antecedente no chave, consequente primo Antecedente no chave, consequente no primo Antecedente no chave, consequente primo

Ento a relao R2 esta no a cumprir as condies da 3FN. Temos que descompor R2. R3(B,C,D) F3={BCD} A dependncia funcional BCD no pode estar no conjunto F4, porque ela foi escolhida para fazer a decomposio. Tambm no podem estar em F4 aquelas dependncias funcionais que tenham atributos que no existem em R4 Esta decomposio fica assim: R4(A,B,C) F4={ABC, CA, BCD, ACDB} Ento no R4 e F4 temos: R4(A,B,C) F4={ABC, CA} Temos que analisar se as duas relaes (R3 e R4) cumprem as condies para 3FN R3(B,C,D) F3={BCD} a chave BC e antecedente chave, logo cumpre as condies de 3FN R4(A,B,C) F4={ABC, CA} a chave AB. Temos que verificar se cumpre as condies de 3FN. Condies de 3FN X Y Antecedente chave AB C Antecedente no chave, consequente primo C A Ento R4 cumpre as condies de 3FN. O resultado do algoritmo as relaes R1, R3 e R4. Algoritmo de decomposio 3FN e conserva dependncias funcionais Seja R um esquema de relao e F seu conjunto de dependncias funcionais: 1. Encontrar uma cobertura mnima G para F 2. Para X na parte esquerda de cada dependncia funcional que aparece no G a. Criar um esquema relacional {X Unio A1 Unio A2 ... Unio AN} em D, onde X A1, A2 X, ..., X An so as nicas dependncias em G com X como sua esquerda

3. Todos os atributos que no esto localizados em nenhum esquema de D, tem que se colocar num esquema adicional Nota: D representa a decomposio resultante. Exemplo: Temos uma relao R(T, F), onde T = {A,B,C,D,E,G} e F ={ABC, CA, BCD, ACDB, DEG, BEC, CGBD, CEAG} Isto : R(A,B,C,D,E,G) F={ABC, CA, BCD, ACDB, DEG, BEC, CGBD, CEAG} Normalizar a 3FN e conservar dependncias funcionais

IMPORTANTE: Uma relao esta em Boyce Codd forma normal (BCFN ou FNBC) se e s se para cada dependncia funcional X Y, do conjunto de dependncias funcionais F, se cumpre que X chave. Algoritmo de decomposio BCNF 1. D uma dependncia funcional X Y, que pertence ao conjunto de dependncias funcionais F, e que X no chave e X e Y so disjuntos. 2. Obter as projeces de R em S1= XY e S2 = T-Y, onde T o conjunto de atributos de R. Obter as dependncias funcionais para S1 e S2, e assim por diante at que todos estejam na BCNF.