[firebase-br] SQL Elegante

Magnun Oliveira magnun_magnun em hotmail.com
Qui Jul 20 15:50:13 -03 2006


eu nao falei q ele esta certo ou errado. so disse q mt nao seguem o padrao q 
ele postou como sendo o correto. eu uso este padrao q citei, mt fazem como 
eu, acho q eh fundamental ter um codigo limpo pois estou fazendo uns 
programas complexos aki na empresa e se eu nao seguisse algum padrao eu 
estaria lascado.

soh acho errado falar que o meu jeito é o certo e o seu é errado. entendeu 
agora?

quanto a performance vc tem certeza?

porque ele citou:

> >where
> >   vd.cliente = c.id and
> >   vd.produto = p.id and
> >   vc.vendedor = v.id

creio q se utilizar joins a performance aumentará, correto?

>From: "Bruno Ribeiro" <brunohanukah em gironight.com.br>
>Reply-To: FireBase <lista em firebase.com.br>
>To: "FireBase" <lista em firebase.com.br>
>Subject: Re: [firebase-br] SQL Elegante
>Date: Thu, 20 Jul 2006 15:40:26 -0300
>
>Caro Magno,
>
>    A elegância dos projetos são muitos útil na hora de fazer manutenção, e
>também ajuda bastante na perfomance, quando se padroniza a escrita SLQ.
>
>    Caso vc queira que ninguém mexa nos seus projetos, aí sim eu concordo,
>que vc está trabalhando não para a empresa, mas para benefícios próprios.
>
>Tudo o que o nosso colega Fransico descreveu está correto, e sem 
>conhece-lo,
>faço tudo o que ele descreveu no projeto aonde estou alocado.
>
>   A elegância tem haver com o nível de organização do profissional, isto é
>em qualquer área de atuação.
>
>           Bruno F. Ribeiro
>          www.bfribeiro.net
>     Borland Delphi Developer
>         Java JEE Developer
>
>
>
>----- 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
>
>
>______________________________________________
>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 Hotmail, o maior webmail do Brasil. http://www.hotmail.com





Mais detalhes sobre a lista de discussão lista