Padrões para Banco de Dados
Normas gerais
- Use letras maiúsculas para palavras reservadas (sintaxe) SQL.
- Use letras minúsculas para elementos de negócio (particulares do projeto em desenvolvimento):
- elimina a dúvida sobre qual a "caixa" correta assim como outros erros relacionados.
- aumenta a velocidade de escrita e exatidão.
- diferencia nomes de tabelas e campos da sintaxe com caixa alta do SQL.
- Separe palavras e prefixos com "_" (underline), nunca use espaços.
- melhora legibilidade (ex: nome_livro).
- evita a necessidade de envolver nomes com colchetes (ex: [nome livro] ou 'nome livro').
- maior independência de plataforma.
- Procure identar os comandos SQL, principalmente se os mesmos forem extensos.
- Melhora a legibilidade do código
Exemplo sem identação:
SELECT filial_id, produto_id, pro_descricao, pro_valor_unitario FROM produto WHERE filial_id = 2
AND pro_valor_unitario > 100;
Exemplo com identação:
SELECT filial_id, produto_id, pro_descricao, pro_valor_unitario
FROM produto
WHERE filial_id = 2
AND pro_valor_unitario > 100;
Tabelas
- Escolha nomes sem ambiguidade, curtos, não usando mais que duas palavras.
- distingue tabelas facilmente;
- facilita nomear campos únicos assim como tabelas de metadados.
- Use nomes no singular, nunca plural.
- promove consistência com a nomenclatura de campos de chave primárias e tabelas de metadados;
- garante ordenação alfabética de uma tabela antes de suas tabelas de metadados ou relacionadas;
- evita confusão de regras de plural do português ou inglês;
- estrutura SQL mais "gramatical" (ex: SELECT activity.activity_name --ao invés de-- SELECT activities.activity_name).
- Evite nomes com acrônimos, abreviados ou concatenados.
- provê arquitetura auto-documentável;
- facilita a leitura e o entendimento, tanto para desenvolvedores quanto para não-desenvolvedores.
- Prefixe as tabelas de metadados (lookup tables) com o nome das tabelas a que elas se relacionam.
- agrupa tabelas relacionadas (ex: activity_status, activity_type, etc);
- evita conflitos de nomes de tabelas de metadados de diferentes entidades.
- Para uma tabela associativa (n:n), concatene o nome das duas tabelas envolvidas:
- expressa o propósito de composição da tabela;
- esta regra não se aplica quando houver mais de uma tabela associativa para as mesmas entidades originais.
- Crie comentários para a tabela e para as colunas:
- facilita a compreensão do propósito da tabela;
- explica o conteúdo presente em uma coluna.
Campos/Colunas
- A chave primária deve ter o nome da tabela com o prefixo "pk_".
- permite que a chave primária seja deduzida ou lembrada a partir apenas do nome da tabela (ex: chave primária da tabela "produto" seria "pk_produto".
- consistência com o nome da chave primária.
- evita a necessidade de usar apelidos (alias) na programação.
- para tabelas que possuem mais de um campo compondo a chave primária, essa regra não se aplica, sendo que os campos poderão continuar tendo o prefixo "pk_", porém o nome que sucede o prefixo "Pk_" terá que ser outro diferente do nome da tabela. Ex: tabela "imobilizado", PK = pk_patrimonio + pk_ano;
- quando a chave primária é composta por campos FK, os mesmos permanecerão com os nomes dos campos PK das tabelas relacionadas. Ex: tabela "item_nota_fiscal", a PK seria pk_nota_fiscal e pk_item_nota_fiscal, onde o campo pk_nota_fiscal é a FK que vem de outra tabela e o campo pk_item_nota_fiscal é da própria tabela em questão, e ambos juntos formam a PK
- Chaves estrangeiras devem ter o mesmo nome das chaves primárias às quais elas se referem.
- faz com que as tabelas às quais elas se referem fique óbvio;
- se houver múltiplas chaves estrangeiras se referenciando a uma mesma tabela, prefixe o campo da chave estrangeira com um nome descritivo apropriado (adjetivo_nome_campo, ex: fk_titular_funcionario_id, fk_substituto_funcionario).
Restrições (Constraints)
- O nome da chave primária deverá ser formado pelo nome da tabela, acrescido do sufixo _pkey. (Ex: tabela "reserva_sala", chave "reserva_sala_pkey").
- O nome das chaves estrangeiras deverão ser formados pelo nome da tabela + o sufixo _fknn, onde 'nn' é um sequencia começando em '01'. (Ex: reserva_sala_fk01).
- O objetivo de nomear as chaves estrangeiras em sequência é simplificar a escrita.
Índices
- O nome de um índice deverá ser formado pelo nome da tabela + campo indexado + sufixo _idx. (Ex: ocorrencia_servico_id_idx).