Como armazenar vários registros em um mesmo campo?

29 respostas
Kleber-rr

Olá pessoal, estou precisando armazenar varios registros em um mesmo campo. Será q a entidade @Collections resolveria isso?? Como ela funciona?

Flws

29 Respostas

E

Você sabe fazer modelagem de dados e criar tabelas? Se soubesse, não estaria perguntando esse tipo de coisas.

De qualquer maneira, vamos lá.

Digamos que você tenha uma tabela onde cada registro representa uma nota fiscal, e você sabe que uma nota fiscal tem vários itens. O que você precisa é obviamente de uma outra tabela, onde cada registro represente um item da nota fiscal. E você relaciona essas duas tabelas.

No seu caso, você provavelmente tem de criar uma outra tabela que contém esses tais “registros que você quer pôr em um determinado campo”.

Kleber-rr

entanglement:
Você sabe fazer modelagem de dados e criar tabelas? Se soubesse, não estaria perguntando esse tipo de coisas.

De qualquer maneira, vamos lá.

Digamos que você tenha uma tabela onde cada registro representa uma nota fiscal, e você sabe que uma nota fiscal tem vários itens. O que você precisa é obviamente de uma outra tabela, onde cada registro represente um item da nota fiscal. E você relaciona essas duas tabelas.

No seu caso, você provavelmente tem de criar uma outra tabela que contém esses tais “registros que você quer pôr em um determinado campo”.

Vai desculpando minha falta de conhecimento no assunto… mas vamos lá. Deixa eu te explicar minha situação:
Eu tenho uma tabela questionario e uma tabela de resposta, nessas condiçoes:

CREATE TABLE questionario ( cod_questionario bigint NOT NULL, cod_orgaogestor bigint, cod_respostas bigint, CONSTRAINT questionario_pkey PRIMARY KEY (cod_questionario), CONSTRAINT fkf5c3a9fd16fb998d FOREIGN KEY (cod_orgaogestor) REFERENCES orgaogestor (cod_orgaogestor) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT fkf5c3a9fd931b20a9 FOREIGN KEY (cod_respostas) REFERENCES resposta (codrespostas) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION ) WITH (OIDS=FALSE); ALTER TABLE questionario OWNER TO postgres;

CREATE TABLE resposta ( codrespostas bigint NOT NULL, descricao character varying(255), marcar boolean, resposta_complemento character varying(255), pergunta bigint, CONSTRAINT resposta_pkey PRIMARY KEY (codrespostas), CONSTRAINT fkebb727211a65a21d FOREIGN KEY (pergunta) REFERENCES pergunta (codperguntas) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION ) WITH (OIDS=FALSE); ALTER TABLE resposta OWNER TO postgres;

O que acontece: cada questionário terá pelo menos 50 respostas. Eu sei q, para cada resposta para adcionar, um novo registro de questionario será criado… Eu estou tendo dúvidas quanto ao relacionamento: teria como nesse registro de questionário (por exemplo, 1) eu ter varias respostas (exemplo: 3, 5, 7 , …)???

Agradeço a compreenção e paciencia.

renanreismartins

tem sim meu amigo, porem seu esquema de banco de dados nao permite isso, vc teria de ter uma tabela associativa que relacionasse questionario com resposta…

caso estiver utilizando jpa de uma olhada nas anotações @OneToMany e @ManyToMany

abrassss

marcelo.bellissimo

Kleber, pelo que eu estou percebendo você tá tendo alguns problemas em modelar o seu banco, acho que falta um pouco de teoria de banco de dados… procure no Google, por apostilas sobre teoria de bancos de dados, como funcionam as tabelas associativas, e etc… daí vai ficar absurdamente mais fácil pra você modelar essas suas classes, você vai resolver seus problemas estudando…

Kleber-rr

Realmente, é falha minha mesmo. Eu naum tenho conhecimento algum em modelagem… aprendi a criar as tabelas do banco atraves do java, com o hibernate. Eu vou fazer um curso esse ano de postgresql, mas antes disso, tenho q resolver esse pepino. Por isso pedi essa ajuda aos colegas.

Kleber-rr
renanreismartins:
tem sim meu amigo, porem seu esquema de banco de dados nao permite isso, vc teria de ter uma tabela associativa que relacionasse questionario com resposta...

caso estiver utilizando jpa de uma olhada nas anotações @OneToMany e @ManyToMany

abrassss
Estou usando JPA sim. olha como estão minhas classes:
@Entity
@Table(name = "questionario")
public class Questionario {

	@Id
	@GeneratedValue
	@Column(name = "cod_questionario")
	private Long cod_questionario;

	@ManyToOne
	@JoinColumn(name = "cod_orgaogestor")
	private OrgaoGestor orgaogestor;

	@ManyToOne
	@JoinColumn(name = "cod_respostas")
	private Respostas resposta;
@Entity
@Table(name = "resposta")
public class Respostas {

	@Id
	@GeneratedValue
	@Column(name = "codRespostas")
	private Long codRespostas;
	private String descricao;
	private String resposta_complemento;
	private Boolean marcar;

	@ManyToOne
	@JoinColumn(name = "pergunta")
	private Perguntas pergunta;

	@OneToMany(mappedBy = "resposta", fetch = FetchType.LAZY)
	private List<Questionario> questionarios = new ArrayList<Questionario>();
nel

Certo.

Leve o que o marcelo disse como uma critica positiva. Procure aprender sobre o básico de modelagem de dados, isto será um diferencial para você no seu curso sem falar que vai sanar muitas dúvidas básicas suas. Detalhe, todos temos algo a aprender, seja simples ou complexo.

Abraços.

Felipe_F_Diogo

Questionario 1 - n Perguntas 1 - n Respostas

Nesse caso tu nao precisaria necessariamente de uma tabela de relacoes, e sim so chaves estrangerias setadas.

Mas nao sei se eh bem isso que tu quer fazer.

Kleber-rr

nel:
Certo.

Leve o que o marcelo disse como uma critica positiva. Procure aprender sobre o básico de modelagem de dados, isto será um diferencial para você no seu curso sem falar que vai sanar muitas dúvidas básicas suas. Detalhe, todos temos algo a aprender, seja simples ou complexo.

Abraços.

Com certeza mano, eu conheço minhas falhas. Pode ver q muitas dúvidas minhas são básicas. O problema é que eu tenho um projeto para entregar, e preciso avançar nessas dúvidas, pois realmente não tive ainda essa capacitação, e Graças a Deus e ao pessoal do GUJ, eu tenho aprendido muita coisa mesmo. Agradeço a todos por isso.
Mas com certeza nel, a crítica é sim construtiva!! :smiley:

Felipe_F_Diogo

Cara me explica porq na classe Questionario tu tem um atributo da classe Respostas
e na classe Respostas tu tem uma List<Questionario> ?

Explica melhor a tua ideia cara. :wink:

Kleber-rr

Felipe F. Diogo:
Questionario 1 - n Perguntas 1 - n Respostas

Nesse caso tu nao precisaria necessariamente de uma tabela de relacoes, e sim so chaves estrangerias setadas.

Mas nao sei se eh bem isso que tu quer fazer.

Felipe, é isso mesmo. Tu viu o que eu postei?? Tá certo? Os relacionamentos estão corretos??

Felipe_F_Diogo

Cara como tu ta atucanado vo te da a moral.

Tu tem que ter um campo Questionario (chave estrangeira) na Pergunta identificando o Questionario a qual a pergunta pertence.

Tu tem que ter um Campo Pergunta (chave estrangeira) na resposta, identificando a pergunta a qual a resposta pertence.

O relacionamento na tabela resposta a meu ver ta correto.

Mas nao entendi o relacionamento de foreign key na tabela Questionario (codresposta).

Espero ta ajudando =)

Kleber-rr

Felipe F. Diogo:
Cara como tu ta atucanado vo te da a moral.

Tu tem que ter um campo Questionario (chave estrangeira) na Pergunta identificando o Questionario a qual a pergunta pertence.

Tu tem que ter um Campo Pergunta (chave estrangeira) na resposta, identificando a pergunta a qual a resposta pertence.

O relacionamento na tabela resposta a meu ver ta correto.

Mas nao entendi o relacionamento de foreign key na tabela Questionario (codresposta).

Espero ta ajudando =)


Felipe, amigao, é o seguinte: eu tenho uma tabela questionario, uma tabela perguntas e outra respostas.

A tabela perguntas e respostas está relacionada 1-n, e as tabelas questionario/respostas está relacionada 1-n.
Naum quis colocar o relacionamento entre questionario/perguntas, pq eu achei melhor gravar somente a resposta no questionario (até recomendações que li nos foruns).

Pense na seguinte situação:
1 questionário será respondido por um órgao, e nesse questionario tem umas 50 respostas possíveis (é só tu pensar numa lógica de prova de concurso, faculdade, coisa assim…).
Qual será a melhor maneira para armazenar essas resposta no questionário?? cada resposta ficará num registro de questionário?? essa é minha dúvida! eu naum posso gravar mais de 1 resposta em um questionário?? ou seja, em um id questionário??

Valeu mano.

marcelo.bellissimo

Ai temos um problema de conceito… que eu saiba, e acho que é um consenso geral, um Questionário é composto por 1 ou mais Perguntas, e uma Pergunta possui 1 ou mais Respostas… então as associações que voce está tentando fazer não fazem sentido, e pelo jeito você nunca vai conseguir numa solução adequada…

Felipe_F_Diogo

Cara, como nosso amigo marcelo aqui em cima falo, nao faz sentido isso que tu esta fazendo.
Nao sei se tu tem tempo de alterar o codigo para fazer do jeito certo. Mas caso nao tenha
O que tu poderia tentar fazer e colocar duas chaves estrangeiras em resposta, uma de questionario e outra de pergunta.

Desse jeito tu expressa a relacao que tu me explico. Mas como foi falado acima nao faz sentido.

Kleber-rr

marcelão, eu fiz assim pq acho q seria desnecessário armazenar pergunta e resposta no questionário. mas, se for o caso, poderei refazer sem problemas. :smiley:
Valeu

marcelo.bellissimo

Bem… dá pra fazer do jeito que voce estava querendo? Dá, mas o problema é que vai ficar dificil de entender mais pra frente, vai ficar um pouco “gambiarra”… além de não fazer muito sentido, vai te atrapalhar na hora de fazer as consultas, com certeza… então é melhor fazer do jeito “certo”, que faça mais sentido…

marcelo.bellissimo

Ah, só pra deixar mais claro (pra garantir que você realmente entendeu o conceito), você não estará armazenando Perguntas e Respostas no Questionario do jeito que voce disse (talvez tenha se expressado mal, sei lá…)

No Questionario existirão apenas objetos Perguntas… e dentro de cada Pergunta é que existirão Respostas… as Respostas não são do Questionário, são da Pergunta… ok ?

M

Que papo doido!
Eu acho que o amigo Kleber-rr tem que parar tudo o que está fazendo e ler um pouco de C. J. Date, para não correr o risco de fazer lenha!
Boa sorte!

Kleber-rr

malsan:
Que papo doido!
Eu acho que o amigo Kleber-rr tem que parar tudo o que está fazendo e ler um pouco de C. J. Date, para não correr o risco de fazer lenha!
Boa sorte!

ehehehee com certeza mano!! :smiley: to pra ficar doido mesmo… o problema q estou correndo contra o tempo!! mas esse ano vou fazer um treinamento em modelagem de dados e postgresql pra deixar de apanhar! ehehehehe

flws.

M

Valeu parceiro! Depois eu releio este tópico para ver se eu entendo alguma coisa e consigo ajudar!
Shalom!

M

Felipe F. Diogo:
Questionario 1 - n Perguntas 1 - n Respostas

Nesse caso tu nao precisaria necessariamente de uma tabela de relacoes, e sim so chaves estrangerias setadas.

Mas nao sei se eh bem isso que tu quer fazer.

Já li! Seu caso parou o setor aqui no trabalho!!! :slight_smile:
Eu acho que você devia fazer como o colega sugeriu a não ser que uma mesma pergunta possa constar de mais de um questionário, pois, desta forma, ficaria assim:
questionario n-m pergunta 1-n resposta
Para o relacionamento n-m crie um relation associativo. Coloque os FK no lado muitos da parada e seja feliz!
Outrossim, caso você realmente queira continuar com esta doideira, alguns bancos como o PostGreSQL admintem tipos estrutuados (arrays) e você poderá, por sua conta e risco, colocar uma lista de respostas no questionário. Antecipadamente te informo que vai haver o diabo para você fazer consultas!
Boa sorte e posta a sua resolução para a galera!
Shalom!!!

Kleber-rr

malsan:
Felipe F. Diogo:
Questionario 1 - n Perguntas 1 - n Respostas

Nesse caso tu nao precisaria necessariamente de uma tabela de relacoes, e sim so chaves estrangerias setadas.

Mas nao sei se eh bem isso que tu quer fazer.

Já li! Seu caso parou o setor aqui no trabalho!!! :slight_smile:
Eu acho que você devia fazer como o colega sugeriu a não ser que uma mesma pergunta possa constar de mais de um questionário, pois, desta forma, ficaria assim:
questionario n-m pergunta 1-n resposta
Para o relacionamento n-m crie um relation associativo. Coloque os FK no lado muitos da parada e seja feliz!
Outrossim, caso você realmente queira continuar com esta doideira, alguns bancos como o PostGreSQL admintem tipos estrutuados (arrays) e você poderá, por sua conta e risco, colocar uma lista de respostas no questionário. Antecipadamente te informo que vai haver o diabo para você fazer consultas!
Boa sorte e posta a sua resolução para a galera!
Shalom!!!

Cara, to numa sinuca de bico da %$…
eu estou fazendo o banco através do hibernate no java, e usando a persistencia para fazer os relacionamentos… minha atual situação é a seguinte, vamos lá do começo:

  • eu tenho uma classe de perguntas e outra de respostas que possuem um relacionamento 1-n;
  • tenho uma classe orgaogestor que se relaciona com questionario tipo n-1;
  • e tenho uma relacao de questionario para respostas tipo 1-n.

Porque?
Eu achei que, ao relacionar as respostas às perguntas, naum seria necessário manter um relacionamento de questionário 1-n perguntas, pq o orgaogestor que preencherá o questionário poderá responder várias respostas, inclusive da mesma pergunta, sendo que as respostas já se relacionam com as perguntas.

Então pessoal, se realmente meu pensamento estiver errado (como o pessoal que entende mesmo de modelagem e relacionamento afirmaram) peço dos colegas essa orientaçao de como devo fazer esse relacionamento de banco (lembrando que estou montando banco atraves das classes java usando hibernate e persistencia).

Agradeço a colaboração de todos.

juniorsatanas

PERGUNTA 1 *****************N RESPOTAS (@OneToMany)

ORGÃO N********************** 1 QUETIONAMENTO(@ManyToOne) / QUESTIONAMETO 1 *********************** N RESPOSTAS(@OneToMany)

No formulario de cadasto de perguntas e respostas você vai associar cada pergunta a uma resposta ou a varias respostas
Vai relacionar cada orgão a 1 questionamento ?
Ex: Educação Pode fazer N questionamentos e obter n Respostas ?

Diga-me o que o sistema vai fazer !

acho que vai ser Orgão n **************** n Questionamento 1 **************************n Respostas

Faz um Fluxograma mano e posta aqui !

Kleber-rr

Então junior, eu estou fazendo dessa forma. Só que, segundo as recomendaçoes dos colegas, vou dar uma lida sobre o assunto e ver o q faço…
Assim que possível, posto a solução.

Valeu.

Kleber-rr

Ah, só pra deixar mais claro (pra garantir que você realmente entendeu o conceito), você não estará armazenando Perguntas e Respostas no Questionario do jeito que voce disse (talvez tenha se expressado mal, sei lá…)

No Questionario existirão apenas objetos Perguntas… e dentro de cada Pergunta é que existirão Respostas… as Respostas não são do Questionário, são da Pergunta… ok ?

Marcelão, então a recomendação é: Na tabela questionário, ter as chaves estrangeiras de pertuntas, respostas e orgaogestor(que é quem vai preencher), ou somente perguntas?? Dessa forma vou poder salvar em um único registro de questionario várias respostas???

Kleber-rr

Pessoal, dei uma lida nesse tutorial: http://alinhavado.wordpress.com/tutoriais/de-many-to-many-para-many-to-one-com-jpa/

Ele recomenda mais ou menos o que eu tinha pensado… O q vcs acham??

Kleber-rr

Eae pessoal, nada??

juniorsatanas

Kleber-rr como vai ficar as telas ?

Eu acho que dessa maneira ta certo !
Criado 3 de fevereiro de 2010
Ultima resposta 10 de fev. de 2010
Respostas 29
Participantes 8