Join Subset Constraints in ORM are used to specify conditions that must be satisfied when navigating Join Paths. These constraints can be used to constrain the set of related objects that are allowable within Fact Types when navigating through the associated Join Paths.
In Object-Role Modeling, Fact Types are used to express associations between Object Types. These associations are expressed in terms of Roles played by their associated Object Types. A Join Path is a means of navigating the Roles of Fact Types in order to infer associations between Object Types that are not directly related.
In Object-Role Modeling, roles are drawn as boxes, and the collection of one or more Roles reprents a Fact Type.
For example, consider a schema that models a university with Object Types for Student, Unit, and Faculty. Suppose that each student enrols in one or more courses, and each course is offered by a faculty. We can express these associations using a set of Fact Types as follows:
We can use a Join Path to navigate the roles of these Fact Types and infer association between Object Types. For example, we might want to find the faculty that offers the units that a student is enrolled in. We can express this constraint using a Join Path as follows:
"Student in a Semester and a Year is enrolled in a Unit that is offered by a Faculty in that Semester and Year"
Or more simply, imagine a cinema that has rows and seats, and the fact types that capture those associations:
We may have a Join Path that reads:
Seat is in a Row that is in a Cinema
The Join Path is the set of Roles traversed in the reading.
Join Subset Constraint
Suppose we have a schema for a cinema seat booking Universe of Discourse, with object types for Cinema, Session, Seat, and Booking. Each cinema has multiple sessions, each session has multiple seats, and each seat can be booked for a specific session. We want to ensure that a booking can only be made for a seat that is available in a cinema for the session being booked.
We can express this constraint as a Join Subset Constraint using the following notation:
This Join Subset Constraint specifies that a booking can only be made for a seat that is associated with a session that is being held at a cinema that has a row containing that seat. The Join Subset Constraint ensures that a seat can only be booked if it is available for the session being booked and is located in a row in the cinema where the session is being held.