Modelo Entidade-Relacionamento é a conhecida modelagem da base de dados com suas entidades, atributos e relacionamentos.
A princípio, parece um modelo bastante simples de se fazer quando nos concentramos na realidade. Ou seja, se os atributos de cada entidade e os relacionamentos das entidades são realmente condizentes com a realidade em qualquer circunstância. É importante se preocupar com os nomes dados às entidades e os pontos onde elas podem ser quebradas para evitar a duplicação de dados.
Existe, porém, um detalhe que observei recentemente: parece existir uma tendência natural do modelador ligar algumas entidades às entidades que representam pessoas ao invés de ligá-las onde realmente preservaria a integridade referencial.
Por exemplo, leve em conta as seguintes entidades:
- aluno (um aluno matriculado em um curso)
- pessoa (uma pessoa qualquer do planeta)
- oferta de disciplina (uma disciplina oferecida em um determinado período por um professor)
- atividade avaliativa da oferta de disciplina (atividade que alunos matriculados na oferta de disciplina realizam para obter nota)
- matrícula do aluno em oferta de disciplina (entidade que representa a relação de um aluno com uma oferta de disciplina, indicando que o aluno cursa a disciplina)
- nota do aluno em uma atividade (nota obtida por um aluno em uma atividade avaliativa de uma oferta de disciplina)
Considere que "aluno" aponta para "pessoa" (afinal, um aluno é uma pessoa); que "oferta de disciplina" possui várias "atividades avaliativas"; que "oferta de disciplina" possui vários "alunos" associados (várias matrículas); e que "atividade avaliativa" possui várias "notas" de alunos.
Com quais entidades você ligaria a "nota do aluno em uma atividade"?
- Ligaria com "atividade avaliativa" e com "pessoa"
- Ligaria com "atividade avaliativa" e com "aluno"
- Ligaria com "atividade avaliativa" e com "matrícula"
Talvez se atentando ao que eu comentei, você tenha respondido a alternativa (c), que seria a alternativa (a meu ver) mais adequada. Mas e se estivesse de cara com o problema e não houvessem alternativas, você chegaria a esta conclusão?
A ligação da "nota" com "atividade avaliativa" é óbvia. Mas a ligação entre "nota" e "matrícula" nem sempre é determinada com clareza. Afinal, "matrícula", a princípio, não parece ser uma pessoa, então, como algo que não é uma pessoa pode ter obtido nota em algo? Na verdade, é apenas uma questão de interpretação da entidade. Você pode considerar que uma "matrícula" é um "aluno que está matriculado em uma oferta de disciplina específica" e que "aluno" é uma "pessoa matriculada em um curso específico". Quais destas pessoas obteve determinada nota em uma oferta de disciplina? Pode ter sido ambos. Mas com a primeira alternativa, certamente a base de dados será mais integra. Com a segunda alternativa, pode existir a nota de um aluno em uma oferta de disciplina sem o aluno estar matriculado na disciplina. Já na primeira alternativa, você só consegue criar uma nota para uma matrícula que, por sua vez, indica qual aluno obteve a nota.
Enfim, modelar uma base de dados com precisão é um trabalho que deve ser feito com bastante cuidado, especialmente em relação às proposições que você considera verdadeiras.
0 comentários
Postar um comentário
Nota: fique a vontade para expressar o que achou deste artigo ou do blog.
Dica: para acompanhar as respostas, acesse com uma conta do Google e marque a opção "Notifique-me".
Atenção: o blogger não permite inclusão de tags nos comentários, por isso, use algum site externo para postar seu código com dúvidas e deixe o link aqui. Exemplo: pastebin.com