Como você já deve saber, os bancos de dados usam tabelas para organizar informações. (Se você não tiver uma familiaridade básica com conceitos de banco de dados, leia O que é um banco de dados?) Cada tabela consiste em um número de linhas, cada uma delas corresponde a um único registro de banco de dados. Então, como os bancos de dados mantêm todos esses registros retos? É através do uso de chaves.
Chaves Primárias
O primeiro tipo de chave que discutiremos é a chave primária. Cada tabela de banco de dados deve ter uma ou mais colunas designadas como chave primária. O valor dessa chave deve ser exclusivo para cada registro no banco de dados.
Por exemplo, suponha que tenhamos uma tabela chamada Funcionários que contém informações de pessoal para cada funcionário em nossa empresa. Precisamos selecionar uma chave primária apropriada que identifique exclusivamente cada funcionário. Seu primeiro pensamento pode ser usar o nome do funcionário. Isso não funcionaria muito bem porque é possível que você contratasse dois funcionários com o mesmo nome. Uma melhor escolha pode ser usar um número de identificação de funcionário exclusivo atribuído a cada funcionário quando ele é contratado. Algumas organizações optam por usar o Social Security Numbers (ou identificadores governamentais semelhantes) para essa tarefa, pois cada funcionário já tem um e é garantido que ele é único. No entanto, o uso de números de segurança social para este fim é altamente controverso devido a preocupações com a privacidade. (Se você trabalha para uma organização governamental, o uso de um Número de Seguro Social pode até ser ilegal sob a Lei de Privacidade de 1974.) Por esse motivo, a maioria das organizações mudou para o uso de identificadores exclusivos (ID do funcionário, ID do aluno, etc. .) que não compartilham essas preocupações com privacidade.
Depois de decidir sobre uma chave primária e configurar o banco de dados, o sistema de gerenciamento de banco de dados aplicará a exclusividade da chave. Se você tentar inserir um registro em uma tabela com uma chave primária que duplique um registro existente, a inserção falhará.
A maioria dos bancos de dados também é capaz de gerar suas próprias chaves primárias. Microsoft Access, por exemplo, pode ser configurado para usar o tipo de dados AutoNumeração para atribuir uma identificação exclusiva para cada registro na tabela. Embora eficaz, essa é uma prática de design ruim porque deixa você com um valor sem sentido em cada registro na tabela. Por que não usar esse espaço para armazenar algo útil?
Chaves Estrangeiras
O outro tipo é a chave estrangeira, que é usada para criar relacionamentos entre tabelas. Relacionamentos naturais existem entre tabelas na maioria das estruturas de banco de dados. Retornando ao banco de dados de nossos funcionários, imagine que desejamos adicionar uma tabela contendo informações departamentais ao banco de dados. Essa nova tabela pode ser chamada Departamentos e conteria uma grande quantidade de informações sobre o departamento como um todo. Também gostaríamos de incluir informações sobre os funcionários do departamento, mas seria redundante ter as mesmas informações em duas tabelas (funcionários e departamentos). Em vez disso, podemos criar um relacionamento entre as duas tabelas.
Vamos supor que a tabela Departamentos use a coluna Nome do departamento como a chave primária. Para criar um relacionamento entre as duas tabelas, adicionamos uma nova coluna à tabela Employees chamada Department. Em seguida, preenchemos o nome do departamento ao qual cada funcionário pertence. Também informamos ao sistema de gerenciamento de banco de dados que a coluna Departamento na tabela Empregados é uma chave estrangeira que faz referência à tabela Departamentos. O banco de dados aplicará a integridade referencial, garantindo que todos os valores na coluna Departamentos da tabela Funcionários tenham entradas correspondentes na tabela Departamentos.
Observe que não há restrição de exclusividade para uma chave estrangeira. Podemos (e muito provavelmente) ter mais de um funcionário que pertença a um único departamento. Da mesma forma, não há exigência de que uma entrada na tabela Departamentos tenha qualquer entrada correspondente na tabela Empregados. É possível que tenhamos um departamento sem funcionários.
Para mais informações sobre este tópico, leia Criando chaves estrangeiras.