Chaves primarias e estrangeiras - SQL

The Dealer

Power Member
Supondo que tenho as seguintes tabelas:

Alunos(Numero,Nome) - chave primaria numero
Dados(Numero,Email) - chave primaria numero

e ao mesmo tempo:

Notas(ID_Notas,Numero, n1,n2,etc) - ID_Notas primary key auto increment unique
DadosNotas(Numero,ID_Notas) - este uso para relacionar a tabela dados com notas

Agora a minha dúvida é: eu nos query's tenho o necessário para relacionar umas com as outras (... Dados.Numero=Alunos.numero......Dados.Notas.numero=Dados.numero...). E estes "parecem" funcionar.

Por isso o que pergunto é, para que servem as Foreign Key (por exemplo na tabela DadosNotas os dois campos são chaves estrangeiras) e eu tenho isso definido no SQL, mas mesmo assim, não percebo qual a diferença. Se eu retirar essa atribuição, os query's deixam de funcionar?
 
As queries vão funcionar na mesma se retirares as foreign keys. O objectivo destas é garantir o que se denomina por integridade referencial, ou seja, assegurar que a coluna que tem a foreign key apenas contém dados que existem na tabela referenciada.

Por exemplo, ao inserires um determinado número na tabela DadosNotas, a foreign key garante que esse número tem obrigatoriamente de existir na tabela Alunos. Pela mesma linha de raciocínio, a outra foreign key (sobre o atributo ID_Notas) vai garantir que os id's inseridos têm necessariamente que existir na tabela Notas. A não utilização de foreign keys pode, portanto, levar a que a tua base de dados contenha dados inconsistentes, como por exemplo, uma referência a um número de aluno que não existe na tabela Alunos.

Espero que ajude.
 
Última edição:
A resposta que o AliFromCairo deu parece-me bastante bem, no entanto penso que vale a pena dizer que pelo que percebo DadosNotas(Numero,ID_Notas) resulta de uma relação muitos para muitos das tabelas notas e dados, pelo que só por si já são chaves estrangeiras tendo em conta que é uma chave de uma tabela que é primária de outra.

Na prática tudo isto serve para reforçar a integridade referencial

«Because the Database Management System enforces referential constraints, it must ensure data integrity if rows in a referenced table are to be deleted (or updated). If dependent rows in referencing tables still exist, those references have to be considered. SQL:2003 specifies 5 different referential actions that shall take place in such occurrences:

»
fonte: http://en.wikipedia.org/wiki/Foreign_key
 
Back
Topo