Разработка отношений с тремя объектами, где два объекта не имеют отношения
Попытка реализовать модель ER, где у меня есть лица: учитель, студент, документы и отношения: публикует, советует. Публиковать статью может как учитель, так и ученик, но советовать может только учитель. Должен ли я дублировать отношения публикаций как для ученика, так и для учителя, или я могу сделать так, чтобы отношения были трехсторонними без каких-либо отношений между учителем и учеником?
1 ответ
Похоже, вы могли бы смоделировать это так:
student(student_id, name, etc)
teacher(teacher_id, name, etc)
paper(paper_id, title, text, etc)
contributor(contributor_id, paper_id, contribution_type, contributor_type)
Где тип вклада - это enum (издатель, консультант) и аналогичным типом вклада является enum (учитель, ученик)... или логическое значение is_publisher, is_adviser.
Недостатком является то, что это не позволяет использовать внешние ключи от участника к ученику / учителю, и у вас нет жестких ограничений от консультантов до преподавателей. Советник таблицы (teacher_id, paper_id) допускает ограничение на советники, но по-прежнему не допускает ограничения или внешние ключи для идентификаторов учеников.
Другие варианты могут быть разбиты на:
teacher_contribution(teacher_id, paper_id, is_adviser)
student_contribution(student_id, paper_id)
что позволит полностью ограничить базу данных предполагаемой моделью, но в некоторых ситуациях запрос будет сложнее.
Любые приемлемы. Это в некоторой степени зависит от вашего конкретного приложения и от того, как вы собираетесь запрашивать данные.