[firebase-br] RES: RES: SQL Elegante
Marcelo Durães da Silva
marceloduraes em terra.com.br
Ter Jul 25 13:28:28 -03 2006
Outra Justificativa para não utilizar CPF é o caso e ter clientes (Fazendas)
de mesmo proprietário, todas as fazendas tem de estar relacionadas ao CPF do
proprietário e uma identificação de Propriedade Rural.
Sendo assim teria no seu cadastro varios clientes (Fazendas com o mesmo
CPF).
Sds,
Marcelo Durães da Silva
-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Eduardo Jedliczka (TeamFB)
Enviada em: quinta-feira, 20 de julho de 2006 18:21
Para: FireBase
Assunto: Re: [firebase-br] RES: SQL Elegante
Há outros motivos para não se utilizar CPF como índice único ou chave:
- Crianças menores de 14 anos podem utilizar o CPF dos Pais (ou responsável)
na abertura de conta corrente ou poupança.
- A esposa pode, em alguns casos previstos por lei, utilizar normalmente o
CPF do esposo, sem que ela tenha necessidade do documento. Antigamente a
declaração de imposto de renda conjunta valia-se desta possibilidade
(atualmente a declaração pergunta o CPF do declarante e é facultativo o
preenchimento do CPF do cônjuge)
Apesar deste assunto ser interessante, acredito que ele seja muito pouco
produtivo. Cada empresa e/ou instituição de ensino, acaba criando um padrão
próprio para nomenclatura de Campos e Tabelas, isto tem a ver com valores e
experiências pessoais ou limitação imposta pelas ferramentas (aplicativos e
linguagens) utilizados. Após esta definição, não existe certo ou errado,
existe apenas "padrão diferente" e "sem-padrão".
======================
Eduardo Jedliczka
Membro do TeamFB - FireBase
Apucarana - PR
======================
----- Original Message -----
From: "Jorge Luis Bublitz" <bublitz em tre-mt.gov.br>
To: "'FireBase'" <lista em firebase.com.br>
Sent: Thursday, July 20, 2006 5:31 PM
Subject: [firebase-br] RES: SQL Elegante
Só um comentário:
Nunca usem CPF para chave primária, não pelo fato de ser string, mas sim
porque estrangeiros não necessariamente tem CPF. É opcional para eles.
[]s,
Jorge Luis Bublitz
Analista Desenvolvedor
"O todo sem a parte não é todo,
A parte sem o todo não é parte,
Mas se a parte faz parte do todo, sendo parte,
Não se diga que é parte, sendo todo."
-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Marcelo Silva
Enviada em: quinta-feira, 20 de julho de 2006 15:22
Para: FireBase
Assunto: 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
--
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.1.394 / Virus Database: 268.10.2/393 - Release Date: 19/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
______________________________________________
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
Mais detalhes sobre a lista de discussão lista