Entendendo as Chaves dos Bancos de Dados

Banco de DadosO conceito básico de chave de um BD é que é uma ou mais colunas que distiguem uma linha das demais dentro de uma tabela, sendo esta chamada de chave primária (PK – Primary Key) ou para relacionar com outra tabela, chamada de chave estrangeira (FK – Foreign Key). Essas chaves é que determinam a unicidade de cada registro dentro de uma tabela.

Esta unicidade dos registros, determinada pela chave, é fundamental para a criação de índices.

Tipos de Chaves

Chave Primária / Primary Key (PK)

Este tipo de chave, refere-se aos conjuntos de um ou mais campos, cujos valores, considerando a combinação de valores de todos os campos da tupla (registro), nunca se repetem e que podem ser usadas como um índice para os demais campos da tabela do banco de dados. Em chaves primárias, não pode haver valores nulos nem repetição de tuplas.

Quando a chave é simples ela é formada por um único campo da tabela, sendo que este campo não pode ter dois valores ou mais registros de mesmo valor, e não pode conter registro nulo.

Quando a chave é composta, ou seja, formada por mais de um campo, os valores podem se repetir, mas não a combinação desses valores. Exemplo: a tabela ‘Livros_Autores’ tem como chave primária (cod_livro, cod_autor). Podem existir nessa tabela os registros: (5, 9), (5, 10), (4, 9), (9, 5). Mas não podem existir dois registros (5, 9).

Quando se cria uma chave primária, automaticamente estamos criando um índice do tipo aglomerado (CLUSTERED), sendo este criado por padrão quando não existe outro do mesmo tipo. Caso haja, será criado um do tipo não-aglomerado (NONCLUSTERED).

Podemos criar definir as chaves primárias logo após a declaração dos campos:

CREATE TABLE nome_tabela
  (
    campo1  NOT NULL,
    campo2  NOT NULL,
    campoX ,
    PRIMARY KEY (campo1, campo2)
  )

Vamos ver um exemplo abaixo:

Tabela com chaves

Chave Estrangeira / Foreign Key (FK)

Este outro tipo de chave é utilizado para criar os relacionamentos entre as tabelas. Imagine que você queira cadastrar vários produtos que sejam de uma determinada categoria. Toda vez que você preencher os dados do produto, precisaremos indicar a chave primária da tabela categoria que seja da categoria que o nosso produto pertencerá. Ou seja, quando inserirmos um registro na tabela de produtos com o “id_categoria”, essa chave primária da tabela “categorias” representará uma chave estrangeira (FK) dentro da tabela de produtos. É uma chave que vem de fora, de outra tabela.

Com essa chave estrangeira, podemos facilitar as consultas e fazer cruzamento de dados através destas referências, o que poderia gerar uma consulta que iria pegar o nome do produto e o nome da categoria que ele pertence para exibirmos em uma listagem dos dados.

Perceba que a chave estrangeira não será única dentro da tabela de produtos, já que podemos ter vários produtos de uma categoria. Já no caso da chave primária, sempre será e deverá ser única.

Fico a disposição para esclarecimento de qualquer dúvida pessoal. Grande abraço!

Sou bacharel em Sistemas de Informação pela Estácio de Sá (Alagoas), especialista em Gestão Estratégica da Tecnologia da Informação pela Univ. Gama Filho (UGF) e pós-graduando em Gestão da Segurança da Informação pela Univ. do Sul de Santa Catarina (UNISUL). Certificações que possuo: EC-Council CEH, CompTIA (Security+, CySA+ e Pentest+), EXIN (EHF e ISO 27001), MCSO, MCRM, ITIL v3. Tenho interesse por todas as áreas da informática, mas em especial em Gestão e Governança de TI, Segurança da Informação e Ethical Hacking.

12 Responses to “Entendendo as Chaves dos Bancos de Dados”

  1. Roberto de Campos disse:

    Parabéns. Seu trabalho é excelente. Sucesso e um forte abraço.

  2. Jozza Lopes disse:

    Quais são os melhores exemplos de chave estrangeira?

  3. Matheus Daniel disse:

    Muito bom!

  4. Gisele disse:

    conteúdo de grande valor para mim, valeu!!

  5. JOAO CARLOS disse:

    Boa noite, e no caso de chaves candidatas? tem como eu definir? ou pelos definir aquele atributo como unico?(tipo o cpf)

  6. FRANCO RODRIGUES SILVA disse:

    Precizo e informar…

  7. Danilo disse:

    Me ajudou bastante aqui, Diego. Obrigado!

  8. Tatiane disse:

    Olá!!!Boa Noite!!!Me ajuda!!!!Quero um curso mais avançado de Banco de Dados.Me ajude!!!! Acho muito difícil.

Deixe um comentário

O seu endereço de e-mail não será publicado.