Chave primária simples e chave primária composta

É possível criar duas chaves primárias em uma mesma tabela? Ou o conceito correto seria criar uma chave primária composta? Entenda.

 

Uma das características mais importantes da modelagem de dados é compreender o conceito de chave primária. A chave primária é usada para criar um mecanismo de controle que permite com que os dados inseridos em uma tabela do banco de dados seja consistente, isto é, que não haja dados duplicados.

 

Chave primária simples

O exemplo abaixo mostra como criar uma tabela com uma chave primária simples. Perceba que a chave primária foi criada no campo cidade.

create table cidades(
 cidade varchar(100) primary key,
 estado varchar(10),
 populacao int
)

Agora considere o exemplo abaixo que irá inserir os dados das cidades de Rio Claro/SP e Rio Claro/RJ na tabela criada.

insert into cidades values('Rio Claro','SP',185421)
insert into cidades values('Rio Claro','RJ',17216)

No exemplo acima teremos um erro, pois há uma violação da chave primária, já que o nome Rio Claro será duplicado e isto não é permitido.

Chave primária composta

A solucão para o problema acima é criarmos uma chave primária composta. É muito importante entendermos que não existe duas chaves primárias e sim chave primária composta.

A chave primária composta é aquela que é criada em dois campos e desta forma passa a utilizar a junção dos dados dos dois campos indicados para formar um valor único e assim aplicar o bloqueio de duplicidade.

No nosso exemplo, poderemos usar o campo estado junto com o campo cidade para formar uma chave composta. Desta forma Rio Claro/SP será diferente de Rio claro/RJ. Veja o exemplo abaixo:

create table cidades(
 cidade varchar(100),
 estado varchar(10),
 populacao int,
 CONSTRAINT pk_CE primary key(cidade,estado)
)

Constraint é o mesmo que restrição, já que a chave primária é uma restrição. pk_CE é o nome da restrição. Cidade e  estado são os campos que usei para criar a chave composta.

Se executarmos novamente o exemplo do insert, como mostrado abaixo, não teremos erro já que a junção dos nomes das cidades com o estado gerou termos diferentes.

insert into cidades values('Rio Claro','SP',185421)
insert into cidades values('Rio Claro','RJ',17216)

Simples não?

Alguém poderia perguntar: Não seria melhor criar um campo de código da cidade e usá-lo como chave primária simples? Sim. Quando isso for possível, creio que seria mesmo melhor, mas nem sempre é. Outro ponto impostante é que muitos bancos já estão constituídos e outros são objetos de sistemas legados. Enfim, há casos e casos.

 

Fonte: http://www.luis.blog.br/chave-primaria-simples-e-chave-primaria-composta.aspx

.