fga-eps-mds / 2020.1-Minacademy-Wiki

https://fga-eps-mds.github.io/2020.1-Minacademy-Wiki/
GNU General Public License v3.0
2 stars 0 forks source link

TS14 - Fazer Modelagem do Banco de Dados #26

Closed gabiMSilva closed 4 years ago

gabiMSilva commented 4 years ago

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

gabiMSilva commented 4 years ago

https://www.devmedia.com.br/modelo-entidade-relacionamento-mer-e-diagrama-entidade-relacionamento-der/14332

gabiMSilva commented 4 years ago

https://www.lucidchart.com/pages/pt/o-que-e-diagrama-entidade-relacionamento

gabiMSilva commented 4 years ago

https://felipetoscano.com.br/modelando-dados-no-mongodb/

GeovanaRamos commented 4 years ago

Algumas ferramentas para realizar a tarefa: BrModelo, LucidChart, Diagrams.net

Rocsantos commented 4 years ago

Eu tenho 2 dúvidas sobre a aplicação que pode influenciar a modelagem do Banco de Dados:

gabiMSilva commented 4 years ago

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.

estevaoreis25 commented 4 years ago

Estava pensando sobre as atividades que seriam propostas no tutorial e gostaria de saber se será proposto questões discursivas ?

estevaoreis25 commented 4 years ago

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.

gabiMSilva commented 4 years ago

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.

gabiMSilva commented 4 years ago

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

estevaoreis25 commented 4 years ago

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?

GeovanaRamos commented 4 years ago

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.

estevaoreis25 commented 4 years ago

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 !!!

Rocsantos commented 4 years ago

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?

gabiMSilva commented 4 years ago

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.

GeovanaRamos commented 4 years ago

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

GeovanaRamos commented 4 years ago

image

CORREÇÕES