Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda com modelagem de banco (meio urgente :S)


buthy

Pergunta

Dae galera, beleza?

É o seguinte

Preciso fazer um site em php (trabalho de facul)

E estou com problemas para modelar o banco de dados, utilizando o DBDesigner 4

a ideia é a seguinte, terão 3 tipos (niveis) de usuários

(básico, avançado, admin)

os admins poderao cadastrar usuarios e cadastrar exercicios para os alunos

e os alunos irao responder os exercicios

aqui tá o modelo, por enqt:

semttulo1sw.jpg

os alunos que estivessem cadastrados no nivel básico teriam tais exercicios

e os que estivessem no nivel avançado, teriam outros exercicios

essa é uma das duvidas, como que eu vou fazer para identificar que o exercicio tal, é do nivel básico ou avançado?

outra coisa:

no modelo tem resposta1 e resposta2

sendo que resposta1 são as questoes de perguntas e respostas (dissertativas)

e a resposta2 são as questoes de assinalar, com 4 alternativas, somente 1 correta

sendo que resposta2 quando for exibida ao aluno, terá que exibir as respostas de forma randomica, ou seja, ou na posicao a) ou na posicao B) ou c) ou d)

acho que qt a resposta1 está tudo certo

mas a tabela resposta2 está correta?

muito obrigado!

Link para o comentário
Compartilhar em outros sites

18 respostass a esta questão

Posts Recomendados

  • 0

Oi, 'buthy'

Seu modelo está quse certo.

Analise o que foi pedido.

Um USUARIO possui um NIVEL. Logo, um NIVEL está em vários USUARIOS. (Relacionamento 1:N entre NIVEL e USUARIO)

Uma pergunta possui um NIVEL. Logo, um NIVEL está em várias PERGUNTAS. (Relacionamento 1:N entre NIVEL e PERGUNTA)

Um USUARIO pde responder a várias PERGUNTAS e uma PERGUNTA é dirigida a vários USUARIOS. (Relacionamento N:M entre PERGUNTA e USUARIO)

Uma PERGUNTA possui uma RESPOSTA e uma RESPOSTA pode estar em várias PERGUNTAS. ((Relacionamento 1:N entre PERGUNTA e RESPOSTA)

Uma RESPOSTA pode ser DISSERTATIVA ou MULTIPLA ESCOLHA. Então RESPOSTA é generalização de DISSERTATIVA e MULTIPLA ESCOLHA. DISSERTATIVA e MULTIPLA ESCOLHA são especializações de RESPOSTA (Relacionamento 1:1 entre RESPOSTA e MULTIPLA_ESCOLHA e relacionamento 1:1 entre RESPOSTA e DISSERTATIVA).

Agora, corrija seu desenho.

Link para o comentário
Compartilhar em outros sites

  • 0

Brigadao cara..

Só não to conseguindo entender algumas coisas...

Um USUARIO pde responder a várias PERGUNTAS e uma PERGUNTA é dirigida a vários USUARIOS. (Relacionamento N:M entre PERGUNTA e USUARIO)
Nunca tinha usado N:M antes, o que isso faz???

Uma PERGUNTA possui uma RESPOSTA e uma RESPOSTA pode estar em várias PERGUNTAS. ((Relacionamento 1:N entre PERGUNTA e RESPOSTA)

uma resposta pode estar em várias perguntas? está certo isso?

Uma RESPOSTA pode ser DISSERTATIVA ou MULTIPLA ESCOLHA. Então RESPOSTA é generalização de DISSERTATIVA e MULTIPLA ESCOLHA. DISSERTATIVA e MULTIPLA ESCOLHA são especializações de RESPOSTA (Relacionamento 1:1 entre RESPOSTA e MULTIPLA_ESCOLHA e relacionamento 1:1 entre RESPOSTA e DISSERTATIVA).

não entendi direito essa parte... e não seria relacionamento 1:n entre resposta e multipla_escolha? porque uma pergunta pode ter várias opções.

e outra coisa, de resto está tudo certo??? a tabela multipla_escolha tá certa? os atributos e tal...

modelo atualizado:

3novo.png

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, 'buthy'

Já percebi que você ainda está fraquinho. então vamos aos ajustes:

Nunca tinha usado N:M antes, o que isso faz???
É uma das formas de indicar um relacionamento muitos para muitos.

Neste caso, haverá, fisicamente, uma tabela intermediária, com dois atributos(campos) a chave primária da tabela USUARIO e a chave primaria da tabela PERGUNTA. O relacionamento é montado na forma de 1:N entre USUARIO e RELACIONAMENTO_USUARIO_PERGUNTA e o outro relacionamento é de 1:N entre PERGUNTA e RELACIONAMENTO_USUARIO_PERGUNTA. Com isto você obtem o relacionamento N:M (muitos para muitos) entre PERGUNTA e USUARIO.

uma resposta pode estar em várias perguntas? está certo isso?
Se você está dizendo que RESPOSTAS está normalizada e que há várias (N) respostas cadastradas, então a resposta é sim. pois a ligação se dará de RESPOSTA (1) para PERGUNTA (n). Ou seja, uma RESPOSTA pode estar em várias PERGUNTAS.

Uma RESPOSTA pode ser DISSERTATIVA ou MULTIPLA ESCOLHA. Então RESPOSTA é generalização de DISSERTATIVA e MULTIPLA ESCOLHA. DISSERTATIVA e MULTIPLA ESCOLHA são especializações de RESPOSTA (Relacionamento 1:1 entre RESPOSTA e MULTIPLA_ESCOLHA e relacionamento 1:1 entre RESPOSTA e DISSERTATIVA).

não entendi direito essa parte... e não seria relacionamento 1:n entre resposta e multipla_escolha? porque uma pergunta pode ter várias opções.

Generalização/especialização é um conceito de objeto. Indica que existe uma tabela PAI, neste caso representado por RESPOSTA e tabelas FILHAS, neste caso, representadas por DISSERTATIVA e MULTIPLA_ESCOLHA. A ligação destas tabelas filhas com a tabela pai é um relacionamento 1:1. A tabela RESPOSTA (PAI) possui a chave primária, um atributo para indicar o tipo de resposta (se dissertativa ou multipla escolha) e demais atributos que sejam comuns as tabelas filhas devem ficar aqui;

Na tabela filha DISSERTATIVA você deve colocar a chave primária = a chave primaria daa tabela pai e demais atributos exclusivos desta tabela. O mesmo serve para a tabela filha MULTIPLA_ESCOLHA.

e outra coisa, de resto está tudo certo??? a tabela multipla_escolha tá certa? os atributos e tal...
Como falei antes quase certo. algumas ligações estão erradas e precisam ser reconfiguradas

Por último a tabela NIVEL é uma tabela de DOMINIO que possui somente a chave primaria e a descrição do tipo de nivel

veja o desenho em anexo.

Modelo_1.pdf

Link para o comentário
Compartilhar em outros sites

  • 0

Ok cara, muito obrigado.

Desse jeito o meu sistema vai ter um campo para cadastro, por exempo:

Cadastrar Exercicios

Pergunta

Tipo de Exercicio (dissertativa ou multipla escolha)

em caso de dissertativa

Resposta:

e em caso de multipla escolha:

Opção Correta:

Opção 2:

Opção 3:

Opção 4:

dai para randomizar as opções da de multipla escolha, dá pra fazer depois não é?, usando algum random no php certo??

e a tabela PAI RESPOSTA e as tabelas FILHAS DISSERTATIVA E MULTIPLA_ESCOLHA

nunca fiz nada com tabelas pai e filha, como que eu represento isso?

e no teu modelo, não entendi a ligação da tabela resposta para dissertavia e multipla_escolha

e mais algum erro? :S

desculpa, sou muito iniciante nesse assunto, ehehe

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, 'buthy'

Não há o que desculpar. Vi de inicio que você é novato. E é assim que se aprende. Perguntando.

Desse jeito o meu sistema vai ter um campo para cadastro, por exempo:

...dai para randomizar as opções da de multipla escolha, dá pra fazer depois não é?, usando algum random no php certo??
Sim. Mas não entendo nada de PHP. Duvidas sobre isso pergunte na seção PHP deste forum.

e a tabela PAI RESPOSTA e as tabelas FILHAS DISSERTATIVA E MULTIPLA_ESCOLHA

nunca fiz nada com tabelas pai e filha, como que eu represento isso?

e no teu modelo, não entendi a ligação da tabela resposta para dissertavia e multipla_escolha

Eu uso uma ferramenta chamada ERWin. Ela é melhor que a DBDesigner que você está usando pois trabalho com outros tipos de banco e com modelos conceituais e logicos, também, alé do modelo físico que você está representando em seu desenho. O desenho que fiz usei uma notação para modelo lógico. No seu caso basta colocar na tabela filha a chave primaria da tabela pai. o controle de que resposta vai para qual tabela passa pelo atributo TIPO_RESPOSTA que indicará se a resposta é disseertativa ou multipla escolha.

Verifique que há mais uma novidade para seu conhecimento que é a tabela RELACIONAMENTO PERGUNTA USUARIO. Esta é uma tabela ternaria que realiza o relacionamento M:N:O Muitos para muitos entre as tres tabelas USUARIO PERGUNTA e NIVEL.

Link para o comentário
Compartilhar em outros sites

  • 0

poiseh cara, me falaram que essa ERWin é bem melhor que o DBDesigner, só que o uso do DBDesigner é coisa da facul e tal.. dai tem que usar ele :S

aqui tem uma screen do modelo agora:

novooo.png

eu fiz o relacionamento N:M da tabela PERGUNTA para USUARIO

mas não ficou ligação com a tabela NIVEL...

e os relacionamentos e atributos das tabelas DISSERTATIVA e MULTIPLA_ESCOLHA estao corretos??

brigadaoo

Editado por buthy
Link para o comentário
Compartilhar em outros sites

  • 0

Oi, 'buthy',

Ainda não está correto.

Vamos as correções:

Vamos pensar um pouco:(eheh, uma analogia ao telecurso exibido pelo MEC)

A)Responda as perguntas:

1) Um usuário pertence a um único nível? Pode um usuário pertencer a mais de um nível?

Se a resposta for SIM para a primeira pergunta e NÃO para a segunda pergunta, então a resposta é a chave primária de usuario é composta do usr_codigo + nvl_codigo.

Se não a ligação atual está correta.

2) Novamente, pergunta está ligada a um único nível? Pode uma pergunta estar ligada a mais de um nível?

Se a resposta for SIM para a primeira pergunta e NÃO para a segunda pergunta, então a resposta é a chave primária de pergunta é composta do pgt_codigo + nvl_codigo.

Se não a ligação atual também está correta.

Qualquer que seja a resposta acima está faltando uma ligação entre nivel e pergunta_has_usuario

B)As chaves primárias de dissertativa e multipla_escolha são res_codigo. A ligação entre resposta e dissertativa é um relacionamento 1:1. Neste tipo de relacionamento a a chave primaria da tabela pai é a mesma da tabela filha. Ou seja, a tabela filha dissertativa deverá possuir como chave primária res_codigo.

O mesmo acontecerá no relacioamento entre resposta e multipla_escolha.

Link para o comentário
Compartilhar em outros sites

  • 0

Quanto as duvidas 1) e 2), estão corretas, é bem isso ai :D

editado:

bom, eu acho que estava fazendo algo errado..

se usa as ligações com nome New 1:1 Relation e New 1:n Relation certo?

eu estava usando essas: New 1:1 Non-Identifying-Relation e New 1:n Non-Identifying-Relation

então ficaria assim:

modelonovoo.png

mas as seguintes dúvidas persistem:

Que ligação eu tenho que fazer entre Nivel e Pergunta_has_Usuario? 1:1, 1:n, n:m?

Outra dúvida:

para eu deixar a chave primária das tabelas Resposta, Dissertativa e Multipla_Escolha sendo codigoResposta, é só eu mudar o nome das chaves primárias da Dissertativa e Multipla_Escolha para o mesmo nome (codigoResposta)?

ou (de acordo com o modelo novo acima) eu so teria que deletar as chaves primarias das tabelas Multipla_Escolha e Dissertativa (codigoMultipla_Escolha e codigoDissertativa) e deixar o resto como está?

Muito obrigado!

Editado por buthy
Link para o comentário
Compartilhar em outros sites

  • 0

Oi,'buthy'

editado:

bom, eu acho que estava fazendo algo errado..

se usa as ligações com nome New 1:1 Relation e New 1:n Relation certo?

eu estava usando essas: New 1:1 Non-Identifying-Relation e New 1:n Non-Identifying-Relation

Uma pequena lição. Vou explicar usando o relacionamento 1:N que é mais fácil.

Relacionamento não identificado: quando a chave foreign key não pertence a chave primaria da tabela filha.

Diz-se que é um relacionamento fraco. Pois a existencia de registro na tabela "filha"(a que é ligada pelo lado muitos da relação) não depende da chave estrangeura(foreign key) vinda da tabela "pai"(o lado 1 da relação) .

Relacionamento não identificado:quando a chave foreign key pertence a chave primaria da tabela filha.

Diz-se que é um relacionamento forte. Pois a existencia de registro na tabela "filha"(a que é ligada pelo lado muitos da relação) depende da chave estrangeura(foreign key) vinda da tabela "pai"(o lado 1 da relação) .

Que ligação eu tenho que fazer entre Nivel e Pergunta_has_Usuario? 1:1, 1:n, n:m?
Fisicamente não existe relacionamento N:M (muitos para muitos). O que existe é 1:N ou 1:1. Conforme a pergunta acima o relacionamento indicado é 1:N identificado.

Outra dúvida:

para eu deixar a chave primária das tabelas Resposta, Dissertativa e Multipla_Escolha sendo codigoResposta, é só eu mudar o nome das chaves primárias da Dissertativa e Multipla_Escolha para o mesmo nome (codigoResposta)?

ou (de acordo com o modelo novo acima) eu so teria que deletar as chaves primarias das tabelas Multipla_Escolha e Dissertativa (codigoMultipla_Escolha e codigoDissertativa) e deixar o resto como está?

As chaves primarias estão descritas no desenho que passei anexo a um post anterior e devem seguir o descrito abaixo:

Tabela               Chave primária
Nivel                CodigoNivel;
Usuario              CodigoUsuario,  CodigoNivel;
Pergunta             CodigoPergunta, CodigoNivel;
Pergunta_Has_Usuario CodigoUsuario,  CodigoPergunta, CodigoNivel;
Resposta             CodigoResposta;
Multipla_escolha     CodigoResposta;
Dissertativa         CodigoResposta;

A ligação entre resposta e pergunta é um relacionamenro 1:N não identificado (nesta ordem).

Link para o comentário
Compartilhar em outros sites

  • 0

beleza, acho que entendi.

Modelo novo:

2modemaisnovo.png

Então, quanto as ligações:

relacionamento 1:n identificado entre a tabela Nivel e Usuario

relacionamento 1:n identificado entre a tabela Nivel e Pergunta

relacionamento n:m entre a tabela Pergunta e Usuario

relacionamento 1:n identificado entre a tabela Nivel e Pergunta_has_Usuario

relacionamento 1:n não-identificado entra a tabela Pergunta e Resposta

relacionamento 1:1 identificado entre a tabela Resposta e Dissertativa

relacionamento 1:1 identificado entre a tabela Resposta e Multipla_Escolha

tá 100% agora? ou tem mais algum erro??

e será que a ligação entre Nivel e Pergunta_has_Usuario é necessária? já que a tabela Pergunta_has_Usuario puxa a chave primária codigoNivel da tabela Usuario?

Brigadao

Editado por buthy
Link para o comentário
Compartilhar em outros sites

  • 0

Oi, 'buthy'

...Então, quanto as ligações:

1) relacionamento 1:n identificado entre a tabela Nivel e Usuario

2) relacionamento 1:n identificado entre a tabela Nivel e Pergunta

3) relacionamento n:m entre a tabela Pergunta e Usuario

4) relacionamento 1:n identificado entre a tabela Nivel e Pergunta_has_Usuario

5) relacionamento 1:n não-identificado entra a tabela Pergunta e Resposta

6) relacionamento 1:1 identificado entre a tabela Resposta e Dissertativa

7) relacionamento 1:1 identificado entre a tabela Resposta e Multipla_Escolha

1)OK

2)OK

3)OK

4) Respondendo a

e será que a ligação entre Nivel e Pergunta_has_Usuario é necessária? já que a tabela Pergunta_has_Usuario puxa a chave primária codigoNivel da tabela Usuario?
Realmente não há necessidade deste relacionamento.

5) Relacionamento entre Pergunta e resposta. Em minha visão o relacionamento atual está invertido. Uma pergunta não pode estar em mais de uma resposta. Pode? E uma resposta pode pertencer a mais de uam pergunta? Se sim para as duas perguntas então temos outro relacionamento N:M. Se não, coloque o relacioinamento partindo da direção que você vê como correta.

6) OK

7) OK

O mais importante. Você consegue explicar tudo isso a seu professor? (Pois meus alunos tem que me explicar como chegaram a conclusão dita por eles)

Link para o comentário
Compartilhar em outros sites

  • 0

Certo, então ficaria um relacionamento 1:1 entre Pergunta e Resposta?

uma pergunta só pode ter uma resposta

mas dai tem as multiplas escolhas, que tem 4 respostas, sendo 1 correta :S

E quanto a explicar ao professor, creio que eu consigo

pelo tanto que eu pesquisei e tal... devo ta ficando menos ruim nisso ashuiashasiuasuih

Editado por buthy
Link para o comentário
Compartilhar em outros sites

  • 0
Certo, então ficaria um relacionamento 1:1 entre Pergunta e Resposta?

uma pergunta só pode ter uma resposta

mas dai tem as multiplas escolhas, que tem 4 respostas, sendo 1 correta :S

E quanto a explicar ao professor, creio que eu consigo

pelo tanto que eu pesquisei e tal... devo ta ficando menos ruim nisso ashuiashasiuasuih

Minha visão para este odelo é um sistema abarto. então uma resposta pode estar em várias perguntas. Neste caso deria o relacionamento de 1 Resposta para N perguntas.

Um exemplo diasso são as perguntas:

Quanto é 2 + 2?

Quanto é 2 x 2?

O resultado é o mesmo. 4

Quanto ao modelo de múltipla esciolha você só deveria ter a resposta certa. as outras o seu programa controla. Não há a necessidade de armazená-las em banco.

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, 'buthy'

Mas não tem problema armazenar no banco as erradas?
Não há problema pode informar sim.

Você pode uasr uma tabela secundária para informar as respostas erradas àquela pergunta e/ou criar um auto relacionamento

1:N em multipla_escolha para guardar as respostas erradas na própria tabela.

que seria um portal de ensino, dai no cadastro você iria ter que preencher todas as alternativas para mostrar aos alunos
Neste caso não seria melhor você criar um atributo em Pergunta_has_Usuario informando a resposta do usuário para aquela pergunta?
Link para o comentário
Compartilhar em outros sites

  • 0
Não há problema pode informar sim.

Você pode uasr uma tabela secundária para informar as respostas erradasàquela pergunta e/ou criar um auto relacionamento

1:N em multipla_escolha para guardar as respostas erradas na própria tabela.

Hmm, mas deixando assim não fica mais facil??

Neste caso não seria melhor você criar um atributo em Pergunta_has_Usuario informando a resposta do usuário para aquela pergunta?

Como assim? não entendi...

Link para o comentário
Compartilhar em outros sites

  • 0
Não há problema pode informar sim.

Você pode uasr uma tabela secundária para informar as respostas erradas àquela pergunta e/ou criar um auto relacionamento

1:N em multipla_escolha para guardar as respostas erradas na própria tabela.

Hmm, mas deixando assim não fica mais facil??
Fica mais fácil, sim. Mas fica errado e desnormalizado. A tabela de multipla escolha ficará na forma normal 2 e não na 3.

Neste caso não seria melhor você criar um atributo em Pergunta_has_Usuario informando a resposta do usuário para aquela pergunta?

Como assim? não entendi...

Como você pretende guardar as respostas dadas pelos usuários? Este é o melhor meio.
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...