0

Qual a nomeclatura certa pra banco de dados??? Ou a melhor....

criado por Ricardo Gama em 26/08/2010 3:35pm
Então galera, uma pergunta que sempre fica na minha cabeça: Qual a melhor nomeclatura pra banco de dados??? As perguntas que ficam sempre são essas:

1 - Nome de tabela é no plural ou no singular?!?!?!
Eu penso: No singular. Foi como eu aprendi na faculdade e depois com um DBA de uma empresa que eu trabalhei. Porém, já vi frameworks, como o cakePHP, obrigar vc a colocar o nome da tabela no plural... e aí???

2 - o nome dos campos da tabela precisam terminar com o nome da tabela
Ex.:
tabela usuario
campos:
nome_usuario
email_usuario
e etc...

E as chaves estrageiras teriam o nome da chave primária dela, mas o nome da tabela em que ela está. Vamos imaginar o seguinte cenário: Tenho a tabela usuário. Todo usário é ligado a um setor:

campos da tabela usuario:
id_usuario
nome_usuario
email_usuario
id_setor_usuario

campos da tabela setor:
id_setor
nome_setor

Dessa forma olhando pra chave estrageira, sei que se trata da tabela setor que tem uma ligação na tabela usuario

Eu sempre usei assim. Aprendi tbm na faculdade e tbm com o DBA que esse seria o correto. Defendo esse jeito por um simples motivo: Vamos supor que eu tenha que fazer um join

SELECT nome_usuario, nome_setor
FROM usuario
JOIN setor ON id_setor_usuario = id_setor

Eu usando a nomeclatura dessa forma, eu consigo me livrar de fazer um alias (usuario.nome_usuario, setor.nome_setor... não que isso seja problema... é até bom pra quem vê entender de que tabela se refere) e eu não tenho redundâncias em nome.

Na atual empresa que eu estou, o analista aqui deu um chilique por causa da forma que eu fazia. Então segui o padrão dele

Campos da tabela usuario
id_usuario
nome
email
id_setor_fk

campos da tabela setor
id_setor
nome

isso me traz 2 coisas a mais pra fazer:
1 - fazer o alias (pra não dar redundância. Reitero que isso não seria problema)
2 - eu tenho que renomear os campo com o AS pq senão a variável no PHP vão ter o mesmo nome (isso é chato pacas)

Logo meu select ficaria da seguinte forma:

SELECT usuario.nome AS nome_usuario, setor.nome AS nome_setor
FROM usuario
JOIN setor ON usuario.id_setor_fk = setor.id_setor

Se eu não renomeasse, eu teria 2 $rows['nome']... impossível né???

Não sei qual seria o custo disso pro banco, em ter que renomear e tal... mas sei o custo pra mim... rs... numa consulta grande, pode ficar mais chato...

Da primeira forma citada, é meio que impossível vc ter redundância de nomes!!!!

Enfim... espero que vcs tenham entendido o que eu quero passar, e gostaria da opinião dos mais experientes!!!!

Abcs, Rico

Lista de Respostas:

0
27/08/2010 2:33pm
(~8 anos atrás)
Ricardo Gama respondeu:
E aí galera??? Vamos debater =D

0
27/08/2010 5:49pm
(~8 anos atrás)
Marcos Regis respondeu:
Rico, há vários padrões de nomenclatura.
Algumas coisas interferem no padrão a ser usado.
Por exemplo: Se você usa mapeamento Objeto Relacional que puxa os atributos da base de dados de forma automática seria interessante que o nome do atributo fosse o mais simples possível, como no seu exemplo.
Eu uso um formato bem diferente que aprendi com um DBA muito bom mas ele é um pouco extenso pra colocar aqui.
Se ele me permitir publicar o documento coloco no meu blog ou num artigo aqui no PHP Brasil.
Pra dar apenas uma pincelada de como é:

NOMEDATABELA O nome da tabela é todo junto, sem separadores de tipo algum
NOMEDATABELA_ID - O campo de chave primaria é sempre o nome da tabela seguido de _ID

NOMEDATABELA_DT_DATANASCIMENTO - Os campos que não são chaves primaria comecam com o nome da tabela seguido de _TIPO_DE_DADO_ e completando com o nome do campo sem separadores

PK_NOMEDATABELA_ID - Os nomes de chaves primarias comecam com PK_
IX_NOMEDATABELA_01 - OS demais indices comecam com IX e se diferenciam entre si pelo numero ao final
e assim vai.

0
27/08/2010 8:22pm
(~8 anos atrás)
Ricardo Gama respondeu:
Grande Marcos...
Po, se ele permitir coloca sim pra gente... gostaria de ver!!!! =D

0
30/08/2010 11:05am
(~8 anos atrás)
Para mim:
1 - Tabelas no Singular
Exemplo: cliente

2 - Coloco no nome dos campos que dos campos a "sigla" da tabela no começo.
Exemplo: cli_nome

Teste 01: SELECT * FROM cliente WHERE cli_nome = "Carlos";
Teste 02: SELECT usuario.usu_nome, setor.set_nome FROM usuario JOIN setor ON usuario.usu_id = setor.set_id;


########## DÚVIDA ###########
isso me traz 2 coisas a mais pra fazer:
1 - fazer o alias (pra não dar redundância. Reitero que isso não seria problema)
2 - eu tenho que renomear os campo com o AS pq senão a variável no PHP vão ter o mesmo nome (isso é chato pacas)

Logo meu select ficaria da seguinte forma:

SELECT usuario.nome AS nome_usuario, setor.nome AS nome_setor
FROM usuario
JOIN setor ON usuario.id_setor_fk = setor.id_setor

Se eu não renomeasse, eu teria 2 $rows['nome']... impossível né???
(não vejo possível isso - poderia usar array ao invés de assoc)


0
09/11/2010 2:50pm
(~8 anos atrás)
Leonardo Neves respondeu:
Como dizia meu professor de algoritmo, Variável nós damos o nome que queremos, q nem filho... o mesmo eu aplico para BDs, ou seja, utilizo nomes com o qual eu irei mais tarde ter maior facilidade pra desenvolver meu script!

Nova Resposta:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)