Jump to content

Formas Normais


MariaA
 Share

Recommended Posts

Bom dia.

A minha dúvida é a seguinte: tenho uma BD para guardar clientes, de entre os seus atributos ressaltam o estado civil, sexo e código postal.

Devo criar uma tabela para guardar cada um destes atributos, uma vez que se vão repetir várias vezes quando for a inserir os clientes?

Ou deverei colocar tudo na tabela de Cliente?

Estou a respeitar a 3FN se optar pela segunda solução?

Obrigado.

Link to comment
Share on other sites

Não sei se entendi bem a parte de dependência transitiva.

Acho que só o código postal é transitivo, pois a tabela Cliente tem uma chave estrangeira CodPostal, que é chave primária na tabela CodigoPostal, e esta tem ainda o atributo Localidade.

Se eu puser tudo na tabela Cliente acaba por haver muita redundância, do género:

atributos Cliente -> morada, nº, codPostal, localidade

Pois os atributos codPostal e localidade vão aparecer repetidos em muitos registos.

Daí achar bem também fazer uma tabela EstadoCivil e Sexo, para que não haja tanta informação repetida.

Estarei um bocado a baralhar tudo?

Link to comment
Share on other sites

Não é por haver repetição que uma relação deixa de estar na 3FN. É preciso haver uma dependência entre dois atributos.

Por exemplo, tens o código postal e a localidade. Tu sabes que a cada código postal está associada uma única localidade, ou seja, a localidade depende do código postal (ou dito ainda de outra forma, dado o código postal, consegues determinar de forma precisa a sua localidade).

Se a localidade depende de um atributo que não é a chave primária, então a relação não está na 3FN. Tens que retirar pelo menos a localidade da relação/tabela.

Na seguinte relação R1

R1: ID, morada, codpostal, localidade

tinhas então morada, codpostal, localidade a depender de ID, e tinhas também localidade a depender de codpostal. Tens uma dependência transitiva porque codpostal depende de ID, e localidade depende de codpostal (ID->codpostal->localidade). Se ainda não percebeste o que era a transitividade, esquece essa parte. Pensa só que localidade depende de um atributo que não é chave primária da relação.

Uma forma de normalizar será

R1: ID, morada, codpostal

R2: codpostal, localidade

pois o codpostal pode perfeitamente ser usado como chave primária de R2. E já ficas com a tua tabela na 3FN.

Como referiste, podes ainda ir mais longe e fazer

R1: ID, morada, cpid

R2: cpid, codpostal, localidade

mas isto é mais uma questão de optimização do que de normalização.

Quanto aos restantes casos, não há dependências transitivas, pelo que não precisas de os remover da tabela. Mas tal como no exemplo anterior podias ir para a 2ª opção em que crias um cpid que não era necessário, aqui também podes criar novas tabelas. Mas não vejo grande vantagem em fazê-lo, visto que podes usar tipos básicos para estes atributos.

Para terminar, repara que mesmo que cries novas tabelas não eliminas a repetição (passarás a ter repetições das keys associadas ao estado civil e sexo).

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.