Qual a nomeclatura certa pra banco de dados??? Ou a melhor....
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
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
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
comentários (0)
suspender
Lista de Respostas:
27/08/2010 5:49pm
(~14 anos atrás)
(~14 anos atrás)
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.
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.
27/08/2010 8:22pm
(~14 anos atrás)
(~14 anos atrás)
Grande Marcos...
Po, se ele permitir coloca sim pra gente... gostaria de ver!!!! =D
Po, se ele permitir coloca sim pra gente... gostaria de ver!!!! =D
30/08/2010 11:05am
(~14 anos atrás)
(~14 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)
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)
09/11/2010 2:50pm
(~14 anos atrás)
(~14 anos atrás)
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!