[firebase-br] SQL Elegante

Marcelo Silva marcvan em ig.com.br
Qui Jul 20 16:22:27 -03 2006


Acho isso uma questão que não dá pra padronizar, mas sim usar de bom senso.

Eu uso nomes pequenos para o SQL ficar mais legível e menos instafante :)

Exemplo

TABELA CLIENTES

COD_CLI
NOME
PESSOA
CPF_CNPJ
FONE_RES
FONE_FAX
FONE_CEL
FONE_REC
PROFISSAO
SEXO
EST_CIV

Um campo com nome ID pra mim seria meio sem sal, haja visto que a chave 
pederia ser o COD_CLI ou CPF (nao recomendado por ser String, mas muitos 
usam :)) e ID não diz nada a meu ver.

Eu gosto de ver nomes que vc bata o olho e logo sabe o que é

Mas uma coisa interessante, em uma empresa que trabalhei eu gostava da 
nomenclatura usada pela empresa, veja

L001 -> CLIENTES
L002 -> FORNECEDORES
ETC..

e os campos com nomes

L001_NOME
L001_CPF_CNPJ
L001_PESSOA
ETC...

Desta forma vc via um select e logo sabia as tabelas relacionadas ali

Assim você pode ter mil tabelas no seu banco e não vai precisar se preocupar 
com repetições de nomes ou similaridades :)
Tenha por base uma banco que tenha as tabelas de Produtos para Compra e 
Produtos para Venda como vc daria esses nomes... seria mais facil usar L500 
e L600 por exemplo.

Ou seja... o lance de nomenclatura na criação do banco deve ser usado de bom 
senso e não se prender a padrões de nomes (que não existem)

Claro algumas dicas sempre são bem vindas, como usar sempre MAIUSCULO no FB 
senão vc vai ter do de cabeça :)

Fica ae minha visão sobre o assunto


----------------------
Marcelo Silva
(11) 9693-4251
(11) 6723-3106 - LESTCRED
MSN: marcvan em ig.com.br


----- Original Message ----- 
From: "Magnun Oliveira" <magnun_magnun em hotmail.com>
To: <lista em firebase.com.br>
Sent: Thursday, July 20, 2006 3:11 PM
Subject: Re: [firebase-br] SQL Elegante


essa historia de elegancia eh meio estranha.

Alguns estudiosos afirmam q o padrao de belesa humana se dah pela rezao de 1
para 1,6.
Seu quixo deve medir 1,6 x o tamanho da sua boca.
Sua boca deve medir 1,6 x o tamanho do seu nariz.
A distancia entre o meio das suas sombrancelhas até a ponta do seu nariz
deve ser 1,6 x a distancia da ponta do seu nariz até o seu labio superior.

Ou seja vc nao tem um rosto, mas sim um poliedro.

Não me entenda mal, eu nao estou querendo zombar da sua quetao, mas goso é
igual a c... cada um tem o seu.

eu particularmente acho q "elegante" é um sql padronizado, não importando se
o cara escreve VENDA ou VENDAS no nome de suas tables, ou seria table?

Mas concordo q se o cara nomeia uma tabela no singular, nomeie todas elas
assim.

Quanto ao id como chave primaria eu discordo, pois uso o "deselegante"
COD_PRO para produtos, COD_CLI para clientes e etc ... até o presente
momento, nao me troxe problemas.
Acho q mts fazem assim pois usam a mesma tecnica de abreviar os nomes de
componentes com 3 letras. ex:
Edit = edt
Label = lbl
Button = btn

T+

>From: "francisco gamarra" <francisco.gamarra em gmail.com>
>Reply-To: FireBase <lista em firebase.com.br>
>To: FireBase <lista em firebase.com.br>
>Subject: [firebase-br] SQL Elegante
>Date: Thu, 20 Jul 2006 14:44:59 -0300
>
>Sou novo na lista mas tenho percebido q,
>nas consultas q o pessoal tem postado
>tenho percebido uma certa "deselegância"
>nos scripts.
>
>Gostaria então de abrir um tópico sobre
>Elegância de SQL no FireBird, Padronização
>em nome de campos de tabelas.
>
>Desta forma o pessoal pode postar opiniões que favoreçam a todos.
>
>* Uma "regra" bastante aceita entre os DBMenager's é a de que toda
>tabela deve ter um campo id, e este campo deve realmente se chamar "id"
>e deve ser o campo chave da tabela.
>* Os campos que não podem se repetir devem utilzar o unique;
>* Chaves compostas nem pensar, use o id e o unique;
>* Outra interessante é toda tabela, com excessão das de cruzamento,
>devem ter um campo nome, q deve ser o principal campo de consultas like.
>* Se a tabela tem apenas um campo de valor, coloque o nome dele de valor
>mesmo, o mesmo serve para data;
>* Abreviações podem complicar. Cuidado com elas.
>* Nome de tables e campos devem ser no singular;
>* Alguns Exemplos de como eu crio minhas tables;
>* Um campo referencial deve ter o mesmo nome da tabela de destino,
>   nada de usar a "deselegância" do "cod_pro" ou "cod_cli" (veja exemplo na
>table venda)
>
>
>create domain id int not null;
>create domain ref int not null default 0;
>create domain nome varchar(30) not null;
>create domain date dete not null default 'now';
>create domain valor numeric(10,2) not null default 0;
>
>create table cliente (
>   id id primary key,
>   nome nome unique,
>   endereco varchar(50),
>   fone varchar(20)
>);
>
>  create table vendedor (
>    id id primary key,
>   nome nome unique
>);
>
>  create table produto (
>   id id primary key,
>   nome nome unique
>);
>
>/* esta é uma table de cruzamento, portanto não utiliza o campo nome*/
>  create table venda (
>   id id primary key,
>    cliente ref references cliente on update cascade on delete cascade,
>    produto ref references produto on update cascade on delete cascade,
>   vendedor ref references vendedor on update cascade on delete cascade,
>   data data,
>   valor valor
>);
>
>//perceba q todas as tabelas se parecem.
>//O interessante é q qdo vc entiver criando uma classe
>//vc vai poder colocar um padrão
>type
>
>   TFBTable = class(TClientDataSet)
>   public
>     property id : integer read GetId write SetId;
>     property nome : string read GetNome write SetNome;
>     property data : TDate read GetData write SetData;
>     property valor : Currency read GetValor write SetValor;
>
>   end;//TFBTable
>
>
>//perceba q fica muito + interessante, vc vai poder tratar todos objetos
>igualemnte
>
>* procure na sua aplicação colocar o nome do seu objeto de conexão (table,
>query ou ClientDataSet)
>o mesmo nome q ele possui no banco
>
>
>procedure p;
>begin
>
>    venda.fieldbyname('cliente').asInteger := cliente.id;
>venda.fieldbyname('produto').asInteger
>:= produto.id;   venda.fieldbyname('venda').asInteger := venda.id;
>
>end;
>
>
>//em uma consulta sql também se torna + legivel
>
>select
>   c.nome cliente,
>   p.nome produto,
>   v.nome vendedor,
>   sum(vd.valor) valor
>from
>   cliente c,
>   produto p,
>   vendedor v,
>   venda vd
>where
>   vd.cliente = c.id and
>   vd.produto = p.id and
>   vc.vendedor = v.id
>group by
>   1,2,3
>
>
>Espero estar ajudando a todos!!!
>Um Abraço
>______________________________________________
>FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>Para editar sua configuração na lista, use o endereço
>http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>Para consultar mensagens antigas: http://firebase.com.br/pesquisa

_________________________________________________________________
MSN Busca: fácil, rápido, direto ao ponto.  http://search.msn.com.br


______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço 
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa



-- 
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.1.394 / Virus Database: 268.10.1/390 - Release Date: 17/07/2006






Mais detalhes sobre a lista de discussão lista