Trying to model proper parent / child relationship for this data structure?

(Alex Smirnov) #1

is parent / child relationship a good way to model this data ?

we have the following data sets:
bunch of data vendors (vendors)
each vendor has many events (events)
each event has many sessions (sessions)
each session can have different variations: duration, complexity, level, etc (variations)

vendor can have many events
each event can have many sessions
each session can be part of multiple events
each session can have multiple variations

customer-facing website allows to filter by any of the available property all the way from vendor down to specific variation (like show me all advanced courses, or all beginner sales sessions, etc.)

to make these filters work - we combine all available data about each variation in a single document and utilize aggregations on all meaningful for search fields and we end up with a complete document for each variation that is comprised of variation+session+event+vendor+catalogs. And this results in over 10,000,000+ active documents

Once a seat is reserved we update total count of available seats in this session and have to update all documents+variations that a somehow related to this session.

Additional factors:
many sessions can be promoted by multiple vendors through a series of different events, ie:

  1. vendor ABC promotes event MARKETING and in this event they offer 5 sessions on how to market your products (session QWE, session AAA, session BBB, session CCC, session DDD)
  2. vendor XYZ promotes event SALES and in this event they offer only 2 sessions where one of the sessions from #1 vendor cross-overs.
  3. whenever registration is made - we update availability counters

Idea is to keep data very clean and easily updatable and accessible to be able to pull all events that offer MARKETING, or all sessions that are offered by a vendor, or any other scenario to be able to select data from any aspect in this chain as well as allow user to filter by additional parameters like complexity, duration and level of event.

It almost seems like parent <> child relationship is a very good fit for this use-case, however, since many of the components can have various number of linkable chains (ie. one-to-many relationships) - I can't seem to be able to figure out if this is a right approach or if there's anything else that allows me to update EVENT once and have updated info automatically available as part of single document.

(system) #2