Revisão do modelo relacional
Revisão do modelo relacional: tabelas, diferenças em relação a arquivos comuns, chaves primárias, estrangeiras e alternativas, e as restrições de integridade impostas pelas chaves estrangeiras.
1. Visão geral
Neste material estudaremos as principais características do modelo relacional. O modelo relacional é aquele cuja implementação se baseia em relações ou tabelas.
O que você vai aprender
- O que é uma tabela (relação) e como ela se compara a um arquivo comum
- O que são chave primária, chave estrangeira e chave alternativa
- Quais restrições uma chave estrangeira impõe na inclusão, alteração e remoção de linhas
- Como uma chave estrangeira pode referenciar a própria tabela para implementar auto-relacionamentos
O que você vai precisar
- Conhecer os conceitos da abordagem entidade-relacionamento
- Papel e lápis para o exercício final
2. Tabelas
O principal "objeto" que caracteriza um banco de dados relacional é a relação ou tabela. Vejamos algumas definições.
Tabela (ou relação)
Um conjunto não ordenado de linhas (tuplas). Cada linha é composta por uma série de campos (atributos). Cada campo é identificado por um nome de campo.
Veja um exemplo na figura a seguir.

Figura 2.1.1: uma tabela de empregados.
Tabelas e arquivos comuns
Veja algumas comparações entre uma tabela de um banco de dados relacional e um arquivo comum, como um simples txt.
- As linhas de uma tabela não têm ordenação. A ordem de recuperação feita pelo SGBD é arbitrária, a menos que o comando de consulta diga explicitamente a ordem desejada. Não existe a ideia de "primeira linha", "segunda linha" e assim por diante. Em arquivos comuns, a ordenação existe e é possível referenciar linhas pela sua posição relativa dentro do arquivo.
- Os valores de campo de uma tabela são atômicos e monovalorados. Quer dizer, um valor não pode ser composto de outros. Além disso, um campo somente pode possuir no máximo um valor.
- As linguagens de consulta a bases de dados (implementações de SQL como PL/SQL e Transact/SQL) permitem o acesso por quaisquer critérios envolvendo os campos de uma ou mais linhas. Em arquivos comuns, a busca por valores se dá de forma sequencial ou requer o uso de estruturas de dados como índices. Embora os índices sejam construções fundamentais em bancos de dados relacionais, seu uso é usualmente abstraído pelo SGBD.
3. Chave primária e chave estrangeira
Em um banco de dados relacional, o conceito de chave é muito importante. Há, pelo menos, três tipos.
Chave primária
Chave primária
Uma coluna ou combinação de colunas cujos valores distinguem uma linha das demais dentro de uma tabela.
A figura a seguir mostra uma tabela cuja chave primária é a coluna CodigoEmp.

Figura 2.3.1: chave primária simples: somente uma coluna.
A figura a seguir mostra uma tabela cuja chave primária é composta por duas colunas.

Figura 2.3.2: chave primária composta: duas ou mais colunas.
Naturalmente, poderíamos apontar o conjunto de todas as colunas de uma tabela como a sua chave primária. Entretanto, exige-se que o número seja o menor possível. Esse é o princípio da minimalidade.
Chave estrangeira
Chave estrangeira
Uma coluna ou combinação de colunas cujos valores aparecem necessariamente na chave primária de uma tabela. A chave estrangeira é o mecanismo que permite a implementação de relacionamentos em um banco de dados relacional.
Veja um exemplo na figura a seguir.

Figura 2.3.3: a coluna CodigoDepto de Empregado é chave estrangeira. Os valores ali aparecem necessariamente na chave primária referenciada. Campos vazios são válidos, o que pode acontecer quando o relacionamento for opcional.
4. Restrições impostas pela chave estrangeira
A existência de uma chave estrangeira impõe restrições. Veja.
Inclusão de linha
Quando uma linha é inserida numa tabela que possui uma chave estrangeira, é necessário garantir que o valor da chave estrangeira existe na chave primária referenciada. Veja a figura a seguir.

Figura 2.3.4: na inclusão, o SGBD busca o valor da chave estrangeira na chave primária referenciada.
Alteração da chave estrangeira
Se o valor de uma chave estrangeira for alterado, deve-se garantir que o novo valor exista na chave primária referenciada. Veja a figura a seguir.

Figura 2.3.5: ao alterar uma chave estrangeira, o novo valor precisa existir na chave primária referenciada.
Remoção na tabela referenciada
Caso uma linha da tabela que possui a chave primária referenciada seja excluída, deve-se garantir que o valor removido não mais exista na chave estrangeira que a referencia. Há algumas opções para isso: remoção da linha que contém o valor de chave estrangeira envolvido, atualização para "null" caso o relacionamento seja opcional e o bloqueio da operação, ou seja, neste caso, o SGBD não permite que a remoção aconteça. Veja a figura a seguir.

Figura 2.3.6: as três opções para a remoção de uma linha referenciada.
Alteração na tabela referenciada
Caso uma linha da tabela que possui a chave primária referenciada seja alterada, deve-se garantir que as linhas cujas chaves estrangeiras a referenciam não mais possuam o valor antigo. Isso pode ser feito por meio do bloqueio da operação ou da atualização dos valores automaticamente. Veja a figura a seguir.

Figura 2.3.7: as duas opções para a alteração de uma chave primária referenciada.
5. Chave alternativa e auto-relacionamento
Chave alternativa
Há casos em que mais de uma coluna ou combinação de colunas pode servir para diferenciar uma ocorrência das demais. Neste caso, uma delas é escolhida como chave primária. As demais são consideradas chaves alternativas. Veja um exemplo na figura a seguir.

Figura 2.3.8: CodigoEmp foi escolhida como chave primária; CPF fica sendo uma chave alternativa.
Chaves primária e estrangeira na mesma tabela
Nada impede que uma chave estrangeira referencie a chave primária da tabela a que pertence. Esse é um mecanismo muito comum utilizado na implementação de auto-relacionamentos. Veja um exemplo na figura a seguir.

Figura 2.4.1: a coluna CodigoGerente referencia a chave primária da própria tabela.
6. Exercícios e encerramento
Exercícios
Use tabelas para implementar o seguinte "minimundo".
Pessoas possuem CPF, nome e idade. Veículos possuem placa, modelo e marca. Pessoas podem possuir diversos veículos. Um veículo possui apenas um proprietário.
A tabela Pessoa deve possuir duas ocorrências de pessoa, P1 e P2, as quais devem possuir os CPFs 123456 e 654321, respectivamente. A tabela de veículos deve possuir 3 ocorrências de veículos.
A pessoa P1 possui 2 veículos. A pessoa P2 possui apenas um veículo.
- Desenhe as tabelas de acordo com as restrições descritas.
- Mostre as tabelas após P2 comprar um veículo de P1.
- Mostre as tabelas caso o CPF de P1 seja atualizado para 111111.
- Remova P2 da base e mostre as tabelas resultantes.
Parabéns!
Você revisou os fundamentos do modelo relacional. O próximo passo é o projeto lógico: transformar um modelo entidade-relacionamento em tabelas.
Bibliografia
- HEUSER, Carlos Alberto. Projeto de Banco de Dados. 6ª ed. Bookman, 2008.