Cuidados com o Modelo Entidade-Relacionamento

Artigo que apresenta algumas dicas sobre a modelagem de entidades-relacionamentos, ou modelagem de BD, a fim de evitar problemas de implementação no futuro.

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"?

  1. Ligaria com "atividade avaliativa" e com "pessoa"
  2. Ligaria com "atividade avaliativa" e com "aluno"
  3. 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