• Nenhum resultado encontrado

Dependências Funcionais

No documento Dados INTRODUÇÃO A BANCO DADOS (páginas 71-76)

Um conceito simples, porém, muito importante em projetos de esquemas relacionais é o de dependência funcional. Nesta seção será definido formalmente este conceito, e na seção 9.2.2 será verificado como trabalhar com esquemas de relações em formas normais.

9.2.1 Definição de Dependência Funcional

Dependências Funcionais são restrições ao conjunto de relações válidas. Elas permitem expressar determinados fatos em banco de dados relativos ao empreendimento que se deseja modelar. Anteriormente foi definido o conceito de superchave. Seja R o esquema de uma relação. Um subconjunto K de R é uma superchave de R em qualquer relação válida r(R) para todos os pares t1 e t2 de tuplas em r tal que t1≠ t2, então t1[K]≠ t2[K]. Isto é, nenhum par de

tuplas em qualquer relação válida r(R) deve ter o mesmo valor no conjunto de atributos K. A noção de dependência funcional generaliza a noção de superchave. Seja α⊆ R e β⊆ R. A dependência funcional :

α→β

realiza-se em R se, em qualquer relação válida r(R), para todos os pares de tuplas t1 e t2 em

Usando a notação de dependência funcional, dizemos que K é uma superchave de R se K → R. Isto é, K é uma superchave se, para todo t1[K] = t2[K], t1[R] = t2[R] (isto é t1 = t2). A

dependência funcional permite expressar restrições que as superchaves não expressam. Considere o esquema:

Esquema_info_empréstimo = (nome_agência, número_empréstimo, nome_cliente, total) O conjunto de dependências funcional que queremos garantir para esse esquema de relação é:

número_empréstimo→total

número_empréstimo→nome_agência Entretanto, não se espera realizar dependência funcional para:

número_empréstimo→nome_cliente

já que, em geral, um empréstimo pode ser contraído por mais de um cliente (por exemplo para ambos os membros de um casal, marido-mulher).

Podemos usar dependência funcional de dois modos:

1. Usando-as para o estabelecimento de restrições sobre um conjunto de relações válidas. Deve-se assim, concentrá-las somente àquelas que devem satisfazer um dado conjunto de dependências funcionais. Se desejasse restringi-las a relações do esquema em R que satisfaçam o conjunto F de dependências funcionais, diz-se que F realiza-se em R.

2. Usando-as para verificações de relações, de modo a saber se as últimas são válidas sob um conjunto de dependências funcionais. Se uma relação r é legal sobre um conjunto F de dependências funcionais, diz-se que r satisfaz F.

Considera-se a relação r mostrada abaixo para verificar quais dependências funcionais são satisfeitas. Observa-se que A C é satisfeita. Duas tuplas têm valor a1 em A. Essas tuplas têm o mesmo valor de C – denominado c1. De modo similar, duas tuplas com valor a2 em A têm o mesmo valor c2 em C. Não existe outro par de tuplas distintas que tenha, em A, os mesmos valores. A dependência funcional C A, entretanto não é satisfeita. Para confirmar esta afirmação, considere as tuplas t1 = (a2, b2, c2, d3) e t2 = (a3, b3, c2, d4). Essas tuplas têm os

mesmos valores c2 em C, mas elas possuem valores diferentes em A, a2 e a3, respectivamente.

Assim, encontra-se um par de tuplas t1 et2 tal que t1 [C] = t2 [C], mas t1 [A] ≠ t2 [A].

Figura 9.6 - Relação r de exemplo

Uma dependência funcional é uma restrição entre dois conjuntos de atributos da base de dados. Considere-se que o esquema da base de dados relacional tenha n atributos A1, A2, ..., An ; e que toda a base de dados seja descrita por um único esquema de relação universal R = { A1, A2, ..., An }. Isso não significa que isso de fato deverá acontecer; esta suposição é feita apenas para desenvolver uma teoria formal sobre dependência de dados.

Uma dependência funcional, denotada por XàY, entre dois conjuntos de atributos X e Y que são subconjuntos de R, especifica uma restrição sobre as possíveis tuplas que podem existir na relação instância r de R. A restrição estabelece que para quaisquer tuplas t1 e t2 em r, se

A B C D a1 b1 C1 d1 a1 b2 c1 d2 a2 b2 c2 d2 a2 b3 c2 d3 a3 b3 c2 d4

t1[X]= t2[X], então t1[Y]= t2[Y]. Isto significa que os valores da componente Y das tuplas em r dependem, ou são determinados pelos valores da componente X ou, alternativamente, os valores da componente X de uma tupla determinam de maneira única (ou funcionalmente) os valores da componente Y. Pode-se também dizer que existe uma dependência funcional de X para Y ou que Y é dependente funcionalmente de X. A abreviatura de dependência funcional é DF.

Note que:

• Se uma restrição sobre R estabelece que não pode existir mais que uma tupla com um dado valor de X, em quaisquer instâncias de relação r(R) - isto é, X é uma chave-candidata de R - isto implica que XàY para quaisquer subconjuntos de atributos Y de R.

• Se XàY em R, isto não significa que YàX em R.

Uma dependência funcional é uma propriedade do significado ou semântica dos atributos em um esquema de relação R. Utiliza-se o entendimento da semântica de atributos de R - isto é, como eles se relacionam - para especificar as dependências funcionais envolvidas em todas as instâncias da relação r (extensão) de R. As instâncias r que satisfazem as restrições de dependência funcional especificadas sobre atributos de R são chamadas extensões legais, pois obedecem as restrições de dependência funcional. Assim, a principal utilização das dependências funcionais é o de descrever um esquema de relação R especificando restrições sobre seus atributos que devem ser válidas todas às vezes.

Isto significa que uma dependência funcional é uma propriedade do esquema da relação (intenção) R e não de uma instância particular legal r (extensão) de R. Assim, uma DF não pode ser automaticamente inferida a partir de uma extensão de relação r, mas deve ser definida por alguém que conheça a semântica dos atributos de R. Por exemplo, na figura 9.7, uma instância particular de um esquema de relação ENSINO é mostrada. Embora num primeiro momento possa parecer que TEXTOàCURSO, não se pode afirmar isso a menos que se conheça que isso seja verdade para todas as instâncias da relação ENSINO.

PROFESSOR CURSO TEXTO Smith Estrutura de Dados Bartram Smith Gerenciamento de dados Al-Nour Hall Compiladores Hoffman Brown Estrutura de Dados Augenthaler

Figura 9.7

9.2.2 Formas Normais Determinados pelas Chaves Primárias

O processo de normalização foi proposto inicialmente por Codd em 1972. Esta é uma maneira mais formal de garantir as diretrizes descritas anteriormente.

9.2.2.1 Primeira Forma Normal (1FN)

A primeira forma normal é agora genericamente considerada como parte da definição formal de uma relação; historicamente foi definida para não permitir atributos multivalorados, compostos e suas combinações.

9.2.2.2 Segunda Forma Normal (2FN)

A segunda forma normal é baseada no conceito de dependência funcional total. Uma dependência funcional XàY é uma dependência funcional total se, na remoção de qualquer

atributo A de X significar que a dependência não mais existe; isto é, para todo atributo A

X, (X-{A}) -xàY. Por exemplo, na figura 9.8b, {NSS, PNÚMERO}àHORAS é uma dependência

funcional total (nem NSSàHORAS e nem PNÚMEROàHORAS são DF. Porém a dependência {NSS, PNÚMERO}àENOME é parcial pois NSSàENOME.

Um esquema de relação R está na 2FN se qualquer atributo não-primo A de R for totalmente dependente funcionalmente de qualquer chave de R. Atributo não-primo é qualquer atributo que não seja membro de uma chave-candidata. A relação EMP_PROJ da figura 9.8b está na 1FN mas não na 2FN. O atributo não-primo ENOME viola a 2FN devido à df2, o mesmo acontece com os atributos não-primos PNOME e PLOCALIZAÇÃO em df3. As dependências funcionais df2 e df3 indicam a dependência parcial da chave-primária {NSS, PNÚMERO}, violando assim a 2FN.

(a) EMP_DEPT

ENAME NSS DATANASC ENDEREÇO DNÚMERO DNOME NSSGER df1

(b) EMP_PROJ

NSS PNÚMERO HORAS ENAME PNOME PLOCALIZAÇÃO df1

df2 df3

Figura 9.8

Se uma relação não está na 2FN, ela pode ser normalizada em um número de relações na 2FN. As dependências funcionais df1, df2 e df3 indicadas na figura 9.9 podem ser consideradas para decompor a relação EMP_PROJ em 3 esquemas de relações EP1, EP2 e EP3, como mostra a figura 9.9a. Cada um desses esquemas de relação satisfaz a 2FN. Verifica-se que as relações EP1, EP2 e EP3 evitam as anomalias que estava sujeita a relação EMP_PROJ.

(a) EMP_PROJ

NSS PNÚMERO HORAS ENAME PNOME PLOCALIZAÇÃO df1

df2 df3

EP1 EP2 EP3

NSS PNÚMERO HORAS NSS ENAME PNÚMERO PNOME PLOCALIZAÇÃO df1 df2 df3

(b) EMP_DEPT

ENAME NSS DATANASC ENDEREÇO DNÚMERO DNOME NSSGER df1

ED1 ED2

ENAME NSS DATANASC ENDEREÇO DNÚMERO DNÚMERO DNOME NSSGER

Figura 9.9

9.2.2.3 Terceira Forma Normal (3FN)

A terceira forma normal é baseada no conceito de dependência transitiva. Uma dependência X→Y em uma relação R é uma dependência transitiva se existir um conjunto de atributos Z que não é um subconjunto de qualquer chave de R, e tanto X→Z quanto Z→Y. Por exemplo, a dependência NSS→NSSGER é uma dependência transitiva em EMP_DEPT da figura 9.9b. Diz-se que a dependência de NSSGER sobre o atributo chave NSS é transitiva via DNÚMERO. Intuitivamente, verifica-se que a dependência de NSSGER sobre DNÚMERO é indesejável uma EMP_DEPT desde que DNÚMERO não é chave de EMP_DEPT.

Um esquema de relação R está na 3FN se ele estiver na 2FN e nenhum atributo não-primo de R é dependente transitivamente de qualquer chave de R. A relação EMP_DEPT da figura 9.9b está na 2FN, pois não há dependência parcial de nenhum atributo não-primo sobre a chave. Porém, não está na 3FN, pois NSSGER e DNOME são dependentes transitivos de NSS via DNÚMERO. Pode-se normalizar EMP_DEPT decompondo-o em dois esquemas de relação na 3FN, ED1 e ED2, como mostra a figura 9.9b.

10 Referências Bibliográficas

[Codd00] E. F. Codd. A Relational Model of Data for Large Shared Data Banks. Revista CACM volume = 6,1970

[Date00] C. J. Date. Introdução a Sistema de Banco de Dados. Editora Campus, 2000

[SSK99] S. Sudarshan and A. Silberschatz and F. Henry Korth. Sistemas de Banco de Dados. Editora Makron Books, 1999.

[NE01] B. Shamkant Navathe and E. Ramez Elmasri. Fundamentals of DataBase Systems. Editora Addison Wesley Pub, 2001

[WU97] Jennifer Widow and Jeffrey Ullman .A First Course in Database Systems. Editora Prentice Hall, 1997

[Jackson99] M Jackson .Thirty years(and more) of databases .Revista Information and Software Technology, volume = "41", páginas =969-978, 1999.

No documento Dados INTRODUÇÃO A BANCO DADOS (páginas 71-76)

Documentos relacionados