- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-22-2017 07:52 AM
We have a question about the proper definition of relationships / relationship descriptors in the CI Relationship table (cmdb_rel_ci) table.
Briefly:
The Out of the Box relationship descriptor "directions" from parent to child (and vice versa) seem to be inconsistent when I try to "read" the relationships in this sense:
=====================================
| Subject | Predicate | Direct Object |
=====================================
| Parent | Child Descriptor | Child |
-----------------------------------------------------------
| Child | Parent Descriptor | Parent |
-----------------------------------------------------------
Sometimes the results are intuitive and sometimes they seem backwards.
For example, when I map a relationship for a Web site and an IIS Web Server using a Hosted on:Hosts relationship with the Web Server as the parent, I intuitively understand the result since:
An IIS Web Server (Parent) hosts (Child Descriptor) a Web site (Child). The relationship is intuitive in the other direction as well. A Web Site (Child) is Hosted On (Parent Descriptor) an IIS Web Server (Parent).
However, the sense of the parent descriptors and child descriptors seem to be reversed for some other relationship types. One of our most important relationship types is between our applications (we use them like Business Services) and their children. The Application (cmdb_ci_appl) must be the parent for core code that walks relationships up to the App to function correctly. But when you read the relationship using the table above, the sense of it seems backwards.
For example, we have many instances in our system today of this relationship:
An Application (Parent) Runs (Child Descriptor) a Web Server (Child). That is clearly incorrect, but it follows the exact "grammar" that worked perfectly for the Hosted on:Hosts relationship type. The converse is similarly broken: A Web Server (Child) Runs On (Parent Descriptor) an Application (Parent).
To be clear, the Application must be the parent in this relationship in order for the code to traverse "upward" correctly.
There are several other example of relationships where the Parent and Child descriptor seem to need to be swapped.
It is important to realize that all of these relationships are being pulled directly from the CI Relationship types table (Supports: Is Supported by is not OOTB) and that the arrows in the graphics result from applying the relationships consistently.
The Child acts upon the parent using the action specified in the Parent descriptor.
The Parent acts upon the child using the action specified in the Child descriptor.
For reference, here is a screenshot of the 4 relationships pictured above:
When I ignore the parent/child descriptors' semantic issues and write recursive code that walks from child to parent, everything works fine. However, as we are asking humans to participate in an initiative to clean up and create missing relationships, we're finding that we can't create an intelligible set of rules that apply to all relationship types, because of this lack of consistency.
Has anyone else gone in and swapped the parent / child descriptors to address these issues for some of these relationship types? Can anyone foresee any potential pitfalls of doing so?
Thanks,
Trey Carroll
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎05-24-2017 12:43 PM
I found a definitive answer by experimentation in the tool. The argument that I presented above is totally incorrect. The "parent descriptor" should be thought of as the text that you want to appear on the parent CI form describing the child relationship. The "child descriptor" is the text on the child CI form used to describe its relationship to the parent.
I created a new relationship type between 2 business Services: Parent: AD sync and Child: 2nd Nature:
From cmdb_rel_ci (CI Relationship table), here is what I created:
From the form on 2nd Nature (the child) I see.
From the form on AD Sync (the parent) I see:
So here is the lesson learned:

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-22-2017 02:59 PM
I'm familiar with instances of switching the descriptors in some cases, some of the oob types didn't make sense so we switched them. If swapping a descriptor or two achieves the business goals then it is worth doing. Regardless of what you choose, communication and a shared language regarding CI Relations and the CMDB in general will help users get on the same page (KB articles help with this). Also, Suggested Relationships can help with presenting users the correct descriptor to choose when using the relationship editor.
I would also add that it helps to always start with the Parent. So, it may be helpful to train users when manually creating relationships to do so from the parent records; we've had instances of users creating the rel from the child and they end up choosing the wrong descriptor (they choose the parent descriptor instead of the child descriptor).
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-23-2017 10:01 AM
I just found that another user posted exactly the same issue with CMDB relationships back in 2012: CI Relationship Types seem contradictory
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎05-24-2017 12:43 PM
I found a definitive answer by experimentation in the tool. The argument that I presented above is totally incorrect. The "parent descriptor" should be thought of as the text that you want to appear on the parent CI form describing the child relationship. The "child descriptor" is the text on the child CI form used to describe its relationship to the parent.
I created a new relationship type between 2 business Services: Parent: AD sync and Child: 2nd Nature:
From cmdb_rel_ci (CI Relationship table), here is what I created:
From the form on 2nd Nature (the child) I see.
From the form on AD Sync (the parent) I see:
So here is the lesson learned:

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎06-08-2017 11:50 AM
I went down this exact path a couple of months ago....Eventually I found that same context. Glad you posted this for others to see.