1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Chaves primarias e estrangeiras - SQL

Discussão em 'Web Development' iniciada por The Dealer, 13 de Junho de 2009. (Respostas: 2; Visualizações: 1417)

  1. The Dealer

    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?
     
  2. AliFromCairo

    AliFromCairo Power Member

    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: 13 de Junho de 2009
  3. K0mA

    K0mA Power Member

    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
     

Partilhar esta Página