[firebase-br] SQL Elegante

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


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





Mais detalhes sobre a lista de discussão lista