Bases de Dados · 1.º ano (indicativo)

Como identificar chaves numa tabela?

  • 9 min de leitura
  • 4 exemplos resolvidos
  • 5 exercícios com solução
  • Atualizado em

Resposta curta

Uma chave é um atributo (ou conjunto de atributos) cujo valor identifica cada linha de forma única. Para a encontrar, procure o que nunca se repete em nenhuma situação possível, retire atributos que sobrem e escolha uma como chave primária. As restantes ficam como chaves alternativas.

Quando se aplica

Identificar chaves é o passo central do modelo relacional. Faz-se ao analisar uma tabela existente, ao desenhar tabelas a partir de um diagrama entidade-associação e ao verificar se uma tabela está bem estruturada (normalização). Sem chave, não há forma segura de atualizar ou apagar uma linha, e os dados repetidos multiplicam-se.

Pré-requisitos

Saber o que é uma tabela (relação), uma linha (tuplo) e uma coluna (atributo).

Os tipos de chave

TipoDefinição
Superchaveconjunto de atributos que identifica cada linha de forma única (pode ter atributos a mais)
Chave candidatasuperchave mínima: se tirar qualquer atributo, deixa de identificar
Chave primáriaa chave candidata escolhida para identificar as linhas; não aceita valores nulos
Chave alternativaas chaves candidatas que não foram escolhidas
Chave compostachave formada por mais de um atributo
Chave estrangeiraatributo que referencia a chave primária de outra tabela

Método passo a passo

  1. Perceba o significado das colunas. A pergunta é «o que identifica uma linha na vida real?», não «o que é único nos dados de hoje».
  2. Procure atributos únicos em todas as situações possíveis. Um nome pode repetir-se; o número de BI de uma pessoa não.
  3. Verifique a unicidade para todos os valores futuros, não só para as linhas que vê: duas pessoas podem vir a ter o mesmo nome.
  4. Se nenhum atributo chega, combine atributos e teste de novo.
  5. Garanta que é mínima: retire cada atributo, um de cada vez; se ainda identificar, o atributo retirado era a mais.
  6. Escolha a chave primária entre as candidatas: estável, curta e nunca nula. Muitas vezes cria-se um número de código (id) para isso.
  7. Identifique as chaves estrangeiras: colunas que apontam para a chave primária de outra tabela.

Atenção

Os dados de hoje podem enganar. Se todos os alunos na tabela têm nomes diferentes, isso não faz de nome uma chave: a regra tem de valer para qualquer linha que possa ser inserida.

Exemplos resolvidos

Exemplo 1 — Chaves de uma tabela de alunos

Enunciado: Dada a tabela ALUNO(nr_aluno, bi, nome, turma) com as linhas abaixo, identifique as chaves candidatas, a primária e a alternativa.

nr_alunobinometurma
101000111LAAna Mendes10A
102000222LAPaulo Neto10A
103000333LAAna Mendes10B

Resolução:

  1. nome repete-se (Ana Mendes aparece duas vezes) e turma também: não servem.
  2. nr_aluno é atribuído pela escola, único para cada aluno: serve.
  3. bi é único para cada pessoa: serve também.
  4. Ambos são mínimos (têm um só atributo). As chaves candidatas são nr_aluno e bi.
  5. Escolha nr_aluno como primária (atribuído pela escola, estável e sempre preenchido). bi fica como chave alternativa.

Resposta: candidatas: nr_aluno e bi; primária: nr_aluno; alternativa: bi. Verificação: nenhuma das duas colunas repete valores nas linhas vistas, e a regra vale para qualquer aluno novo.

Exemplo 2 — Chave composta

Enunciado: Na tabela INSCRICAO(nr_aluno, cod_disciplina, ano, nota), um aluno pode repetir uma disciplina noutro ano. Qual é a chave?

Resolução:

  1. nr_aluno sozinho repete-se (o aluno tem várias disciplinas).
  2. (nr_aluno, cod_disciplina) ainda se repete se o aluno repetir a disciplina noutro ano.
  3. (nr_aluno, cod_disciplina, ano) identifica cada inscrição de forma única.
  4. Mínima? Sem ano, falha para repetições; sem cod_disciplina, o aluno teria uma só inscrição por ano; sem nr_aluno, outros alunos coincidem. Logo é mínima.

Resposta: chave primária composta (nr_aluno, cod_disciplina, ano). Verificação: em SQL escreve-se PRIMARY KEY (nr_aluno, cod_disciplina, ano); nota não faz parte da chave, porque depende dela.

Exemplo 3 — Chaves estrangeiras

Enunciado: Há duas tabelas: TURMA(cod_turma, sala) e ALUNO(nr_aluno, nome, cod_turma). Quais são as chaves primárias e estrangeiras?

Resolução:

  1. Em TURMA, cod_turma identifica cada turma: chave primária.
  2. Em ALUNO, nr_aluno identifica cada aluno: chave primária.
  3. A coluna cod_turma em ALUNO guarda o código de uma turma da tabela TURMA: é chave estrangeira.

Resposta: primárias: cod_turma (TURMA) e nr_aluno (ALUNO); estrangeira: cod_turma em ALUNO, que referencia TURMA. Verificação: não se pode registar um aluno com cod_turma que não exista em TURMA.

Exemplo 4 — Nível de exame: chaves a partir de dependências funcionais

Enunciado: A relação R(A, B, C, D) tem as dependências A → B e B → C. Determine a chave candidata.

Resolução:

  1. D não aparece do lado direito de nenhuma dependência; logo D tem de fazer parte de qualquer chave.
  2. Calcule o fecho de A: A → B, depois B → C, logo {A}+ = {A, B, C}. Não inclui D.
  3. Teste {A, D}: {A, D}+ = {A, B, C, D}, todos os atributos.
  4. É mínima? {A}+ não tem D, e {D}+ = {D}. Nenhum subconjunto chega.
  5. Não há outra: B ou C isolados com D não chegam a A.

Resposta: a única chave candidata é {A, D}. Verificação: o fecho de {A, D} contém os quatro atributos.

Erros frequentes

  • Escolher o nome como chave. Nomes repetem-se, mesmo que na tabela atual não pareça.
  • Concluir pela amostra. Só vê as linhas de hoje; a regra tem de ser válida para todas as linhas futuras.
  • Chave com atributos a mais: (nr_aluno, nome) é superchave, mas não é candidata, porque nome sobra.
  • Aceitar nulos na chave primária. Nenhum dos atributos da primária pode ficar vazio.
  • Chave estrangeira para valor inexistente. O valor tem de existir na tabela referenciada (integridade referencial).
  • Confundir chave estrangeira com chave primária. Uma coluna pode ser as duas coisas ao mesmo tempo, mas os papéis são diferentes.
  • Usar dados que mudam, como o número de telefone, como chave primária.

Exercícios propostos

Tente resolver primeiro no caderno; depois confira.

1Exercício 1

Na tabela PRODUTO(cod_barras, nome, preco), qual é a melhor chave primária e porquê?

Ver solução

cod_barras: identifica cada produto e não se repete. nome pode repetir-se (marcas diferentes) e preco varia e repete-se.

2Exercício 2

A tabela PESSOA(bi, nome, data_nascimento) tem a linha (000111LA, Ana, 2005-03-02). nome e data_nascimento podem formar chave? Justifique.

Ver solução

Não. Duas pessoas diferentes podem ter o mesmo nome e a mesma data de nascimento, por isso a combinação não garante unicidade. A chave é bi.

3Exercício 3

Na tabela NOTA(nr_aluno, cod_disciplina, trimestre, valor), cada aluno tem uma nota por disciplina e por trimestre. Indique a chave primária e as chaves estrangeiras prováveis.

Ver dica

Quantos atributos são precisos para identificar uma única nota?

Ver solução

A chave primária é composta: (nr_aluno, cod_disciplina, trimestre). As chaves estrangeiras prováveis são nr_aluno, que referencia a tabela de alunos, e cod_disciplina, que referencia a de disciplinas.

4Exercício 4

A relação R(A, B, C) tem as dependências A → B e B → C. Qual é a chave candidata?

Ver solução

Fecho de A: A → B, B → C, logo {A}+ = {A, B, C}, que é tudo. A é mínima (um só atributo). Como C e B não determinam A, a chave candidata única é A.

5Exercício 5

Numa tabela de viagens de candongueiro VIAGEM(matricula, data, hora_partida, destino), um veículo parte no máximo uma vez por hora. Indique a chave candidata e escreva a instrução SQL da chave primária.

Ver dica

Um veículo pode fazer várias viagens, mas nunca duas à mesma hora do mesmo dia.

Ver solução

Chave candidata: (matricula, data, hora_partida); o destino não faz parte, porque depende da viagem. Em SQL: PRIMARY KEY (matricula, data, hora_partida). Sem hora_partida ou sem data, a combinação repetir-se-ia.

Perguntas frequentes

Posso ter mais do que uma chave candidata?

Sim. Num aluno, nr_aluno e bi podem ser ambas candidatas. Escolhe-se uma como primária e as outras ficam como chaves alternativas, geralmente declaradas como UNIQUE.

Devo usar uma chave artificial (id) ou uma chave natural?

Chaves naturais (como o BI) têm significado real, mas podem mudar ou ter erros. Uma chave artificial, como um número sequencial, é curta e estável. Muitos projetos usam um id como primária e mantêm a natural como UNIQUE.

Uma chave primária pode ter valores nulos?

Não. A chave primária identifica a linha, por isso todos os atributos que a compõem têm de ter valor. As chaves estrangeiras, essas, podem ser nulas se a relação for opcional.

Qual é a diferença entre superchave e chave candidata?

Toda a chave candidata é superchave, mas nem toda a superchave é candidata. A candidata é a superchave mínima: se lhe tirar um atributo, deixa de identificar de forma única.

Resumo

  • Chave é o atributo (ou conjunto) que identifica cada linha de forma única.
  • Superchave pode ter atributos a mais; chave candidata é a superchave mínima.
  • A primária é escolhida entre as candidatas e nunca é nula; as outras são alternativas.
  • Chave composta junta vários atributos; a estrangeira referencia a primária de outra tabela.
  • Teste sempre a unicidade para todos os valores possíveis, não só para os dados de hoje.

Onde aprofundar

  • O programa e o manual da sua cadeira de Bases de Dados.
  • Silberschatz, Korth e Sudarshan, Database System Concepts, capítulo sobre o modelo relacional (confirme a edição).
  • Elmasri e Navathe, Sistemas de Banco de Dados, secções sobre chaves e restrições; documentação do PostgreSQL ou do MySQL sobre PRIMARY KEY e FOREIGN KEY.

Continue a estudar

1.º ano (indicativo)10 min

Como desenhar um diagrama ER passo a passo?

Leia o enunciado e marque os substantivos como entidades e os verbos como associações. Acrescente atributos e um identificador a cada entidade, indique a cardinalidade…

4 exemplos5 exercícios com solução

Ver tudo de Bases de Dados