[firebase-br] SQL Elegante

Otto Fuchshuber ottofuch em terra.com.br
Qui Jul 20 21:35:06 -03 2006


Best Practices, é esse o nome em inglês.
Como em Java Database Best Practices (George Reese, Oreilly, 2003) ou em
Ado Examples and Best Practices (William R. Vaughn, Apress, 2000).
São sugestões ou recomendações, mas nada imposito.
Ninguém vai para o inferno se não as seguir. A notação hungara é outro
exemplo, como em
Edit = edt, Label = lbl, ,Button = btn apresentado por um colega.
Não vale a pena começar uma guerra santa.
[]´s
Otto

----- Original Message ----- 
From: "Marcelo Silva" <marcvan em ig.com.br>
To: "FireBase" <lista em firebase.com.br>
Sent: Thursday, July 20, 2006 4:22 PM
Subject: Re: [firebase-br] SQL Elegante


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



______________________________________________
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

Esta mensagem foi verificada pelo E-mail Protegido Terra.
Scan engine: McAfee VirusScan / Atualizado em 20/07/2006 / Versão:
4.4.00/4811
Proteja o seu e-mail Terra: http://mail.terra.com.br/








Mais detalhes sobre a lista de discussão lista