[firebase-br] RES: Chave Primaria de Tabela

Marcelo Moreira marcelo em easysistemasmg.com.br
Qua Abr 11 09:40:46 -03 2007


Xará,

É o que você disse é melhor perder um pouco de tempo agora que ter uma
tremenda dor de cabeça lá na frente e como minha suposta tabela de TELEFONE
vai conter um numero muito, mas muito grande de registros mesmo, vale a
preocupação.
Muito obrigado pela atenção você me ajudou bastante.
Um abraço e até a próxima.




-----Mensagem original-----
De: Marcelo Silva [mailto:marcvan em ig.com.br] 
Enviada em: quarta-feira, 11 de abril de 2007 09:27
Para: marcelo em easysistemasmg.com.br
Assunto: Re: [firebase-br] Chave Primaria de Tabela

Entendi... neste caso entendo que se deve deixar o DDD separado pois quando 
o fulano entrar com o telefone vc pode fazer uma pesquisa e dizer que aquele

numero existe e mostrar se é do mesmo estado ou nao :)

O que funcionaria mesmo com o Like ou Containing... mas ae fica a seu 
criterio pela praticidade no seu desenvolvimento.

Quando a trabalhar com chaves compostas... eu particularmente nao gosto (mas

as vezes se faz necessario).
Mas isso nao significa que nao seja bom :)
Se fizer as amarracoes direitinho nao tera problemas
Quanto ao desempenho nao irá notar diferenca.
Dizem que trabalhar com PrimaryKey INTEGER é mais rapido, pelo que ja lí é 
sim mas, isso vc só ira notar se sua tabela tiver com mais de 1.000.000 de 
registros
Entao se uma chave composta for certa pra vc use-a.
Mas lembre-se se criar uma chave composta DDD+TELEFONE vc nao precisa da 
COD_TEL primarykey

Ainda persisto, se vai criar uma composta DDD+TELEFONE entao é melhor cria 
um campo Char de 10 com uniquekey pois vc será obrigado a colocar os 10 
digitos
Normalmente se cria Chave composta numa tabela onde vc tera campos 
diretamente relacionados a tabela MAE

Ex.
PEDIDOS

COD_SEQ INTEGER NOT NULL - primary-key
NUM_PED CHAR(6) NOT BULL - unique-key (ou poderia ser a unique-key dexei 
assim porque as vezes temos numero de pedidos em varchar ou char ex. A00001 
e/ou B00001)

ITENS

NUM_PED CHAR(6)
COD_PROD VARCHAR(12)

Chave composta em ITENS "NUM_PED + COD_PROD" veja que NUM_PED esta 
diretamente relacionada aos pedidos que por sua vez nao pode ter o mesmo 
item duas vezes no mesmo pedido (salvo quando quisermos)

Se que o simples fato de pensar em uma "tabelinha" de telefones leva alguns 
dias pra decidir quais serao as melhores opcoes de estrutura, por isso 
coloquei varias dicas, perde-se um tempo no inicio e ganha-se tranquilidade 
depois :)


------------------------------------------
Marcelo Silva
msn: marcvan em ig.com.br
11 6723-3106 - TB
11 9693-4251 - CL
------------------------------------------




----- Original Message ----- 
From: "Marcelo Moreira" <marcelo em easysistemasmg.com.br>
To: "'Marcelo Silva'" <marcvan em ig.com.br>; <lista em firebase.com.br>
Sent: Wednesday, April 11, 2007 9:00 AM
Subject: RES: [firebase-br] Chave Primaria de Tabela


Xará

Eu entendi sua explicação mas veja bem no meu caso eu não posso permitir em
hipótese alguma um telefone em duplicidade porque como meu sistema esta
ligado há uma central telefônica assim que o sistema recebe este numero da
central telefônica (DDD + Numero do Telefone) ele deve me retornar no Banco
de Dados um Cadastro de Cliente e se ele encontrar mais de um vai matar a
lógica do sistema.


Só uma duvida, quanto a trabalhar com chaves compostas isso pode afetar em
alguma coisa no desempenho do banco de dados?

Fico no aguardo.

Obrigado!

-----Mensagem original-----
De: Marcelo Silva [mailto:marcvan em ig.com.br]
Enviada em: quarta-feira, 11 de abril de 2007 08:55
Para: marcelo em easysistemasmg.com.br
Assunto: Re: [firebase-br] Chave Primaria de Tabela

Tanto faz se vc manter fora ou nao, pois o SQL tem recursos para destrinchar

uma string

SELECT * FROM TELEFONE WHERE (TELEFONE LIKE '11%')

SELECT * FROM TELEFONE  WHERE (TELEFONE STARTING '11')

SELECT * FROM TELEFONE  WHERE (TELEFONE CONTAINING '11') <- equivale ao like

%string%

Se criar DDD separado ae tera que criar uma chave composta para nao repetir

Ex.

11 69627390
11 69194251
21 69627390

Perceba que o DDD é diferente mas os Telefones se repetem em outro LOCAL por

isso aconselho deixar juntos

Tem tambem uma caso citado por um colega da lista, onde vc pode ter clientes

diferentes com o mesmo telefone (Pessoas da mesma familia) neste caso voce
nem pode criar uma Forekey tera que criar um Unique composto (nao sei se da)

com o campo TELEFONE e ID_CONTATO

* mas pra tudo tem um jeito :)

------------------------------------------
Marcelo Silva
msn: marcvan em ig.com.br
11 6723-3106 - TB
11 9693-4251 - CL
------------------------------------------


----- Original Message ----- 
From: "Marcelo Moreira" <marcelo em easysistemasmg.com.br>
To: "'Marcelo Silva'" <marcvan em ig.com.br>
Cc: <lista em firebase.com.br>
Sent: Tuesday, April 10, 2007 5:48 PM
Subject: RES: [firebase-br] Chave Primaria de Tabela


Marcelo,

Depois de conversar com algumas pessoas a sua proposta seria a mais indicada
mesmo ... a única coisa que vou ter que manter é o DDD separado do texto do
telefone ... Fora isso, acredito que estou no caminho certo.

Valew pela atenção.

Um abraço.

-----Mensagem original-----
De: Marcelo Silva [mailto:marcvan em ig.com.br]
Enviada em: terça-feira, 10 de abril de 2007 15:32
Para: marcelo em easysistemasmg.com.br; FireBase
Assunto: Re: [firebase-br] Chave Primaria de Tabela

Eu criaria assim


CREATE TABLE TELEFONE (

    COD_TEL INTEGER NOT NULL, <- CHAVE PRIMARIA É UM SEQUENCIAL

    TELEFONE VARCHAR(10) NOT NULL, <- UM TELEFONE TERA 10 DIGITOS 1169627390

    ID_CONTATO INTEGER, <- AQUI DEVE SER A FOREKEY

    TELEFONE_TIPO VARCHAR(15)) <- DESCRICAO DE TIPO


Depois faria uma chave Unique Key no campo TELEFONE


Quanto ao campo TELEFONE estar com 10 digitos tudo junto eu prefiro, pois na

hora de colocar a mascara vc nao sofre

1169627390 -> FormatMask -> (11) 6962-7390


------------------------------------------
Marcelo Silva
msn: marcvan em ig.com.br
11 6723-3106 - TB
11 9693-4251 - CL
------------------------------------------





----- Original Message ----- 
From: "Marcelo Moreira" <marcelo em easysistemasmg.com.br>
To: <lista em firebase.com.br>
Sent: Tuesday, April 10, 2007 2:50 PM
Subject: [firebase-br] Chave Primaria de Tabela


Pessoal,

Boa tarde!



Meu Cadastro de Cliente hoje é dividido em duas tabelas: CLIENTE e outra
tabela CONTATO

Na tabela CONTATO eu tenho três campos para guardar Telefone dos Contatos
mas estou tendo problema pois estou vendo a necessidade de poder cadastrar
mais Números de Telefones pois a maior parte dos Clientes que trabalham com
meu sistema fazem a busca dos seus Cliente cadastrados no Sistema através do
Numero do Telefone.

Então estou pensando em criar uma terceira tabela TELEFONE e fazer o
relacionamento com a tabela CONTATO para que eu não fique limitado a
quantidade de Telefone por Contato.

Uma coisa extremamente importante é que não pode em hipótese alguma ter
numero de telefone repetido então pensei em criar a tabela tendo como Chave
Única o DDD e o Número do Telefone, ficaria mais ou menos assim:





CREATE TABLE TELEFONE (

    DDD CHAR(2) NOT NULL,

    TELEFONE VARCHAR(9) NOT NULL,

    ID_CONTATO INTEGER,

    TELEFONE_TIPO VARCHAR(15))







alter table TELEFONE

add constraint PK_TELEFONE

primary key (DDD,TELEFONE)





Outro detalhe importante é que meu Sistema trabalha Conectado há Centrais
Telefonicas entao quando entra uma Ligação o Sistema recebe o numero da
Central Telefônica e faz uma busca no Banco de Dados procurando pelo numero
então preciso que esta Busca seja bem rápida pois na maioria dos Clientes o
Telefone toca o dia todo.



Gostaria de pedir a opinião dos colegas,  este seria um bom caminho há
seguir?



Fico no agurdo.



Um abraço,







Marcelo Moreira



* marcelo em easysistemasmg.com.br

* (31) 9165-9616
*(31) 3334-5139
MSN: easysuporte em terra.com.br

Skype: EasySistemas



Easy Sistemas

www.easysistemasmg.com.br





Antes de IMPRIMIR,  pense em sua responsabilidade e compromisso com o MEIO
AMBIENTE




-- 
No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.5.446 / Virus Database: 269.0.0/754 - Release Date: 9/4/2007
22:59

______________________________________________
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.5.446 / Virus Database: 269.0.0/754 - Release Date: 9/4/2007
22:59


-- 
No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.5.446 / Virus Database: 269.0.0/754 - Release Date: 9/4/2007
22:59



-- 
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.5.446 / Virus Database: 269.2.0/756 - Release Date: 10/4/2007
22:44


-- 
No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.5.446 / Virus Database: 269.2.0/756 - Release Date: 10/4/2007
22:44



-- 
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.5.446 / Virus Database: 269.2.0/756 - Release Date: 10/4/2007
22:44
 

-- 
No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.5.446 / Virus Database: 269.2.0/756 - Release Date: 10/4/2007
22:44
 





Mais detalhes sobre a lista de discussão lista