Organizational Structures

It's not a good idea to hardwire an organizational structure into a model, because structures change:

We can use a recursive model, but we'll need to add constraints:

Association classes allow us to explicitly represent parent-subsidiary affiliations. By adding a meta-level classes we can represent multiple hierarchies within the same organization. Now constraints can be represented as objects. Meta-level link objects represent general constraints such as "offices are subsidiaries of departments", and base-level link objects represent specific constraints such as "the Dallas office is a subsidiary of the Sales department."

Here's the general class diagram:

Here's an object diagram that instantiates the class diagram. The affiliation objects represent the statements: "the math department is a subsidiary of the college of science" and "the physics department is a subsidiary of the college of science". The affiliation type object represents the general statement: "departments are subsidiaries of colleges".