Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Por que devemos ter uma coluna de ID na tabela de usuários?


Mesmo que seu nome de usuário seja único, há poucas vantagens em ter uma coluna id extra em vez de usar o varchar como sua chave primária.

  • Algumas pessoas preferem usar uma coluna inteira como chave primária, para servir como uma chave substituta que nunca precisa ser alterada, mesmo que outras colunas estejam sujeitas a alterações. Embora não haja nada que impeça uma chave primária natural de ser alterada também, você teria que usar restrições de chave estrangeira em cascata para garantir que as chaves estrangeiras nas tabelas relacionadas sejam atualizadas em sincronia com qualquer alteração.

  • A chave primária sendo um inteiro de 32 bits em vez de um varchar pode economizar espaço. A escolha entre uma coluna de chave estrangeira int ou varchar em todas as outras tabelas que fazem referência à sua tabela de usuário pode ser um bom motivo.

  • A inserção no índice de chave primária é um pouco mais eficiente se você adicionar novas linhas ao final do índice, em comparação com colocá-las no meio do índice. Índices em tabelas MySQL geralmente são estruturas de dados B+Tree, e você pode estudá-los para entender como eles funcionam.

  • Algumas estruturas de aplicativos preferem a convenção de que cada tabela em seu banco de dados tem uma coluna de chave primária chamada id , em vez de usar chaves naturais ou chaves compostas. Seguir tais convenções pode tornar certas tarefas de programação mais simples.

Nenhuma dessas questões é um fator decisivo. E também há vantagens em usar chaves naturais:

  • Se você pesquisar linhas por nome de usuário com mais frequência do que pesquisar por id, pode ser melhor escolher o nome de usuário como chave primária e aproveitar o armazenamento organizado por índice do InnoDB. Faça com que sua coluna de pesquisa primária seja a chave primária, se possível, porque as pesquisas de chave primária são mais eficientes no InnoDB (você deve usar o InnoDB no MySQL).

  • Como você notou, se você já tem uma restrição exclusiva no nome de usuário, parece um desperdício de armazenamento manter uma coluna de id extra que você não precisa.

  • Usar uma chave natural significa que as chaves estrangeiras contêm um valor legível por humanos, em vez de um id inteiro arbitrário. Isso permite que as consultas usem o valor da chave estrangeira sem precisar voltar à tabela pai para o valor "real".

A questão é que não existe uma regra que abranja 100% dos casos. Costumo recomendar que você mantenha suas opções abertas e use chaves naturais, chaves compostas e chaves substitutas mesmo em um único banco de dados.

Eu abordo alguns problemas de chaves substitutas no capítulo "ID Requerido" em meu livro SQL Antipatterns:Avoiding as armadilhas da programação de banco de dados .