neotheone 0 Denunciar post Postado Julho 12, 2008 Gostaria de saber qual consulta seria mais rapida: Exemplo: Imaginem 3 tabelas no banco: tabela_Pais, tabela_Estados, tabela_Clientes tabela_Pais id_pais - pais 1 - Brasil 2 - Estados Unidos 3 - Inglaterra ------------------------------------------------------------ tabela_Estados id_estado - estado 1 - Rio de Janeiro 2 - Florida 3 - Londres ------------------------------------------------------------ tabela_Clientes id_cliente - nome - endereco - telefone - estado - pais 1 - Felipe - endereco x - telefone - 1 - 1 ----------------------------------------------------------- tabela_Clientes2 id_cliente - nome - endereco - telefone - estado - pais 1 - Felipe - endereco x - telefone - brasil - rio de janeiro Como vocês podem notar eu gravo o id de estado e o id pais na minha tabela clientes. Quando eu for dar um select na tabela cliente eu terei que dar pelo menos 2 left join na tabela PAIS e na tabela ESTADOS concordam comigo? pois terei que trazer o nome do pais e o nome do estado. Eu poderia também gravar na tabela o nome logo do pais e do estado, aí ele nao precisaria dar left join nas outras tabelas pra trazer o nome. Entao minha pergunta seria, qual das 2 consultas retornaria o resultado mais rapido? E em questao de modelagem qual é a forma mais correta de se fazer? Compartilhar este post Link para o post Compartilhar em outros sites
ska_ska 0 Denunciar post Postado Julho 13, 2008 em bd 2 coisas influenciam para definir o que é melhor para se usar: custo e velocidade. o mais rápido, com certeza, será utilizar a informacao direta em uma unica tabela armazenando o nome. O custo também é menor, pois nao será necessário fazer um JOIN para obter a informacao. O problema de usar esse tipo de armazenamento, é a questao da normalizacao dos dados (a modelagem que você cita). O problema da normalizacao é justamento o custo que isso dá ao banco na hora de retornar um valor. Mas atualmente, um custo maior é muito mais facil contornar (atraves de otimizacoes e melhorias do engine do BD e de HW do server) do que se deparar com problemas posteriores que possam ocorrem com atualizacoes de dados nao normalizados ou até mesmo resgatar uma informacao. No seu caso, as tabelas sao pequenas (cidade, pais, estado). Otimizacoes de indices e estatísticas atualizadas para ajudar no plano de execucao já melhoriam a velocidade do JOIN e diminuiria o custo, tornando a opcao aceitavel, e a olho nú, praticamente igual em velocidade. Existem casos raros, em um ambiente OLTP, que se desnormaliza a informacao, porém, pelo que vi, no seu caso 100% de chance de não ser um deles. Uma dica: mantenha normalizado (com códigos na tabelas principal) Abs SkA Compartilhar este post Link para o post Compartilhar em outros sites
NaPraia 12 Denunciar post Postado Julho 14, 2008 No seu caso, as tabelas sao pequenas (cidade, pais, estado)justamente, essas são tabelas pequenas e não interferem quase na performance da consulta.E é bem mais prático ter essas tabelas em separado, pois pode ser que precise desses dados para fazer relação com alguma outra tabela, como tu disse que está usando a tabela CLIENTE2. Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Julho 14, 2008 A pessoa que inventou a 'modelagem' se esquece do fato de q nao eh necessario uma bazuca pra matar uma formiga. Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Julho 15, 2008 se está lidando com varios países é melhor separar a tabela de estados brazil_provincies usa_provincies mexico_provincies etc... Compartilhar este post Link para o post Compartilhar em outros sites
Mário Monteiro 179 Denunciar post Postado Julho 15, 2008 se está lidando com varios países é melhor separar a tabela de estados brazil_provincies usa_provincies mexico_provincies etc... Qual seria a vantagem de criar varias tabelas semelhantes ? Um pouco de performance... mas se forem todos os paises seram quantas tabelas? cada uma com poucos registros... Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Julho 17, 2008 na verdade nao precisa de banco de dados particularmente faço em arquivos exemlpos: paises.php <?php function country( $n = '' ){ $x[0] = "Afghanistan"; $x[1] = "Albania"; $x[2] = "Algeria"; $x[3] = "American Samoa"; $x[4] = "Andorra"; $x[5] = "Angola"; $x[6] = "Anguilla"; $x[7] = "Antigua and Barbuda"; $x[8] = "Argentina"; $x[9] = "Armenia"; $x[10] = "Aruba"; $x[11] = "Ascension Island"; ... idiomas /* 1 - ASIA 2 - AFRICA 3 - OCEANIA 4 - EUROPA 5 - NORTH AMERICA (CARIBE) 6 - CENTRAL AMERICA 7 - NORTH AMERICA 8 - OCEAN ATLANTIC 9 - SOUTH AMERICA */ function languages( $n = '' ){ $x[0] = "Pashtu, Afghan Persian, local dialects"; //Afghanistan (1) $x[1] = "Albanian, Greek"; //Albania (4) $x[2] = "Arabic, French and other dialects"; //Algeria (2) $x[3] = "Samoan, English"; //American Samoa (3) $x[4] = "Catalan, French"; //Andorra (4) $x[5] = "Portuguese, Bantu and varied African dialects"; //Angola (2) $x[6] = "English"; //Anguilla (5) $x[7] = "English, local dialects"; //Antigua and Barbuda (5) $x[8] = "Spanish, English, Italian, German, French"; //Argentina (9) $x[9] = "Armenian, Russian"; //Armenia (4) ... provincies_japan function regionsProvinces( $n = '' ){ $rs = array( 1 => array(1 => '北海道') ,2 => array(2 => '青森県' , 3 => '岩手県' , 4 => '宮城県' , 5 => '秋田県' , 6 => '山形県' , 7 => '福島県') ,3 => array(8 => '茨城県' , 9 => '栃木県' , 10 => '群馬県') ,4 => array(11 => '埼玉県' , 12 => '千葉県' , 13 => '東京都' , 14 => '神奈川県') ,5 => array(19 => '山梨県' países relativamente grande são divididos em regiões e províncias "estados" outros países pequenos nao possuem estados, apenas regiões, outros possuem estados e nao possuem regiões.. outros nao tem nada.. por isso é melhor separar. lista completa de países e idiomas www.worldatlas.com Compartilhar este post Link para o post Compartilhar em outros sites