Relationships and Grouping

In a recent blog post (https://blogs.technet.com/kevinholman/archive/2008/02/01/configuring-notifications-to-include-specific-alerts-from-specific-groups-and-classes.aspx) Kevin Holman discusses how to configure notification subscriptions to hone in on just the alerts of interest.  He references the idea of using the 'windows computer' class when building a group as a way to subscribe to all alerts that may be generated by the 'windows computer' class itself or any child objects.  This works without doubt - many of us have used it routinely.  While I know it works, the fact it does went against the grain of my understanding of inheritance elsewhere - such as AD.

 In AD we start with a top level OU - the domain OU.  From there we create child OU's and the various policies defined on each flow down to child objects.  The parent OU really doesn't know anything about the child OU but the child OU knows about the parent.  Trying to force this thinking on OpsMgr it didn't make sense to me that the 'windows computer' parent object would know anything about the child objects...so, how does it work that we choose the 'windows computer' object in a group and, as part of that selection, get all of the related objects as well?  I posed this question to the product group to clear up my understanding - the reply was a good one and is included below.....

Containment relationships in our system are significant in that they create a path that state traverses, in one direction. When you group something, really what is happening is a containment relationship (that is, a relationship class which has System.Contaiment as its base) is created between the group container and the contained member. Hosting is also significant here, as it also derives from containment.

So think of everything as a container as long it has a compatible containment relationship class, including hosting relationship classes. Groups are containers, and hosts (e.g. computers) are containers.

Look at that Exchange group as the top node of a graph, with edges as containment relationships. Every container is a node. It is directed, and for state, it points from hosted to host, and from group member to group. So state traverses up this graph, from hosted nodes, through the host computer node, to the top level group.

If you just group the hosted Exchange instances, the computer node is excluded, hence state cannot traverse a path that includes the computer.