Вы здесь

Оптимальный способ связи сущностей "учебная программа" и "учащийся".

0

Добрый день.

Намечается следующая задачка.

Есть сущность "Учебная программа", содержащая название, описание и некие атрибуты.
И есть сущность "Учащийся", которая также содержит некие атрибуты.

И вот есть задачка - связать эти сущности по типу "многие-ко-многим". То есть, чтобы по одной учебной программе могли заниматься несколько учащихся, а один учащийся мог заниматься по нескольким учебным программам.

Причем, чтобы это была не просто связь, а чтобы там хранились свои атрибуты.
Например, дата начала обучения, дата окончания обучения, несколько различных отметок и оценок - учебных, психологических и т.д. (насколько был внимателен, насколько был активен, уровень мотивации, уровень интереса и т.д.)

Количество учебных программ - ну, может, несколько сотен всего.
Количество учеников - думаю, десятки тысяч, может, сотни тысяч.
Каждый ученик обучается где-то в десяти программах.

И вот возник вопрос - каким образом это было бы лучше всего хранить, чтобы впоследствии можно было без излишних проблем сопровождать, дорабатывать и т.д.

Вижу как минимум три варианта.

  1. Хранить связь "Обучение ученика по программе" в виде ноды. Чтобы в ней была ссылка на программу, ссылка на ученика и атрибуты в виде доп. полей.

  2. Написать под это дело свою Entity (при помощи конструктора, либо руками)

  3. Использовать OrganicGroups. Учебная программа является группой, а учащиеся являются членами группы.

И вот хочу проконсультироваться у сообщества.

Скажите пожалуйста, если у кого-либо была похожая задача, то каким образом вы её решили ?

И если под это дело использовать OrganicGroups, то есть ли там функционал по добавлению доп. атрибутов в членство участника в группе ? Например, чтобы там можно было не просто указать, что такой-то участник является членом такой-то группы, но и что членство в группе с такого-то по такое-то число, что есть какие-то другие характеристики и т.д.

И вот еще вопрос. По производительности использование OG - хорошее решение ? Не будет ли это тормозить при большом количестве OG и участников в них ?

Версия Drupal: 
7.x
Категория: 
Entity API
Связанные проекты: 
Entity API
Вопрос задан 15.01.2016 - 11:33

Тут пока не решено.
Потому что еще не понятно, будут ли принципиально эти ученики сами регистрироваться на сайте.
Я склоняюсь к тому, чтобы их хранить в любом случае как users, хотя, может быть, их придется хранить как ноды.

Комментарий оставлен 15.01.2016 - 11:56

Ответы

1

Я бы связь с помощью Field collecion делал.

Ответ дан 15.01.2016 - 19:11
Аватар пользователя xandeadx
xandeadx
1542

Не совсем понятно, какую информацию помещать в FieldCollection.
Я уже здесь начинаю склоняться к мысли, что лучший вариант для этого - делать свои сущности с помощью ECK и с ними далее работать.

Комментарий оставлен 15.01.2016 - 19:42

В учебную программу добавить поле field collection, в поле добавить поля - учащийся, дата начала обучения, ...

Комментарий оставлен 15.01.2016 - 20:02

Field collecion - модуль шибко специфичный, да и как бэ не для таких задач.

Комментарий оставлен 15.01.2016 - 20:03

Дело в том, что учащихся может быть в сумме несколько десятков, а то и за сотню зашкаливать.

Комментарий оставлен 15.01.2016 - 20:15

делать через eck или field collection - одно и тоже
только промежуточная сущность по-разному будет называться

Комментарий оставлен 15.01.2016 - 20:30
1

Если уж ученики юзерами будут, то можно от референсов до флагов заюзать.
Если ученик сам записывается, то пусть флагает нужные курсы

Ответ дан 15.01.2016 - 21:41
1

Как раз для такой задачи есть модуль Relation. По сути, это 2 вариант из ваших возможных решений - relation - является fieldable entity, так что можно на нем хранить и доп. информацию. Сам не пользовался, не могу сказать как он будет справляться с большим числом связей. Но уж точно быстрее, чем отдельный тип ноды с ссылками на ученика и программу.

Ответ дан 16.01.2016 - 00:21

Спасибо, надо будет попробовать, потестировать ...

Комментарий оставлен 16.01.2016 - 14:05
1

К сожалению, поздно увидел вопрос.

На мой взгляд лучше через сущность "запись на курс" и там уже добавлять ссылку на курс и ссылку на учащегося. Так появляется возможность хранить все доп. атрибуты, описывающие период обучения (вы о них написали в вопросе). Автоматизация создания такой сущности и заполнения атрибутов возможна через rules.

Эта тема мне интересна так как совпадает с работой по аспирантуре. На dupal есть несколько решений для построения LMS. В частности можно посмотреть как подобные задачи решаются в https://www.drupal.org/project/opigno

Ответ дан 19.01.2016 - 01:22
Аватар пользователя Advin
Advin
27

В общем, пытаюсь создать сущность и возникает проблема.

Создал сущность в ECK, добавил две своих property - program_id и student_id.
Если им при добавлении установить поведение в EntityReference, то возникает ошибка

Notice: Undefined index: config в функции eck_entity_reference_property_property_info() (строка 37 в файле /home/admin/web/dru7.bricksite.ru/public_html/sites/all/modules/eck/plugins/property_behavior/entity_reference.inc).
Notice: Undefined index: config в функции eck_entity_reference_property_property_info() (строка 37 в файле /home/admin/web/dru7.bricksite.ru/public_html/sites/all/modules/eck/plugins/property_behavior/entity_reference.inc).
Notice: Undefined index: entity keys в функции entity_views_field_definition() (строка 196 в файле /home/admin/web/dru7.bricksite.ru/public_html/sites/all/modules/entity/views/entity.views.inc).
Notice: Undefined index: entity keys в функции entity_views_field_definition() (строка 196 в файле /home/admin/web/dru7.bricksite.ru/public_html/sites/all/modules/entity/views/entity.views.inc).

А если не добавлять, то связи по этим property по views не создаются.
То есть, если я строю views на базе этой сущности, то создать связи на ноды, на которые ссылаются program_id и student_id, не получается - их нет в связях.

Как сделать так, чтобы при создании сущности в ECK во views были связи по этим properties ?
Пробовал ECK, скачивая как модуль rc-8, так и модуль dev.

Комментарий оставлен 19.01.2016 - 07:32