Skip to content

Instantly share code, notes, and snippets.

@emersonmx
Last active May 6, 2020 18:37
Show Gist options
  • Save emersonmx/7a24e5ba69140fd40e4e504319d034f2 to your computer and use it in GitHub Desktop.
Save emersonmx/7a24e5ba69140fd40e4e504319d034f2 to your computer and use it in GitHub Desktop.

Dicas e Boas práticas

Esse documento busca apresentar boas práticas ou sugestões para deixar a implementação de um projeto mais agradável.

Banco de dados

Um banco de dados guarda dados e não regras de negócio.

Colocar regras de negócio no banco é trêta. Pra corromper os dados por causa de uma procedure/trigger mais feita é daqui prali.

Não importa se é mais correto. Sempre crie uma coluna de id pra chave primária.

Nem toda implementação de ORM se dá muito bem com chave primária composta, então é bom evitar.

Uma coluna no banco que pode ser null, pode indicar a necessidade de criação de uma nova tabela de relação.

Chave estrangeira para um registros da mesma tabela. Quase sempre você vai querer associar mais informações (data de criação, quem associou, configurações diversas, etc). E isso vai sujar a tabela com uma ruma de coluna null, então criar uma tabela de relação é mais interessante.

Se uma informação não tiver valor numa busca, quase sempre ela pode ser colocada numa coluna json.

Numa tabela de postagens de um blog, se for pedido para adicionar uma coluna de css ou javascript, pode ser melhor colocar uma coluna json.

Uma relação MxN pode ser usada para representar uma relação 1x1 sem precisar mexer na estrutura das tabelas relacionadas.

Dada uma tabela subscriptions e outra de bills, pode ser criada uma tabela bill_subscription para representar uma relação 1x1 sem precisar mexer na estrutura das relações. A restrição de 1x1 pode ser feita via código.

Prefira criar migrations ao invés de seeds quando for inserir dados permantentes no banco.

Seeds são usadas para inicializar o banco com dados de testes. Então usar uma seed em produção pode ser algo tretoso e sem sentido. Você quer dados de testes em produção? E se eu quiser desfazer, eu crio uma seed pra desfazer? A seed já foi rodada?

Esses problemas seriam resolvidos com migrations!

  • Elas são executadas apenas uma vez
  • Você sabe quando ela foi rodada
  • Você pode desfazer as modificações que foram feita no banco
  • Espera-se que as modificações da migrations seja algo final/produção

Segue alguns casos que é melhor criar uma migration ao invés de uma seed:

  • Criar um usuário padrão (ex.: admin)
  • Criar permissões para usuários
  • Atualizar estrutura das tabelas e migrar os dados para outras colunas/tabelas

Código

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment