Existe uma convenção de nomenclatura para o MySQL?

162

Aqui está como eu faço:

  1. Os nomes das tabelas são minúsculas, as utilizações sublinhados para separar palavras, e são singular (por exemplo foo, foo_bar, etc.
  2. Geralmente (nem sempre) tenho um PK de incremento automático. I usar a seguinte convenção: tablename_id(por exemplo foo_id, foo_bar_id, etc.).
  3. Quando uma tabela contém uma coluna que é uma chave estrangeira, apenas copio o nome da coluna dessa chave de qualquer tabela da qual ela veio. Por exemplo, digamos que a tabela foo_bartenha o FK foo_id(onde foo_idestá o PK de foo).
  4. Ao definir FKs para impor a integridade referencial, eu uso o seguinte: tablename_fk_columnname(por exemplo, avançar o exemplo 3, seria foo_bar_foo_id). Como essa é uma combinação de nome de tabela / nome de coluna, é garantido que seja exclusivo no banco de dados.
  5. Eu ordeno as colunas assim: PKs, FKs e o restante das colunas alfabeticamente

Existe uma maneira melhor e mais padrão de fazer isso?

StackOverflowNewbie
fonte
6
É errado usar o PK de incremento automático apenas "id"? Por quê? O nome da coluna tem significado apenas no contexto da tabela. Então, eu tenho um "id" em todas as tabelas e pode ter muitos id_ <table_name> para o FK.
Zbyszek
3
@ Zbyszek Acho que a razão mais simples é simplesmente a consistência / simplicidade. Ao invés de ter id_tableB=> oh não coluna diferente de nome id , a consistência de id_tableB=> id_tableBapenas parece mais puro ... ou como OP faz isso: foo_id=> foo_idem vez de foo_id=>id
Don Cheadle

Respostas:

106

Eu diria que em primeiro lugar: seja consistente.

Acho que você está quase lá com as convenções descritas na sua pergunta. Alguns comentários:

Os pontos 1 e 2 são bons, eu acho.

Ponto 3 - infelizmente isso nem sempre é possível. Pense em como você lidaria com uma única tabela foo_barque possui colunas foo_ide another_foo_idambas referenciam a coluna da footabela foo_id. Você pode considerar como lidar com isso. Este é um caso de esquina!

Ponto 4 - Semelhante ao ponto 3. Você pode introduzir um número no final do nome da chave estrangeira para ter mais de uma coluna de referência.

Ponto 5 - eu evitaria isso. Ele fornece pouco e se tornará uma dor de cabeça quando você desejar adicionar ou remover colunas de uma tabela posteriormente.

Alguns outros pontos são:

Convenções de nomenclatura de índice

Você pode querer introduzir uma convenção de nomenclatura para índices - isso será uma grande ajuda para qualquer trabalho de metadados do banco de dados que você queira executar. Por exemplo, você pode querer chamar um índice foo_bar_idx1oufoo_idx1 - totalmente com você, mas vale a pena considerar.

Nomes de colunas singulares vs plurais

Pode ser uma boa idéia abordar a questão espinhosa do plural vs único nos nomes de suas colunas, bem como no (s) nome (s) de sua tabela. Esse assunto geralmente causa grandes debates na comunidade do DB. Eu ficaria com formas singulares para nomes de tabelas e colunas. Lá. Eu já disse isso.

O principal aqui é, obviamente, consistência!

Tom Mac
fonte
O que seria melhor do que o ponto 5? Por que isso pode se tornar uma dor de cabeça?
Rasshu 28/03
7
Para acompanhar, achei este muito útil para quem virá aqui mais tarde: launchbylunch.com/posts/2014/Feb/16/sql-naming-conventions/…
Enissay
1
Estou tendo problemas para encontrar um bom "esquema" para nomear minhas tabelas que contêm objetos de modelos que consistem em dois nomes (DocumentChapter, DocumentVersion, DocumentType etc.). Por exemplo, para DocumentType, eu poderia nomear documenttypeou document_type. Eu preferiria o último, mas na maioria das vezes tenho um relacionamento de muitos para muitos e preciso de uma tabela parecida document_document_type. Alguma sugestão de como lidar com isso?
Lexith 7/04
@ rsb2097 Re: ponto 5 - Após adicionar uma coluna (ao final), o pedido pode se tornar inválido. Você não deve adicionar nenhuma restrição que exija reordenar as colunas, pois isso é uma sobrecarga desnecessária.
Will Sheppard
21

Consistência é a chave para qualquer padrão de nomenclatura. Contanto que seja lógico e consistente, você estará 99% lá.

O padrão em si é uma preferência muito pessoal - portanto, se você gosta do seu padrão, execute-o.

Para responder sua pergunta completamente - não, o MySQL não possui uma convenção / padrão de nomenclatura preferido, portanto, fazer o seu próprio é bom (e o seu parece lógico).

mal-wan
fonte
4

Felizmente, os desenvolvedores de PHP não são "fanáticos pelo caso Camel", como algumas comunidades de desenvolvimento que eu conheço.

Suas convenções parecem boas.

Contanto que sejam a) simples eb) consistentes - não vejo problemas :)

PS: Pessoalmente, acho que 5) é um exagero ...

paulsm4
fonte
2
Longe de ser fanático, a caixa de camelo é na verdade desaprovada por muitos da comunidade de DB porque alguns dos RDBMS 'não diferenciam maiúsculas de minúsculas até o ponto em que removerão as caixas (ou mudarão tudo para maiúsculas) para que as coisas fiquem realmente feias muito rapidamente.
mal-wan
@mwan: você pode especificar quais RDBMS '? E eu sou um jóquei de camelo. Caps servem apenas a um propósito no meu esquema, para indicar tabelas de junção e (no caso de campos) para indicar limites de palavras, de modo que o _ possa ser exclusivamente para indicar um othertable_id (ou seja, nome da tabela = othertable e campo nessa tabela = id ) Além disso, se o outro RDBMS não diferencia maiúsculas de minúsculas, o que isso realmente importa? Eu nunca vou ter uma versão em maiúsculas e minúsculas da mesma tabela! Oh, e eu não iria preferir um RDBMS case-insensitive - Eu prefiro escrever código consistente
Samuel Fullman
7
Eu gosto da ironia dos usuários do MySQL que não gostam do CamelCase e do nome do produto que usamos: MySQL, escrito em CamelCase
DBX12
1
@ DBX12 Para ser pedante, esse é o PascalCase, não o camelCase, mas seu argumento ainda permanece.
MarredCheese 24/02/19
@MarredCheese Nunca pensei nisso, mas você está certo. O camelCase não deve ter corcovas no início.
DBX12 25/02/19
1

Resposta Simples: NÃO

Bem, pelo menos uma convenção de nomenclatura, como tal, incentivada pelo Oracle ou pela comunidade, não, no entanto, basicamente você deve estar ciente de seguir as regras e os limites para identificadores, como indicado na documentação do MySQL: https://dev.mysql.com /doc/refman/8.0/en/identifiers.html

Sobre a convenção de nomenclatura que você segue, acho que está ok, apenas o número 5 é um pouco desnecessário, acho que a maioria das ferramentas visuais para gerenciar bancos de dados oferece uma opção para classificar nomes de colunas (eu uso o DBeaver e ele possui), então se o proponente estiver tendo uma boa apresentação visual da sua mesa, você pode usar esta opção que mencionei.

Por experiência pessoal, eu recomendaria o seguinte:

  • Use letras minúsculas . Isso quase garante a interoperabilidade quando você migra seus bancos de dados de um servidor para outro. Às vezes, o lower_case_table_namesservidor não está configurado corretamente e o servidor começa a gerar erros simplesmente ignorando o padrão camelCase ou PascalCase (problema de diferenciação de maiúsculas e minúsculas).
  • Nomes curtos . Simples e claro. O mais fácil e rápido é identificar sua tabela ou colunas, melhor. Confie em mim, quando você faz muitas consultas diferentes em um curto período de tempo, é melhor ter tudo simples de escrever (e ler).
  • Evite prefixos . A menos que você esteja usando o mesmo banco de dados para tabelas de aplicativos diferentes, não use prefixos. Isso apenas adiciona mais verbosidade às suas consultas. Há situações em que isso pode ser útil, por exemplo, quando você deseja identificar chaves primárias e chaves estrangeiras, que geralmente os nomes de tabela são usados ​​como prefixo para colunas de identificação.
  • Use sublinhados para separar as palavras . Se você ainda deseja usar mais de uma palavra para nomear uma tabela, coluna, etc., use sublinhados para separar as palavras , isso ajuda na legibilidade (seus olhos e seu cérebro estressado vão agradecer).
  • Seja consistente . Depois de ter seu próprio padrão, siga-o. Não seja a pessoa que cria as regras e é a primeira a quebrá-las, isso é vergonhoso.

E o nome "Plural vs Singular"? Bem, essa é mais uma situação de preferências pessoais. No meu caso, tento usar nomes plurais para tabelas porque acho que uma tabela como uma coleção de elementos ou um pacote contém elementos; portanto, um nome plural faz sentido para mim; e nomes singulares para colunas porque vejo colunas como atributos que descrevem singularmente esses elementos da tabela.

Fabrizio Valencia
fonte