- O que são chaves?
- Chaves simples
- Chaves concatenadas ou compostas
- Chaves Primárias
- Numeração e incremento automático
- Uma tabela pode conter várias chaves primárias?
Enquanto muitos desenvolvedores e administradores de banco de dados podem trabalhar com
primary keys todos os dias, é um tópico fascinante perguntar a si mesmo:"O que exatamente é uma primary key e pode (ou deve) uma tabela de banco de dados conter várias primary keys simultaneamente?" Abaixo, examinaremos essas questões com mais detalhes e tentaremos chegar a um consenso razoável e geralmente acordado dentro da comunidade de desenvolvimento.
O que são chaves?
Para entender o que é uma
primary key está em uma tabela de banco de dados, devemos primeiro entender um pouco sobre non-primary keys . Uma key em uma tabela é simplesmente um atributo que é usado para identificar e acessar essas informações. Uma tabela pode e muitas vezes terá várias chaves, como na tabela Users ambos email e username podem ser considerados chaves. Dependendo do desenvolvedor ou administrador com quem você está falando, você pode ouvir sobre uma variedade de tipos de chave e suas definições, portanto, abordaremos apenas alguns exemplos diferentes abaixo e uma definição básica de cada um.
Chaves simples
Uma
simple key é apenas uma chave usando apenas um único atributo na tabela. A menos que imponhamos mais restrições à chave ou à tabela, então o username atributo no exemplo acima é uma simple key . Chaves concatenadas ou compostas
Um passo além das
simple keys são concatenated ou compound chaves. Como o nome indica, uma concatenated key é uma junção de várias single keys . Por exemplo, o sistema pode combinar automaticamente o last_name e year_of_birth simple keys em uma concatenated key , assim:smith1980 . Chaves primárias
Uma
[primary key](https://en.wikipedia.org/wiki/Unique_key) é uma chave que foi escolhida para ser a principal (ou primária ) atributo representativo para essa linha de dados. A primary key é único e esse atributo é então usado em todo o banco de dados e é acessado e passado para outras tabelas como o atributo representativo dos dados em questão. Na prática, a
primary key atributo também é marcado como NOT NULL na maioria dos bancos de dados, o que significa que o atributo deve sempre conter um valor para que o registro seja inserido na tabela. Como exemplo, o
email ou username simple keys poderia ser atribuída a designação da primary key , mas normalmente é uma prática recomendada definir a primary key a um atributo que não é (ou não poderia) ser alterado pela lógica de negócios ou mesmo pelo indivíduo. Por exemplo, imagine um User recebe um novo endereço de e-mail, o que faz com que todas as primary key anteriores associações feitas com o endereço de e-mail antigo se tornem inválidas ao usar o novo endereço de e-mail. Por esse motivo (entre outros), a maioria das
primary keys use um número ou uma string exclusiva, como um [UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier) . Numeração e incremento automático
Também vale a pena notar brevemente que muitos sistemas de banco de dados são configurados de forma que cada tabela tenha uma
primary key que é numérico e também é incrementado automaticamente. Isso significa simplesmente que o próprio mecanismo de banco de dados atribui automaticamente a cada novo registro nessa tabela uma primary key exclusiva valor que é incrementalmente maior do que todos os valores anteriores. No entanto, a maioria dos desenvolvedores concorda que essa prática está desatualizada e expõe falhas de segurança desnecessárias para o sistema quando usado para algumas tabelas que representam determinados dados. Por exemplo, imagine todos os
User registros são atribuídos a uma primary key auto-incrementada valor, conhecido como id atributo. Se uma pessoa mal-intencionada descobrir que o id atributo de um determinado usuário (por exemplo, John Smith) é o valor 1500 , isso já expõe um pouco de informação. Primeiro, indica que provavelmente há pelo menos 1.499 outros usuários no sistema, ou houve em algum momento. Isso também significa que, se a página de usuário de John Smith puder ser acessada por meio de uma URL ou chamada de API que contenha esse id valor de 1500 , há uma boa chance de simplesmente alterar o valor para outro número, como 1499 ou 1501 , irá expor a página de outro usuário que pode não querer que sua página seja acessada por este visitante. Dessa forma, os registros podem ser consultados simplesmente supondo o id valores em escala de massa. Obviamente, esses são exemplos muito simples, mas por esses motivos a maioria dos bancos de dados modernos usará uma
primary key aleatória e exclusiva valor de atributo como um UUID ao trabalhar com dados confidenciais. Uma tabela pode conter várias chaves primárias?
A resposta curta é não , uma tabela não pode conter várias
primary keys , pois isso vai contra os princípios fundamentais do design de banco de dados relacional (consulte:[database normalisation](https://en.wikipedia.org/wiki/Database_normalisation) e [Third normal form](https://en.wikipedia.org/wiki/Third_normal_form) ). É é possível para uma tabela ter várias
candidate keys , que efetivamente se comportam de forma semelhante a uma primary key em que uma candidate key é único, NOT NULL , e é uma representação singular desse registro de tabela. No entanto, quando se trata de selecionar qual um atributo será atribuído como a
primary key para a tabela, a escolha vem da lista de todas as possíveis candidate keys (daí o nome, eles são candidatos a se tornar uma primary key ). Em última análise, apenas uma candidate key é selecionado como o melhor atributo representativo para esse registro, para ser usado nesta tabela como a primary key e referenciado em outro lugar no banco de dados por outras tabelas por meio de suas respectivas foreign keys .