Diagrama ER e Diagrama de Classe

Estou desenvolvendo um sistema para gestão de uma biblioteca e queria saber se a modelagem do Diagrama ER (Entidade Relacionamento) está correta. Eu acredito fortemente que sim, mas estou totalmente aberto para críticas e novas ideias.

++

A modelagem do modelo diagrama ER foi baseado neste outro diagrama de classes, feito por mim:

Bem, acredito que com essas informações já seja possível dar um feedback

A modelagem depende dos requisitos. Olhando seu diagrama há algumas inconsistências. Vc apresenta uma tabela chamada Carteirinha, mas o primeiro atributo é o id do aluno. Sua tabela deveria chamar Aluno certo? Se o código da carteirinha do aluno é o próprio id dele e vc não precisa de mais nenhum dado para representar a carteirinha, então vc não precisa de uma tabela para as carteirinhas. Há também algumas questões de normalização para se pensar. Veja, na tabela livro você tem os atributos genero e autor. Será que não faz mais sentido você ter tabelas separadas para esses atributos? O mesmo acontece com turma em Carteirinha. Eu particularmente não gosto de colocar o nome da tabela junto ao nome dos atributos, para mim não faz sentido, então seus id deveriam se chamar apenas id não idAluno, idEmprestimo etc. Outra coisa, seus livros tem uma quantidade. Se vc precisa saber qual livro foi emprestado de fato, vc deve pensar nisso de outra forma. Vc poderia ter o livro base, com os dados dele e então uma tabela “exemplar” que se relacionaria com o livro. Outra coisa, um livro pode ter mais de um autor… Enfim, fiz uma modelagem rápida aqui me baseando no que você apresentou, mas de novo, sua modelagem depende dos requisitos. O tipo e precisão dos atributos vc precisaria ajustar. Vou mandar o arquivo do Workbench para vc tbm.


biblioteca.mwb (14,9,KB)

3 curtidas

Primeiramente, muito obrigado. Agora, sobre o nome da tabela “Carteirinha” que contém o idAluno, eu realmente me esqueci de trocar o nome da tabela. Ainda sobre a tabela “Carteirinha”, acho que vale a pena ressaltar que anteriormente ela existia de forma separada da tabela “Aluno”, mas, devido às regras de relacionamento 1 para 1, juntei as duas em uma só. Já sobre o nome da tabela junto ao atributo, até mesmo no livro “Clean Code” e em outros lugares que já li, recomendam evitar esse tipo de nomenclatura, e é o que estarei adotando em futuros projetos.

Outro detalhe é que essas observações me fizeram perceber que talvez eu estivesse violando o princípio da responsabilidade única em alguns pontos, principalmente na parte do autor e gênero. E novamente, muito obrigado por contribuir.

Também gostaria de perguntar sobre as relações que você criou; elas são de 1 para muitos e seguem a regra da tabela que tem muitos para carregar a chave estrangeira. Até aí, deu para entender, mas o que eu não estou tão familiarizado são com essas linhas da relação. Poderia me recomendar algum artigo ou vídeo sobre esse conteúdo?

Kauã, as linhas são apenas a forma que eu configurei meu Workbench para apresentar os relacionamentos. Abra o modelo no seu Workbench que provavelmente aparecerá da forma que você está acostumado (a notação do pé de galinha). Para alterar isso na ferramenta vá no menu Model → Relationship Notation. A que eu prefiro usar é a “Connected Columns”. Acho que é mais didática para meus alunos.

1 curtida

Sem requisitos, é impossível saber se está certo. Até mesmo com requisitos muito bem definidos, pode-se ficar debatendo diferentes formas de se fazer.

Por exemplo, um aluno sempre tem a mesma carteirinha? Pode ser que uma carteirinha tenha sido cancelada, ou o aluno perdeu e tirou a segunda via. Mas aí passa a ser outra carteirinha, então talvez precise ter data de vigência, algum status para indicar qual está ativa (e qual foi perdida, expirada, cancelada, etc). Claro, isso se tiver requisitos que dizem que será assim. Sem requisitos, qualquer coisa pode estar “certa” ou “errada”.

Um mesmo livro pode ter edições diferentes, e cada edição pode ter uma quantidade diferente de exemplares. Talvez cada exemplar tenha um código de identificação interno para saber quem está com qual. E livros têm ISBN.

E por que bibliotecário e empréstimo tem uma relação 1:1? Um bibliotecário só pode fazer um empréstimo? Creio que 1:N faça mais sentido.

Enfim, dá pra ficar discutindo indefinidamente. Se tiver os requisitos, aí dá pra focar mais a discussão.

1 curtida

Sobre isso dos requisitos, foi algo que eu esqueci de mencionar aqui, mas o que eu tenho como levantamento são alguns detalhes que rascunhei enquanto estive no colégio. Os alunos de um colégio integral podem pegar emprestado apenas um livro por vez na biblioteca, sendo que um livro pode ter vários exemplares, os quais também podem ter sido emprestados. Uma vez que o empréstimo é realizado, queremos fazer com que exista um controle dos livros que foram emprestados, a quantidade de exemplares restantes e com quais alunos se encontram os outros exemplares. Além disso, também deve constar um status com a descrição se o empréstimo está dentro do prazo ou não.

++

Realizei algumas correções no meu diagrama de classes para que ele pudesse se adequar aos requisitos: