Last modified 9 years ago
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: [account type] ou 'account type').
- maior independência de plataforma.
- Evite usar números.
- Procure identar os comandos SQL, principalmente se os mesmos forem extensos.
- Melhora a legibilidade do código
Exemplo sem identação: SELECT pk_address, fk_contact, location, complement FROM contaccenter_address WHERE fk_address_type = 2 AND country = 'Brazil'; Exemplo com identação: SELECT pk_address, fk_contact, location, complement FROM contaccenter_address WHERE fk_address_type = 2 AND country = 'Brazil';
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 "language" seria "pk_language".
- 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 "config", PK = pk_application + pk_config_name;
- quando a chave primária é composta por campos FK, os mesmos permanecerão com os nomes dos campos PK das tabelas relacionadas. Ex: tabela "application_log", a PK seria pk_application e pk_item_log, onde o campo pk_application é a FK que vem de outra tabela e o campo pk_item_log é 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, sufixe o campo da chave estrangeira com um nome descritivo apropriado (fk_nome_campo_adjetivo, ex: fk_funcionario_titular, fk_funcionario_substituto).
Restrições (Constraints)
- O nome da chave primária deverá ser formado pelo nome da tabela, acrescido do sufixo "_pkey". (Ex: tabela "emailadmin_domains", chave "emailadmin_domains_pkey").
- O nome das chaves estrangeiras deverão ser formados pelo nome da tabela + nome do campo + sufixo "_fkey". (Ex: emailadmin_domains_fk_manager_fkey).
Índices
- O nome de um índice deverá ser formado pelo nome da tabela + campo indexado + sufixo _idx. (Ex: accounts_name_idx).