Architecture advice for site with lessons that belong to courses I need to build out a site that features courses and lessons, each defined as a content type. I currently have the site running with lessons linked to courses using entity reference (entity reference field is in lessons) and use EVA to attach a view of lessons to each course. (see screen below for reference)

This works fine, however I now have a new requirement to allow lessons to be re-used across multiple courses. This means:


Courses can contain multiple lessons
Lessons can appear in more than one course
Lessons appear in "sections" which are custom per course
Lesson and section sort order is custom per course
Courses need to be able to handle up about 150 lessons per course


Since lessons need to appear in sections, the link requires both a reference and a section. I've experimented building this out with field collections embedded in the course entity. This works pretty well, but performance degrades significantly after about 30 lessons are added to a course.

To avoid the performance problem, another approach I'm considering is to code a compound field (entity reference with a text field) that would be added as an unlimited value field to the course content type.

Before I try the compound field approach, I'm seeking input/advice on the architecture for this solution. Given the requirements, and available D7 functionality, what approach makes most sense?
How about this unproven setup.

Create a third content type, Sections. Courses reference sections with a mutli-value entity reference field, which you can drag/drop the order of this field from the node edit form. You can use inline entity form to assist with content creation.

Then, reference Lessons from Sections with a multi-value entity reference field, also allowing you to drag/drop the order of the field values. Not sure if you can use the inline entity form within an inline entity form...maybe.

Then, you can continue to use EVA on both the courses and sections to display view results, using a node id contextual filter...I assume.

Or, you could just render the referenced entity, selecting a custom display mode, which you theme accordingly. This may offer better performance.