Olá, caro(a) aluno(a)! Nesta lição vamos estudar as características e regras no uso de chaves primárias e chaves estrangeiras em banco de dados. Durante as nossas lições utilizamos diversas vezes esses conceitos, porém não abordamos a teoria por trás da sua utilização.
Compreender profundamente como funciona o conceito de chaves é extremamente importante para o dia a dia de qualquer programador. Visto que, para qualquer aplicação desenvolvida que utiliza um banco de dados relacional é necessário que o programador saiba modelar adequadamente os relacionamentos entre as tabelas.
Chaves são conceitos importantes na modelagem de dados visto que a partir delas é possível implementar restrições que garantam a integridade das informações no banco de dados.
Não existe o modelo de entidade e relacionamento sem a utilização de conceitos de chave primária, estrangeira e candidata. A utilização desses conceitos são identificados durante a fase de análise de entidade e na identificação de relacionamentos quando estamos iniciando a modelagem da base de dados.
Durante as lições passadas, trabalhamos com o uso de chaves, porém você sabe exatamente qual é a teoria por trás do seu uso? Será que é possível criar um banco de dados sem utilizar nenhuma chave?
Durante sua jornada até aqui você observou o uso de chaves primárias e estrangeiras. Uma chave primária é utilizada como um identificador único de uma tupla em um banco de dados. Enquanto a chave estrangeira é utilizada para fazer referência de um dado presente em outra tabela identificando desta forma um relacionamento.
Vejamos um exemplo. Imagine que estamos desenvolvendo um banco de dados para uma aplicação que encontra médicos especialistas em cidades. Por exemplo, você pode acessar a aplicação e procurar por Cardiologistas em Curitiba, e a aplicação retorna todos os médicos cardiologistas de Curitiba.
A partir desta descrição já podemos imaginar algumas tabelas que essa base de dados deve ter:
Médicos
Especialidades
Cidades
Essas três tabelas são essenciais para a aplicação descrita, onde um médico deve ter apenas uma especialidade e ser ligado a apenas uma cidade. Uma especialidade pode ter vários médicos, e uma cidade pode contar com vários médicos e várias especialidades.
Sabendo disso podemos definir o relacionamento entre essas tabelas:
Médicos têm um relacionamento de um para um com a tabela especialidades e cidades.
Especialidades tem um relacionamento de um para vários médicos
Cidades têm um relacionamento de vários para várias especialidades.
Para realizar esses relacionamentos precisamos de atributos de chaves estrangeiras em cada uma dessas tabelas, de forma a identificar como elas devem se relacionar.
Ao aprender sobre bancos de dados relacionais, é importante que você entenda as diferenças entre chaves primárias e estrangeiras. Eles definem os relacionamentos entre as diferentes tabelas em seu banco de dados e são um conceito chave na modelagem de dados.
Vamos relembrar em linhas gerais o que é um banco de dados relacional. O modelo de dados relacional é projetado para reconhecer um relacionamento entre todos os tipos de informações diferentes armazenadas. É por isso que as chaves primárias e estrangeiras são tão importantes. Eles são o que torna um banco de dados relacional!
Uma chave primária (do inglês, primary key) consiste em uma coluna onde os dados são utilizados como identificadores exclusivos de cada linha. Esse campo é, normalmente, identificado pela nomenclatura “ID” (ELMASRI, NAVATHE, 2005). Podemos utilizar uma analogia simples imaginando que as chaves primárias, como um endereço que identifica uma casa, onde o endereço é a chave primária, e a casa é o dado que aquela chave representa. Algumas características definem uma chave primária, como:
Uma chave primária é uma ou mais colunas utilizadas para identificar, exclusivamente, um registro em uma tabela no banco de dados.
Ao definir uma tabela, é obrigatório especificar uma chave primária.
Apenas uma chave primária é permitida em uma tabela.
Não permite valores duplicados.
Uma coluna de chave primária não pode suportar valores nulos.
Chaves primárias são armazenadas em índices.
Restrições podem ser definidas, implicitamente, em tabelas temporárias.
Uma chave estrangeira (do inglês, foreign key), conforme define Elmasri e Navathe (2005), é um conjunto de uma ou mais colunas de uma tabela que faz referência à chave primária de outra tabela. A chave primária de uma tabela é a chave estrangeira em outra tabela. A chave estrangeira fornece um link entre duas tabelas, formando, assim, um relacionamento.
Diferentemente de uma chave primária, a chave estrangeira não é um campo obrigatório em uma tabela. A tabela que contém uma chave estrangeira pode ser chamada de tabela filha, enquanto a tabela referenciada pela chave primária é conhecida como tabela pai. Um banco de dados pode ser simples o suficiente para ter apenas uma tabela pai/filho ou centenas de tabelas pai/filho, tudo depende do caso de uso e de quanta informação você está tentando armazenar. Algumas características definem uma chave estrangeira, como:
Uma chave estrangeira é uma referência à chave primária de outra tabela.
Uma tabela pode conter uma ou mais chaves estrangeiras.
Campos de chaves estrangeiras permitem valores duplicados.
São permitidos valores nulos.
Os valores podem ser deletados a partir de tabelas filhas.
Restrições não podem ser definidas em tabelas temporárias.
A definição de chaves primárias e estrangeiras é uma grande parte da modelagem de dados. Se você for criar um modelo de dados, precisará saber como definir chaves primárias e estrangeiras, bem como mapeá-las umas para as outras. O primeiro passo é definir qual é a tabela “principal” da base de dados. Isso é, uma tabela de onde as outras tabelas se originam. Por exemplo, considerando o cenário que foi apresentado no caso do aplicativo de procurar médicos, a tabela de médico dá origem à necessidade da definição de outras duas tabelas, especialidades e cidades.
Observe a Figura 1, ela representa os atributos da tabela Médicos, em que temos o Id como chave primária. Os demais atributos do médico, além de dois campos que fazem referência à chave primária de outras tabelas, são eles o especialidadeId e a cidadeId, esses campos são as nossas chaves estrangeiras da tabela médico.
Figura 1 - Atributos Médicos
Fonte: o autor.
#PraCegoVer: a figura apresenta os atributos da tabela médicos, onde, os seguintes atributos são descritos: chave primária Id, nome, crm, chave estrangeira CidadeId, Chave estrangeira EspecialidadeID. A composição da figura é dada por um retângulo com bordas arredondadas em rosa e fundo cinza. No topo da imagem em negrito o texto Médicos, e logo abaixo os atributos, onde os atributos de chave são identificados pela figura de uma chave amarela do lado esquerdo.
A Figura 2 apresenta os atributos das tabelas Especialidade e Cidades, note que em ambas as tabelas temos um campo chamado Id que identifica as nossas chaves primárias.
Figura 2 - Atributos Especialidades e Cidades
Fonte: o autor.
#PraCegoVer: a figura apresenta os atributos das tabelas especialidades e cidades.A tabela especialidades os seguintes atributos são descritos: chave primária Id, nome. A segunda tabela Cidades, apresenta os seguintes atributos: chave primária Id e nome. A composição da figura é dada por dois retângulos com bordas arredondadas em rosa e fundo cinza um ao lado do outro, onde cada um dos retângulos representa uma tabela. No topo da imagem a esquerda em negrito o texto Especialidade, e logo abaixo os atributos, onde os atributos de chave são identificados pela figura de uma chave amarela do lado esquerdo. Do mesmo modo a figura da direita apresenta em negrito o texto Cidades seguido dos atributos da tabela.
O Quadro 1 apresenta a comparação entre chaves primárias e estrangeiras.
Quadro 1 - Atributos Especialidades e Cidades
Fonte: o autor.
#PraCegoVer: uadro com 6 linhas e 3 colunas. Na primeira linha, temos a primeira coluna Tabela vazia, na segunda coluna chave primária, na terceira chave estrangeira. Na segunda linha, temos na primeira coluna “Permitido mais de uma por tabela” , na segunda coluna não, na terceira sim. Na terceira linha, na primeira coluna temos “valores nulos”, na segunda não, na terceira sim. Na quarta linha temos, na primeira coluna “valores duplicados”, na segunda não, na terceira sim. Na quinta linha, na primeira coluna temos “indexado automaticamente”, na segunda sim, na terceira não. Por fim, na sexta linha temos, na primeira coluna “Identifica unicamente uma linha de uma tabela”, na segunda sim, na terceira sim.
As chaves primárias são usadas para identificar exclusivamente os registros em uma tabela e podem ser referenciadas em outras tabelas para criar uma conexão entre elas. Isso é feito atribuindo uma chave estrangeira em uma tabela específica.
Agora que você conhece mais a fundo esses conceitos está na hora de aplicá-los. Durante as aulas passadas aprendemos como montar um diagrama de entidade e relacionamento, deste modo, acesso o site www.diagrams.net e crie o exemplo dos médicos exposto nesta lição. Bons estudos!
ELMASRI, Ramez et al. Sistemas de banco de dados. 2005.