Jump to content
propositionjoe

Relações de chaves estrangeiras en SGBD - SQLServer

Recommended Posts

propositionjoe

Viva,

Tenho um modelo de dados desenvolvido, e como tal existem as ligações entre as tabelas através de chaves estrangeiras certo ?

Estas ligações são apenas conceptuais e a nível de desenho, ou é importante que estejam ligadas como chave estrangeira também no SQLserver ? Pois não relacionando os campos nas tabelas do SQLServer, tudo funciona na mesma. Qual a importância ?

Share this post


Link to post
Share on other sites
Rechousa

Olá,

As chaves estrangeiras fazem parte da normalização de uma base de dados. A sua utilização é essencial e elas devem ser criadas pois garantem integridade de dados.

Imagina:

Tens uma bd de Automóveis. Tens uma tabela de Marcas, com 30 marcas:

idMarca | Marca

1 | Audi

2 | Fiat

....

30 | Volkswagen

E uma tabela de Modelos (que contêm uma relação entre a marca e o modelo):

idModelo | Modelo | Marca

1 | A3 | 1

2 | A4 | 1

3 | A5 | 1

4 | A6 | 1

5 | 127 | 2

6 | 500 | 2

7 | Uno | 2

8 | Punto | 2

Ao usares uma chave estrangeira entre Modelos e Marcas estás a garantir que os valores que colocas em idMarca da Tabela modelos existem na tabela Marcas. Ao tentares eliminar o registo da Audi na Marcas ou dá erro ou elimina os modelos associados (CASCADE DELETE).

Se, por sua vez não usares chaves estrangeiras entre Modelos e Marcas, nada te garante chegares à tabela de Modelos e mudares os valores dos campos idMarca, exemplo:

UPDATE idModelos SET idMarca = idMarca + 30;

Com as chaves estrangeiras, não seria possível, iria dar erro ou actualizava os valores do campo idMarca na tabela Modelos (CASCADE UPDATE). Sem chaves estrangeiras, não dava erro, mas os dados deixariam de ficar íntegros.

Espero ter ajudado,

Edited by Rechousa
  • Vote 1

Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Share this post


Link to post
Share on other sites
propositionjoe

Muito obrigado caro Rechousa. Consegui perceber.

Além de manter essa integridade tem mais alguma função ?

Share this post


Link to post
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

×
×
  • 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.