O que são convenções de nomenclatura para o MongoDB?

188

Existe um conjunto de convenções de nomenclatura preferidas para entidades do MongoDB, como bancos de dados, coleções, nomes de campos?

Eu estava pensando assim:

  • Bancos de dados: consistem no objetivo (palavra no singular) e terminam com "db" - todas em minúsculas: imagedb, resumedb, memberdb, etc.
  • Coleções: plural em minúsculas: imagens, currículos,
  • Campos do documento: lowerCamelCase, por exemplo, memberFirstName, fileName, etc
Andrey
fonte

Respostas:

128
  1. Mantenha-os curtos: Otimizando o armazenamento de objetos pequenos , SERVER-863 . Bobo, mas é verdade.

  2. Eu acho que praticamente as mesmas regras que se aplicam aos bancos de dados de relações devem se aplicar aqui. E depois de tantas décadas, ainda não há acordo sobre se as tabelas RDBMS devem ser nomeadas como singular ou plural ...

  3. O MongoDB fala JavaScript, portanto, utilize as convenções de nomenclatura JS do camelCase.

  4. A documentação oficial do MongoDB menciona que você pode usar sublinhados e também o nome de identificador interno _id(mas isso pode ser para indicar que _idse destina a ser privado, interno, nunca exibido ou editado.

Tomasz Nurkiewicz
fonte
95
3 e 4 são meio contraditórios - JS prefere camelcase, Mongo parece preferir sublinhados ... mas, na dúvida, escolha sublinhados. Pessoas acostumadas a alfabetos não latinos vão agradecer.
26811 Matt Zukowski
1
Veja esta pergunta para o debate sobre o single vs o plural: stackoverflow.com/questions/338156/…
Jason
4
Não tenho certeza se diria "JS prefere camelcase". O próprio JS não tem preferência, mas talvez seja verdade dizer que a maioria dos programadores JS costuma usar o caso camel.
treeface
1
@treeface Eu acho que Matt estava se referindo ao fato de JS built-in métodos todos camelCase uso, tanto no nó e em navegadores
Luke Taylor
1
O identificador _idinterno provavelmente é prefixado com um sublinhado para seguir uma convenção JavaScript comum que indica que a chave deve ser uma chave interna / privada. Em outras palavras, o documento _idnão deve ser editado ou apresentado a ninguém que esteja visualizando os dados de uma coleção.
Beau Smith #
58

BASE DE DADOS

  • camelCase
  • acrescente DB no final do nome
  • tornar singular (coleções são plurais)

O MongoDB mostra um bom exemplo:

Para selecionar um banco de dados a ser usado, no shell mongo, emita a instrução use <db>, como no exemplo a seguir:

use myDB
use myNewDB

Conteúdo de: https://docs.mongodb.com/manual/core/databases-and-collections/#databases

COLEÇÕES

  • Nomes em minúsculas: evita problemas de diferenciação de maiúsculas e minúsculas, os nomes de coleção do MongoDB diferenciam maiúsculas de minúsculas.

  • Plural: é mais óbvio rotular uma coleção de algo como o plural, por exemplo, "arquivos" em vez de "arquivo"

  • > Sem separadores de palavras: evita problemas em que pessoas diferentes (incorretamente) separam palavras (nome do usuário <-> nome_do_usuário, nome_do_ nome <->
    nome). Este está em debate de acordo com algumas pessoas
    por aqui, mas desde que o argumento seja isolado dos nomes das coleções, acho que não deveria ser;) Se você melhorar a
    legibilidade do nome de sua coleção adicionando sublinhados ou
    camelos O nome provavelmente é muito longo ou deve usar
    períodos apropriados, que é o padrão para a
    categorização da coleção .

  • Notação de ponto para coleções de detalhes mais altos: fornece alguma indicação de como as coleções estão relacionadas. Por exemplo, você pode ter certeza razoável de que poderá excluir "users.pagevisits" se tiver excluído "users", desde que as pessoas que projetaram o esquema tenham feito um bom trabalho.

Conteúdo de: http://www.tutespace.com/2016/03/schema-design-and-naming-conventions-in.html

Para coleções, estou seguindo esses padrões sugeridos até encontrar a documentação oficial do MongoDB.

BBi7
fonte
25

Mesmo que nenhuma convenção seja especificada sobre isso, as referências manuais são nomeadas consistentemente após a coleção referenciada na documentação do Mongo, para relações um a um. O nome sempre segue a estrutura <document>_id.

Por exemplo, em uma dogscoleção, um documento teria referências manuais a documentos externos denominados assim:

{
  name: 'fido',
  owner_id: '5358e4249611f4a65e3068ab',
  race_id: '5358ee549611f4a65e3068ac',
  colour: 'yellow'
  ...
}

Isso segue a convenção Mongo de nomear _ido identificador para cada documento.

danza
fonte
1
Eu não mencionei camelCase na minha resposta, então eu usaria #owner_id
danza
8

Convenção de nomenclatura para coleta

Para nomear uma coleção, algumas precauções a serem tomadas:

  1. Uma coleção com uma sequência vazia (“”) não é um nome de coleção válido.
  2. Um nome de coleção não deve conter o caractere nulo, pois isso define o final do nome da coleção.
  3. O nome da coleção não deve começar com o prefixo "sistema". pois isso é reservado para coleções internas.
  4. Seria bom não conter o caractere "$" no nome da coleção, pois vários drivers disponíveis para o banco de dados não suportam "$" no nome da coleção.

    Os itens a serem lembrados ao criar um nome de banco de dados são:

  5. Um banco de dados com sequência vazia (“”) não é um nome de banco de dados válido.
  6. O nome do banco de dados não pode ter mais que 64 bytes.
  7. O nome do banco de dados diferencia maiúsculas de minúsculas, mesmo em sistemas de arquivos que não diferenciam maiúsculas de minúsculas. Portanto, é bom manter o nome em letras minúsculas.
  8. Um nome de banco de dados não pode conter nenhum desses caracteres “/, \,.,“, *, <,>,:, |,?, $, ”. Também não pode conter um espaço único ou caractere nulo.

Para maiores informações. Verifique o link abaixo: http://www.tutespace.com/2016/03/schema-design-and-naming-conventions-in.html

Shrinivas Kalangutkar
fonte
3

Eu acho que é tudo preferência pessoal. Minhas preferências vêm do uso do NHibernate, no .NET, com o SQL Server, portanto elas provavelmente diferem do que os outros usam.

  • Bancos de dados: o aplicativo que está sendo usado. Ex: Stackoverflow
  • Coleções: nome singular, do que será uma coleção, ex: pergunta
  • Campos do documento, ex: MemberFirstName

Honestamente, isso não importa muito, desde que seja consistente para o projeto. Apenas comece a trabalhar e não se preocupe com os detalhes: P

Rex Morgan
fonte
1
Eu acho que o que pode ter consequências são os campos do documento, pois eles serão armazenados dentro de cada documento. Como Tomasz apontou, mantê-los curtos deve economizar espaço / largura de banda. Eu acho que é muito mais importante que você use algo que facilite a compreensão.
Rex Morgan
2

Até obtermos o SERVER-863, é recomendável manter os nomes dos campos o mais curtos possível, especialmente nos casos em que você possui muitos registros.

Dependendo do seu caso de uso, os nomes dos campos podem ter um grande impacto no armazenamento. Não consigo entender por que essa não é uma prioridade mais alta para o MongoDb, pois isso terá um impacto positivo em todos os usuários. Se nada mais, podemos começar a ser mais descritivos com os nomes dos nossos campos, sem pensar duas vezes nos custos de largura de banda e armazenamento.

Por favor vote .

FlappySocks
fonte
Apenas para atualizar os futuros leitores em potencial desta resposta, o MongoDB compacta atualmente, portanto, nomes longos de campos não são mais um problema.
Hubro 26/02