Re: [pgbr-geral] Um registro, vários valores (n ão sei um bom nome pra isso)
2008/7/16 Luigi Castro Cardeles [EMAIL PROTECTED]: Olá, a sua dúvida não é pra restringir a coluna cores a somente esses cinco valores? Não, a dúvida não é *como* restringir a coluna cores a estes cinco valores. O próprio mundo real que o sistema representa já limita isso. São só 5 cores possíveis, então cada carta só poderá ter 5 cores no máximo. Este não é o problema. O problema é como represento isso. Gostaria de ter tabelas mais ou menos assim: Nome da Carta | Cores da carta Teste 1| Branco Teste 2| Branco, Azul Teste 3| Preto, Verde, Branco Teste 4| Branco, Azul, Preto, Vermelho, Verde Teste 5| Onde este Teste 5 fosse uma carta que não tem cor, o que também é possível. Creio que isto possa ser encarado como tags, etiquetas, como as que exitem nos blogs, no flikr e no del.icio.us. Na minha primeira mensagem eu descrevi como fiz até agora, mas nem sei se o modelo que utilizei foi o ideal. -- Humberto Xis [EMAIL PROTECTED] http://xisberto.blogspot.com http://ostelematicos.blogspot.com Sur la tuta tero estis unu lingvo kaj unu parlomaniero. - Gn 11,1 ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Um registro, vários valores (n ão sei um bom nome pra isso)
2008/7/18 Xisberto [EMAIL PROTECTED]: Não, a dúvida não é *como* restringir a coluna cores a estes cinco valores. O próprio mundo real que o sistema representa já limita isso. São só 5 cores possíveis, então cada carta só poderá ter 5 cores no máximo. Este não é o problema. Agora ficou mais claro. O problema é como represento isso. Gostaria de ter tabelas mais ou menos assim: Nome da Carta | Cores da carta Teste 1| Branco Teste 2| Branco, Azul Teste 3| Preto, Verde, Branco Teste 4| Branco, Azul, Preto, Vermelho, Verde Teste 5| Veja, esse pode ser um relatório, mas não é uma boa modelagem. Não que seja impossível ou proibido, mas o uso de vários valores numa tupla dificulta a manipulação e torna a consistência declarativa praticamente impossível. Na minha primeira mensagem eu descrevi como fiz até agora, mas nem sei se o modelo que utilizei foi o ideal. A idéia, que me lembre, foi correta: um cadastro de cartas, outro de cores, e uma relação intermediária relacionando cartas e cores n:m. Assim, no teu exemplo acima, a carta 1 teria uma tupla nessa relação intermediária, a 4 teria cinco, e a 5 nenhuma. Só questiono o uso de identificadores artificiais como chaves, sendo que há chaves naturais perfeitamente boas; e o esquema de internacionalização. -- skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra +55 (11) 3040 7300 r155 gTalk: xmpp:[EMAIL PROTECTED] +55 (11) 9406 7191 ICQ/AIM: aim:GoIM?screenname=61287803 +55 (11) 5685 2219 MSN: msnim:[EMAIL PROTECTED] ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Um registro, vários valores (n ão sei um bom nome pra isso)
A idéia, que me lembre, foi correta: um cadastro de cartas, outro de cores, e uma relação intermediária relacionando cartas e cores n:m. Assim, no teu exemplo acima, a carta 1 teria uma tupla nessa relação intermediária, a 4 teria cinco, e a 5 nenhuma. Enquanto a isso está ok. Farei as pesquisas com aquela contrib, tem servido por enquanto. Com o tempo pesquisarei mais e aprenderei mais sobre isso tudo. Só questiono o uso de identificadores artificiais como chaves, sendo que há chaves naturais perfeitamente boas; e o esquema de internacionalização. Na verdade usei essas chaves só por costume, de ver os exemplos sempre mostrarem. Realmente, as cartas nunca repetem seus nomes em inglês e o nome já é suficiente para torná-la única. -- Humberto Xis [EMAIL PROTECTED] http://xisberto.blogspot.com http://ostelematicos.blogspot.com Sur la tuta tero estis unu lingvo kaj unu parlomaniero. - Gn 11,1 ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Um registro, vários valores (n ão sei um bom nome pra isso)
Quoting Leandro DUTRA [EMAIL PROTECTED]: 2008/7/16 Leandro DUTRA [EMAIL PROTECTED]: A idéia geral do modelo parece boa. Além das notas acima, eu verificaria se dá para colocar uma CHECK que limite a cinco o número de cores por carta -- creio me lembrar que havia uma restrição arbitrária quanto a isso. Desculpem a auto-resposta, mas não dá: 'Currently, CHECK expressions cannot contain subqueries nor refer to variables other than columns of the current row' http://www.postgresql.org/docs/8.3/interactive/sql-createtable.html. Alguém tem outra idéia de como implementar esse limite? Um gatilho talvez? Posso estar sendo simplista (e não li o resto das mensagens, culpa do webmail de novo), mas, creio que basta usar chaves naturais na tabela de relacionamento que resolve, pelo menos enquanto houver apenas 5 cores na tabela de cores :) . Esta restrição do check é muito irritante, deve haver algum motivo (dificuldade) *muito* forte para que ela exista. Com a palavra os que participam do desenvolvimento do PG. -- skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra +55 (11) 3040 7300 r155 gTalk: xmpp:[EMAIL PROTECTED] +55 (11) 9406 7191 ICQ/AIM: aim:GoIM?screenname=61287803 +55 (11) 5685 2219 MSN: msnim:[EMAIL PROTECTED] ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- Johnny Taylor Faria Chaves - LUN 157066 www.brdados.com.br - [EMAIL PROTECTED] Eu não posso mais, se você pode, doe sangue!!! ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Um registro, vários valores (n ão sei um bom nome pra isso)
2008/7/18 Xisberto [EMAIL PROTECTED]: Enquanto a isso está ok. Farei as pesquisas com aquela contrib, tem servido por enquanto. Com o tempo pesquisarei mais e aprenderei mais sobre isso tudo. Eu não entendi essa do contrib... li e não entendi. Talvez tenha perdido uma mensagem necessária a esse entendimento. -- skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra +55 (11) 3040 7300 r155 gTalk: xmpp:[EMAIL PROTECTED] +55 (11) 9406 7191 ICQ/AIM: aim:GoIM?screenname=61287803 +55 (11) 5685 2219 MSN: msnim:[EMAIL PROTECTED] ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Um registro, vários valores (n ão sei um bom nome pra isso)
Leandro DUTRA escreveu: 2008/7/18 Xisberto [EMAIL PROTECTED]: Enquanto a isso está ok. Farei as pesquisas com aquela contrib, tem servido por enquanto. Com o tempo pesquisarei mais e aprenderei mais sobre isso tudo. Eu não entendi essa do contrib... li e não entendi. Talvez tenha perdido uma mensagem necessária a esse entendimento. Dutra, Há um email de Osvaldo Kussama sugerindo o uso desta contrib: Citando-o: Dê uma olhada no módulo contrib/tablefunc. Creio que a função crosstab é exatamente o que procura. http://www.postgresql.org/docs/8.3/interactive/tablefunc.html []s Guedes ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Um registro, vários valores (n ão sei um bom nome pra isso)
On Fri, Jul 18, 2008 at 1:41 PM, Leandro DUTRA [EMAIL PROTECTED] wrote: 2008/7/18 Xisberto [EMAIL PROTECTED]: Enquanto a isso está ok. Farei as pesquisas com aquela contrib, tem servido por enquanto. Com o tempo pesquisarei mais e aprenderei mais sobre isso tudo. Eu não entendi essa do contrib... li e não entendi. Talvez tenha perdido uma mensagem necessária a esse entendimento. Foi o Osvaldo Rosario que me indicou: Dê uma olhada no módulo contrib/tablefunc. Creio que a função crosstab é exatamente o que procura. http://www.postgresql.org/docs/8.3/interactive/tablefunc.html -- Humberto Xis [EMAIL PROTECTED] http://xisberto.blogspot.com http://ostelematicos.blogspot.com Sur la tuta tero estis unu lingvo kaj unu parlomaniero. - Gn 11,1 ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Um registro, vários valores (n ão sei um bom nome pra isso)
2008/7/16 Luigi Castro Cardeles [EMAIL PROTECTED]: a sua dúvida não é pra restringir a coluna cores a somente esses cinco valores? vc pode criar um tipo enum com as cores que vc quer. Boa, não tinha pensado que fossem apenas cinco valores possíveis; achei que fossem muitas cores, mas cada carta podendo ter apenas cinco. Se for isso, a sua é uma solução prática e simples. Ou, para maior dinamismo, a lista de cores como modelada, apenas com cinco valores. -- skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra +55 (11) 3040 7300 r155 gTalk: xmpp:[EMAIL PROTECTED] +55 (11) 9406 7191 ICQ/AIM: aim:GoIM?screenname=61287803 +55 (11) 5685 2219 MSN: msnim:[EMAIL PROTECTED] ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Um registro, vários valores (n ão sei um bom nome pra isso)
Posso até estar viajando poderia criar uma function que teria a entrada a cor, retornando um boolean, relatando se já existem 5 cores por derterminada carta e colocava no check. - Original Message - From: Leandro DUTRA [EMAIL PROTECTED] To: Comunidade PostgreSQL Brasileira pgbr-geral@listas.postgresql.org.br Sent: Wednesday, July 16, 2008 4:12 PM Subject: Re: [pgbr-geral] Um registro, vários valores (não sei um bom nome pra isso) 2008/7/16 Leandro DUTRA [EMAIL PROTECTED]: A idéia geral do modelo parece boa. Além das notas acima, eu verificaria se dá para colocar uma CHECK que limite a cinco o número de cores por carta -- creio me lembrar que havia uma restrição arbitrária quanto a isso. Desculpem a auto-resposta, mas não dá: 'Currently, CHECK expressions cannot contain subqueries nor refer to variables other than columns of the current row' http://www.postgresql.org/docs/8.3/interactive/sql-createtable.html. Alguém tem outra idéia de como implementar esse limite? Um gatilho talvez? -- skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra +55 (11) 3040 7300 r155 gTalk: xmpp:[EMAIL PROTECTED] +55 (11) 9406 7191 ICQ/AIM: aim:GoIM?screenname=61287803 +55 (11) 5685 2219 MSN: msnim:[EMAIL PROTECTED] ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Um registro, vários valores (n ão sei um bom nome pra isso)
William Leite Araújo escreveu: Na verdade você não precisaria de nenhum /contrib/ para executar essa operação. http://www.postgresql.org/docs/8.3/interactive/sql-createaggregate.html Bastaria criar uma função de /agregação/ para concatenar os valores. Um exemplo: *CREATE AGGREGATE* txtcat(sfunc=textcat, basetype=text,stype=text); *SELECT* c.name http://c.name as NomeCarta, trim(txtcat(*COALESCE*(d.name http://d.name||', ',''))', ') as Cores *FROM* cards c *JOIN* colors_for_cards cc on( c.code= cc.cards) *JOIN* colors d on (cc.colors = d.code)) *GROUP BY* c.code Nessa linha considero mais interessante, e mais genérico, o exemplo array_accum. http://www.postgresql.org/docs/current/interactive/xaggr.html CREATE AGGREGATE array_accum (anyelement) ( sfunc = array_append, stype = anyarray, initcond = '{}' ); SELECT attrelid::regclass, array_accum(attname) FROM pg_attribute WHERE attnum 0 AND attrelid = 'pg_tablespace'::regclass GROUP BY attrelid; attrelid| array_accum ---+--- pg_tablespace | {spcname,spcowner,spclocation,spcacl} (1 row) SELECT attrelid::regclass, array_accum(atttypid) FROM pg_attribute WHERE attnum 0 AND attrelid = 'pg_tablespace'::regclass GROUP BY attrelid; attrelid| array_accum ---+- pg_tablespace | {19,26,25,1034} (1 row) Osvaldo ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Um registro, vários valores (n ão sei um bom nome pra isso)
Obrigado, Osvaldo! Era exatamente isso! 2008/7/15 Osvaldo Kussama [EMAIL PROTECTED]: Em 15/07/08, Xisberto[EMAIL PROTECTED] escreveu: Olá a todos. Tenho pouca experiência com SQL em geral, estou querendo aprender. Acabei de entrar na lista porque não consigo realizar uma consulta. Não sei nem como procuro no google pela solução do problema (não sei que palavras-chave usar). Explicando melhor: Estou fazendo um banco para catalogar coleções de cartas de um jogo. Neste jogo existem 5 cores e cada carta pode ter entre 0 e 5 cores. Para representar isso, após alguma pesquisa, fiz 3 tabelas: _ mtg_collection=# \d cards Table public.cards Column | Type | Modifiers ++-- code | integer| not null default nextval('cards_code_seq'::regclass) name | character varying(100) | not null portuguese | character varying(100) | Indexes: cards_pkey PRIMARY KEY, btree (code) cards_name_key UNIQUE, btree (name) cards_portuguese_key UNIQUE, btree (portuguese) _ mtg_collection=# \d colors Table public.colors Column | Type | Modifiers +---+--- code | integer | not null default nextval('colors_code_seq'::regclass) name | character varying(15) | not null portuguese | character varying(15) | not null Indexes: colors_pkey PRIMARY KEY, btree (code) colors_name_key UNIQUE, btree (name) colors_portuguese_key UNIQUE, btree (portuguese) _ mtg_collection=# \d colors_for_card Table public.colors_for_card Column | Type | Modifiers +-+--- code | integer | not null default nextval('color_for_card_code_seq'::regclass) color | integer | card | integer | Indexes: color_for_card_pkey PRIMARY KEY, btree (code) Foreign-key constraints: color_for_card_card_fkey FOREIGN KEY (card) REFERENCES cards(code) color_for_card_color_fkey FOREIGN KEY (color) REFERENCES colors(code) Esta terceira tabela serve para relacionar as duas principais. Eu gostaria de saber se existe como em uma única consulta sql retornar cara carta em uma linha, listando todas as cores dela. Não precisa escrever o select aqui, gostaria de sugestões de sintaxe a usar e de onde pesquisar sobre sintaxe sql. Dê uma olhada no módulo contrib/tablefunc. Creio que a função crosstab é exatamente o que procura. http://www.postgresql.org/docs/8.3/interactive/tablefunc.html Osvaldo ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- Humberto Xis [EMAIL PROTECTED] http://xisberto.blogspot.com http://ostelematicos.blogspot.com Sur la tuta tero estis unu lingvo kaj unu parlomaniero. - Gn 11,1 ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Um registro, vários valores (n ão sei um bom nome pra isso)
Osvaldo Kussama escreveu: Em 15/07/08, Xisberto[EMAIL PROTECTED] escreveu: Olá a todos. Tenho pouca experiência com SQL em geral, estou querendo aprender. Acabei de entrar na lista porque não consigo realizar uma consulta. Não sei nem como procuro no google pela solução do problema (não sei que palavras-chave usar). Explicando melhor: Estou fazendo um banco para catalogar coleções de cartas de um jogo. Neste jogo existem 5 cores e cada carta pode ter entre 0 e 5 cores. Para representar isso, após alguma pesquisa, fiz 3 tabelas: _ mtg_collection=# \d cards Table public.cards Column | Type | Modifiers ++-- code | integer| not null default nextval('cards_code_seq'::regclass) name | character varying(100) | not null portuguese | character varying(100) | Indexes: cards_pkey PRIMARY KEY, btree (code) cards_name_key UNIQUE, btree (name) cards_portuguese_key UNIQUE, btree (portuguese) _ mtg_collection=# \d colors Table public.colors Column | Type | Modifiers +---+--- code | integer | not null default nextval('colors_code_seq'::regclass) name | character varying(15) | not null portuguese | character varying(15) | not null Indexes: colors_pkey PRIMARY KEY, btree (code) colors_name_key UNIQUE, btree (name) colors_portuguese_key UNIQUE, btree (portuguese) _ mtg_collection=# \d colors_for_card Table public.colors_for_card Column | Type | Modifiers +-+--- code | integer | not null default nextval('color_for_card_code_seq'::regclass) color | integer | card | integer | Indexes: color_for_card_pkey PRIMARY KEY, btree (code) Foreign-key constraints: color_for_card_card_fkey FOREIGN KEY (card) REFERENCES cards(code) color_for_card_color_fkey FOREIGN KEY (color) REFERENCES colors(code) Esta terceira tabela serve para relacionar as duas principais. Eu gostaria de saber se existe como em uma única consulta sql retornar cara carta em uma linha, listando todas as cores dela. Não precisa escrever o select aqui, gostaria de sugestões de sintaxe a usar e de onde pesquisar sobre sintaxe sql. Dê uma olhada no módulo contrib/tablefunc. Creio que a função crosstab é exatamente o que procura. http://www.postgresql.org/docs/8.3/interactive/tablefunc.html Complementando: Aproveitando o mote da discussão sobre a preferência que se deve dar ao uso de chaves naturais nas tabelas pergunto: Por que utilizar estas chaves artificiais nestas tabelas? Seu uso fornece algum ganho ou será justamente o contrário, isto é, apenas irão complicar suas queries? Osvaldo ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Um registro, vários valores (n ão sei um bom nome pra isso)
Complementando: Aproveitando o mote da discussão sobre a preferência que se deve dar ao uso de chaves naturais nas tabelas pergunto: Por que utilizar estas chaves artificiais nestas tabelas? Seu uso fornece algum ganho ou será justamente o contrário, isto é, apenas irão complicar suas queries? Osvaldo Aí é que está, Osvaldo. Eu não sei. E isso que você falou de chaves naturais e artificiais para mim é grego :P O que eu quero é: tenho elementos (cartas) que podem ser classificados em, digamos, etiquetas (cores), que neste caso estão limitadas a 5. Cada carta pode ter zero, uma, duas, até 5 cores. Não tenho certeza se o método que estou usando é o melhor para representar isso, se alguém puder dar uma dica, agradecerei muito! -- Humberto Xis [EMAIL PROTECTED] http://xisberto.blogspot.com http://ostelematicos.blogspot.com Sur la tuta tero estis unu lingvo kaj unu parlomaniero. - Gn 11,1 ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Um registro, vários valores (n ão sei um bom nome pra isso)
2008/7/16 Osvaldo Rosario Kussama [EMAIL PROTECTED]: Por que utilizar estas chaves artificiais nestas tabelas? Há algumas razões, umas mais, outras menos controversas. Talvez o uso menos controverso seja a ausência de boas chaves naturais. O problema é decidir o que são boas chaves naturais; em princípio, todas as chaves naturais são boas, e todas as artificiais são ruins. O caso é que tem muita gente, principalmente usuários de ORMs, que não gosta de chaves compostas. Acha que fica difícil programar. Eu nunca usei ORM, nunca senti na pele, e daí vem minha impressão de que muitos ORMs criam tantos problemas quanto resolvem. Uma razão válida é, em casos extremos, economia de armazenamento em chaves estrangeiras. Imagine uma relação pai com uma chave natural composta razoável, digamos mais de três atributos; e uma relação filha com muito mais tuplas, digamos milhões ou dezenas de milhões a mais, isso rodando num sistema que é gargalo de desempenho. Nesse caso, pode ser que, após testes, valha a pena uma chave primária artificial para emagrecer a tabela filha. Uma vez cheguei num acordo interessante com uma equipe apaixonada pelo Hybernate: eu deixava criar chaves artificiais quando as naturais tinham mais de três atributos. Doutra vez, tive de aceitar as chaves artificiais mas lavei as mãos quanto a desempenho e manutenabilidade (essa palavra existe?) do modelo e da aplicação, e ainda impus chaves alternativas naturais. -- skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra +55 (11) 3040 7300 r155 gTalk: xmpp:[EMAIL PROTECTED] +55 (11) 9406 7191 ICQ/AIM: aim:GoIM?screenname=61287803 +55 (11) 5685 2219 MSN: msnim:[EMAIL PROTECTED] ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Um registro, vários valores (n ão sei um bom nome pra isso)
2008/7/16 Xisberto [EMAIL PROTECTED]: Aí é que está, Osvaldo. Eu não sei. E isso que você falou de chaves naturais e artificiais para mim é grego :P Puxa, aprenda, ou terá dificuldades sérias para coisas mais sérias! Basicamente, seus 'code's são chaves artificiais e desnecessárias. Você poderia deixar os nomes das cartas como chaves primárias e estrangeiras, assim como os nomes das cores. Outra coisa é com as traduções. O correto (pode não lhe ser conveniente) seria ter tabelinhas à parte com os nomes traduzidos e os códigos ISO de língua, para dar mais flexibilidade na internacionalização da base. O que eu quero é: tenho elementos (cartas) que podem ser classificados em, digamos, etiquetas (cores), que neste caso estão limitadas a 5. Cada carta pode ter zero, uma, duas, até 5 cores. Não tenho certeza se o método que estou usando é o melhor para representar isso, se alguém puder dar uma dica, agradecerei muito! A idéia geral do modelo parece boa. Além das notas acima, eu verificaria se dá para colocar uma CHECK que limite a cinco o número de cores por carta -- creio me lembrar que havia uma restrição arbitrária quanto a isso. Sur la tuta tero estis unu lingvo kaj unu parlomaniero. - Gn 11,1 Gn xi:1 em esperanto? -- skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra +55 (11) 3040 7300 r155 gTalk: xmpp:[EMAIL PROTECTED] +55 (11) 9406 7191 ICQ/AIM: aim:GoIM?screenname=61287803 +55 (11) 5685 2219 MSN: msnim:[EMAIL PROTECTED] ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Um registro, vários valores (n ão sei um bom nome pra isso)
2008/7/16 Leandro DUTRA [EMAIL PROTECTED]: A idéia geral do modelo parece boa. Além das notas acima, eu verificaria se dá para colocar uma CHECK que limite a cinco o número de cores por carta -- creio me lembrar que havia uma restrição arbitrária quanto a isso. Desculpem a auto-resposta, mas não dá: 'Currently, CHECK expressions cannot contain subqueries nor refer to variables other than columns of the current row' http://www.postgresql.org/docs/8.3/interactive/sql-createtable.html. Alguém tem outra idéia de como implementar esse limite? Um gatilho talvez? -- skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra +55 (11) 3040 7300 r155 gTalk: xmpp:[EMAIL PROTECTED] +55 (11) 9406 7191 ICQ/AIM: aim:GoIM?screenname=61287803 +55 (11) 5685 2219 MSN: msnim:[EMAIL PROTECTED] ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Um registro, vários valores (n ão sei um bom nome pra isso)
2008/7/16 Leandro DUTRA [EMAIL PROTECTED]: 2008/7/16 Leandro DUTRA [EMAIL PROTECTED]: A idéia geral do modelo parece boa. Além das notas acima, eu verificaria se dá para colocar uma CHECK que limite a cinco o número de cores por carta -- creio me lembrar que havia uma restrição arbitrária quanto a isso. Desculpem a auto-resposta, mas não dá: 'Currently, CHECK expressions cannot contain subqueries nor refer to variables other than columns of the current row' http://www.postgresql.org/docs/8.3/interactive/sql-createtable.html. Alguém tem outra idéia de como implementar esse limite? Um gatilho talvez? Se alguém tiver uma idéia de como implementar, e for simples o suficiente para dizer aqui, diga. Mas no ambiente em questão este limite de 5 cores não precisa ser implementado por código, pois neste ambiente só existem 5 cores. Sur la tuta tero estis unu lingvo kaj unu parlomaniero. - Gn 11,1 Gn xi:1 em esperanto? Sim, é a passagem que inicia a história da Torre de Babel. -- Humberto Xis [EMAIL PROTECTED] http://xisberto.blogspot.com http://ostelematicos.blogspot.com Sur la tuta tero estis unu lingvo kaj unu parlomaniero. - Gn 11,1 ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Um registro, vários valores (n ão sei um bom nome pra isso)
Na verdade você não precisaria de nenhum *contrib* para executar essa operação. http://www.postgresql.org/docs/8.3/interactive/sql-createaggregate.html Bastaria criar uma função de *agregação* para concatenar os valores. Um exemplo: *CREATE AGGREGATE* txtcat(sfunc=textcat, basetype=text,stype=text); *SELECT* c.name as NomeCarta, trim(txtcat(*COALESCE*(d.name||', ',''))', ') as Cores *FROM* cards c *JOIN* colors_for_cards cc on( c.code= cc.cards) *JOIN*colors d on (cc.colors = d.code)) *GROUP BY* c.code 2008/7/16 Leandro DUTRA [EMAIL PROTECTED]: 2008/7/16 Xisberto [EMAIL PROTECTED]: Sur la tuta tero estis unu lingvo kaj unu parlomaniero. - Gn 11,1 Gn xi:1 em esperanto? Sim, é a passagem que inicia a história da Torre de Babel. Percebi! -- skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra +55 (11) 3040 7300 r155 gTalk: xmpp:[EMAIL PROTECTED][EMAIL PROTECTED] +55 (11) 9406 7191 ICQ/AIM: aim:GoIM?screenname=61287803 +55 (11) 5685 2219 MSN: msnim:[EMAIL PROTECTED] ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- William Leite Araújo Analista de Banco de Dados - QualiConsult ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Um registro, vários valores (n ão sei um bom nome pra isso)
2008/7/16 William Leite Araújo [EMAIL PROTECTED]: Bastaria criar uma função de agregação para concatenar os valores. Mas para que concatenar valores? -- skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra +55 (11) 3040 7300 r155 gTalk: xmpp:[EMAIL PROTECTED] +55 (11) 9406 7191 ICQ/AIM: aim:GoIM?screenname=61287803 +55 (11) 5685 2219 MSN: msnim:[EMAIL PROTECTED] ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Um registro, vários valores (n ão sei um bom nome pra isso)
Olá, a sua dúvida não é pra restringir a coluna cores a somente esses cinco valores? vc pode criar um tipo enum com as cores que vc quer. ou então colocar uns constrains na sua tabela. []'s -- Luigi Castro Cardeles ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Um registro, vários valores (n ão sei um bom nome pra isso)
Olá a todos. Tenho pouca experiência com SQL em geral, estou querendo aprender. Acabei de entrar na lista porque não consigo realizar uma consulta. Não sei nem como procuro no google pela solução do problema (não sei que palavras-chave usar). Explicando melhor: Estou fazendo um banco para catalogar coleções de cartas de um jogo. Neste jogo existem 5 cores e cada carta pode ter entre 0 e 5 cores. Para representar isso, após alguma pesquisa, fiz 3 tabelas: _ mtg_collection=# \d cards Table public.cards Column | Type | Modifiers ++-- code | integer| not null default nextval('cards_code_seq'::regclass) name | character varying(100) | not null portuguese | character varying(100) | Indexes: cards_pkey PRIMARY KEY, btree (code) cards_name_key UNIQUE, btree (name) cards_portuguese_key UNIQUE, btree (portuguese) _ mtg_collection=# \d colors Table public.colors Column | Type | Modifiers +---+--- code | integer | not null default nextval('colors_code_seq'::regclass) name | character varying(15) | not null portuguese | character varying(15) | not null Indexes: colors_pkey PRIMARY KEY, btree (code) colors_name_key UNIQUE, btree (name) colors_portuguese_key UNIQUE, btree (portuguese) _ mtg_collection=# \d colors_for_card Table public.colors_for_card Column | Type | Modifiers +-+--- code | integer | not null default nextval('color_for_card_code_seq'::regclass) color | integer | card | integer | Indexes: color_for_card_pkey PRIMARY KEY, btree (code) Foreign-key constraints: color_for_card_card_fkey FOREIGN KEY (card) REFERENCES cards(code) color_for_card_color_fkey FOREIGN KEY (color) REFERENCES colors(code) Esta terceira tabela serve para relacionar as duas principais. Eu gostaria de saber se existe como em uma única consulta sql retornar cara carta em uma linha, listando todas as cores dela. Não precisa escrever o select aqui, gostaria de sugestões de sintaxe a usar e de onde pesquisar sobre sintaxe sql. Obrigado pela paciência quem leu até aqui! -- Humberto Xis [EMAIL PROTECTED] http://xisberto.blogspot.com http://ostelematicos.blogspot.com Sur la tuta tero estis unu lingvo kaj unu parlomaniero. - Gn 11,1 ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Um registro, vários valores (n ão sei um bom nome pra isso)
Em 15/07/08, Xisberto[EMAIL PROTECTED] escreveu: Olá a todos. Tenho pouca experiência com SQL em geral, estou querendo aprender. Acabei de entrar na lista porque não consigo realizar uma consulta. Não sei nem como procuro no google pela solução do problema (não sei que palavras-chave usar). Explicando melhor: Estou fazendo um banco para catalogar coleções de cartas de um jogo. Neste jogo existem 5 cores e cada carta pode ter entre 0 e 5 cores. Para representar isso, após alguma pesquisa, fiz 3 tabelas: _ mtg_collection=# \d cards Table public.cards Column | Type | Modifiers ++-- code | integer| not null default nextval('cards_code_seq'::regclass) name | character varying(100) | not null portuguese | character varying(100) | Indexes: cards_pkey PRIMARY KEY, btree (code) cards_name_key UNIQUE, btree (name) cards_portuguese_key UNIQUE, btree (portuguese) _ mtg_collection=# \d colors Table public.colors Column | Type | Modifiers +---+--- code | integer | not null default nextval('colors_code_seq'::regclass) name | character varying(15) | not null portuguese | character varying(15) | not null Indexes: colors_pkey PRIMARY KEY, btree (code) colors_name_key UNIQUE, btree (name) colors_portuguese_key UNIQUE, btree (portuguese) _ mtg_collection=# \d colors_for_card Table public.colors_for_card Column | Type | Modifiers +-+--- code | integer | not null default nextval('color_for_card_code_seq'::regclass) color | integer | card | integer | Indexes: color_for_card_pkey PRIMARY KEY, btree (code) Foreign-key constraints: color_for_card_card_fkey FOREIGN KEY (card) REFERENCES cards(code) color_for_card_color_fkey FOREIGN KEY (color) REFERENCES colors(code) Esta terceira tabela serve para relacionar as duas principais. Eu gostaria de saber se existe como em uma única consulta sql retornar cara carta em uma linha, listando todas as cores dela. Não precisa escrever o select aqui, gostaria de sugestões de sintaxe a usar e de onde pesquisar sobre sintaxe sql. Dê uma olhada no módulo contrib/tablefunc. Creio que a função crosstab é exatamente o que procura. http://www.postgresql.org/docs/8.3/interactive/tablefunc.html Osvaldo ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral