Closed gabiMSilva closed 4 years ago
Algumas ferramentas para realizar a tarefa: BrModelo, LucidChart, Diagrams.net
Eu tenho 2 dúvidas sobre a aplicação que pode influenciar a modelagem do Banco de Dados:
Eu tenho 2 dúvidas sobre a aplicação que pode influenciar a modelagem do Banco de Dados:
- O conteúdo do tutorial, estará no backend?
- O mentor também poderá criar tópicos no fórum, ou somente responde-las?
Qualquer usuário autenticado pode criar e responder aos tópicos no fórum, seja monitor ou aprendiz.
Quanto ao tutorial estar ou não no banco, nós havíamos pensado em colocar os .md no repositório e salvar o nome do arquivo a que ele se refere no banco.
Estava pensando sobre as atividades que seriam propostas no tutorial e gostaria de saber se será proposto questões discursivas ?
Sobre os atributos de algumas entidades estava em dúvida se precisa colocar um atributo ID em algumas classes como por exemplo "mento" e "aprendiz" já que o e-mail de login poderia ser um atributo identificador ? outras entidades seriam a entidade "atividade", já que como só vai existir um tutorial na aplicação, o numero da atividade já poderia ser usado como um ID, e também a entidade "fórum" que já seria vinculado a uma aula.
Estava pensando sobre as atividades que seriam propostas no tutorial e gostaria de saber se será proposto questões discursivas ?
Não nessa matéria, pq precisaríamos adicionar correções pelo monitor e nosso roadmap já está bem pesado. Mas é interessante colocar um type no banco que indique o tipo da atividade (por enquanto apenas multipla escolha) para essa história poder ser implementada fora da matéria.
Sobre os atributos de algumas entidades estava em dúvida se precisa colocar um atributo ID em algumas classes como por exemplo "mento" e "aprendiz" já que o e-mail de login poderia ser um atributo identificador ? outras entidades seriam a entidade "atividade", já que como só vai existir um tutorial na aplicação, o numero da atividade já poderia ser usado como um ID, e também a entidade "fórum" que já seria vinculado a uma aula.
É uma boa prática evitarmos o id quando podemos usar outro atributo identificador. Então use essa regra: se tem um atributo (ou mais de um combinado com outro) que SEMPRE será único e nunca será nulo, use ele, se não adicione ID.
No caso do fórum e da atividade, é necessário o id e uma chave estrangeira (que vem de outra tabela) que é o id da seção do tutorial
Pensamos sobre existir uma entidade "Administrador", no caso de fazer alguma modificação na plataforma, ou ter poderes de permissão. Porém estamos tendo algumas dúvidas sobre sobre como ele se encaixa de fato na aplicação. Pensando numa ideia de orientação a objetos, pensamos que poderia ter uma classe "Pessoa" que teria 2 filhos: "Administrador" e "Usuário", e usuário teria dois filhos: "Mentor" e "Aprendiz", já que eles compartilham vários atributos, enquanto que administrador nem tantos. Então minha dúvida é: Devemos colocar uma entidade "Administrador" ou um "Mentor" poderia ter esses poderes administrativos? e, se caso haja um "Administrador", devemos organizar as entidades dessa forma, ou vocês sugerem uma forma diferente de organização e relação?
Pensamos sobre existir uma entidade "Administrador", no caso de fazer alguma modificação na plataforma, ou ter poderes de permissão. Porém estamos tendo algumas dúvidas sobre sobre como ele se encaixa de fato na aplicação. Pensando numa ideia de orientação a objetos, pensamos que poderia ter uma classe "Pessoa" que teria 2 filhos: "Administrador" e "Usuário", e usuário teria dois filhos: "Mentor" e "Aprendiz", já que eles compartilham vários atributos, enquanto que administrador nem tantos. Então minha dúvida é: Devemos colocar uma entidade "Administrador" ou um "Mentor" poderia ter esses poderes administrativos? e, se caso haja um "Administrador", devemos organizar as entidades dessa forma, ou vocês sugerem uma forma diferente de organização e relação?
Então, geralmente o admistrador é um campo boooleano do User, a classe pai. Então a melhor implementação nessse caso, ao menos em uma primeira visão, é ter: User: (name, password,..,is_admin) Mentor: herda de User + seus próprios atributos Learner: herda de User + seus próprios atributos
Veja que o is_admin identifica o adm. Crie uma entidade para adm SOMENTE SE ele possuir atributos a mais de User, e eu imagino que não tem não.
Pensamos sobre existir uma entidade "Administrador", no caso de fazer alguma modificação na plataforma, ou ter poderes de permissão. Porém estamos tendo algumas dúvidas sobre sobre como ele se encaixa de fato na aplicação. Pensando numa ideia de orientação a objetos, pensamos que poderia ter uma classe "Pessoa" que teria 2 filhos: "Administrador" e "Usuário", e usuário teria dois filhos: "Mentor" e "Aprendiz", já que eles compartilham vários atributos, enquanto que administrador nem tantos. Então minha dúvida é: Devemos colocar uma entidade "Administrador" ou um "Mentor" poderia ter esses poderes administrativos? e, se caso haja um "Administrador", devemos organizar as entidades dessa forma, ou vocês sugerem uma forma diferente de organização e relação?
Então, geralmente o admistrador é um campo boooleano do User, a classe pai. Então a melhor implementação nessse caso, ao menos em uma primeira visão, é ter: User: (name, password,..,is_admin) Mentor: herda de User + seus próprios atributos Learner: herda de User + seus próprios atributos
Veja que o is_admin identifica o adm. Crie uma entidade para adm SOMENTE SE ele possuir atributos a mais de User, e eu imagino que não tem não.
Tudo bem então, realmente Administrador nao teria atributos alem dos que ja existem em Usuário. Obrigado !!!
Como ficaria melhor implementado um chat?
Eu não sei se terá a opção de apagar mensagem na aplicação, mas supondo que tenha, acho que seria importante que o chat de um seja desvinculado do outro, para que o usuário possa apagar a mensagem sem interferir no chat do outro. Mas em questão de otimização seria ruim, tendo em conta que estaríamos armazenando duas vezes a mesma mensagem.
Tem alguma forma de contornar esse problema?
Como ficaria melhor implementado um chat?
- Ele sendo um atributo de usuário?
- Ele sendo um objeto a parte?
Eu não sei se terá a opção de apagar mensagem na aplicação, mas supondo que tenha, acho que seria importante que o chat de um seja desvinculado do outro, para que o usuário possa apagar a mensagem sem interferir no chat do outro. Mas em questão de otimização seria ruim, tendo em conta que estaríamos armazenando duas vezes a mesma mensagem.
Tem alguma forma de contornar esse problema?
Não tem necessidade do usuário editar ou excluir uma mensagem já enviada. Uma mensagem só precisa ter o identificador do remetente, o identificador do destinatário, o texto da mensagem e a data.
Como ficaria melhor implementado um chat?
Só reforçando que nosso chat é só uma forma primária de comunicação. Então ele poderá seguir o exemplo do Moodle. Deêm um olhada lá para entender melhor. Isso é importante ser definido em conjunto com a dupla do #25 @EduardoPicolo @JaimeJuan11
[x] Adicionar cardinalidade nas relações
[x] Tirar todos os "pode" nas relações, usar uma unica palavra significativa
[x] Adicionar setas
[x] Trocar por inglês e usar regras de atributo. Ex: É administrador? se torna is_admin
[x] Adicionar ID em todas as entidades, menos usuario
[ ] Adicionar a notação de chaves primárias
[x] Aula: sugiro trocar o nome da entidade de Aula para Módulo caminho para o documento -> não é atributo (foi falado pra vcs, perdão, mas vimos que não se encaixa) remover atividade
[x] Questão - singular adicionar atributo link para o modulo/aula que ela pertence Remover alternativas Remover Tipo Resposta
[x] Tópico que tal trocar por Post ou Pergunta? Fica mais claro. Apenas sugestão, não obrigatório. Trocar Usuário Relacionado por Autor Remover respostas Adicionar likes como atributo Adicionar relação com aula/modulo
[x] Reposta - singular Trocar Usuário Relacionado por Autor Adicionar likes
[x] Usuario É uma especialização, busquem pela notação correta Tirar pontos de rank, é programatico Trocar login por username Adicionar email - é o ID do usuario
[x] Mensagem Trocar Quem escreveu por Autor
[x] Chat Não precisa de ID, o identificador pode ser id do mentor + id do aprendiz
[x] Fórum
[x] Atividade
[x] Única Resposta
[x] Verdadeiro ou Falso
[x] Múltipla Resposta
[x] Alternativa Atributos: description, is_correct, question. Se relaciona com questao DIRETAMENTE
[x] Certificado: user, date, final_grade .... (outros que acharem relevante)
[x] ResultadoQuestao alternativa_aprendiz, questao, aprendiz
TS14 - Fazer Modelagem do Banco de Dados
Descrição
Desenhar o banco de dados que será acessado pelo backend
Solução
Modelar o banco de dados e preencher um DER (Diagrama Entidade-Relacionamento) como demonstração.
Critérios de Aceitação