What are Reference Types?
A reference type defines the meaning of a relationship between objects. It's the label that explains why two things are connected.
In JSM Assets, a reference type has:
- Name - What you call the relationship (e.g., "Managed By")
- Description - What it means
- Color - Visual distinction in graphs and lists
References connect objects across object types (or within the same type):
Application --> "Managed By" --> Team
Server --> "Located In" --> Data Center
Person --> "Reports To" --> Person
Why Reference Types Matter
Without reference types, you just have generic "links" between objects. That's not useful.
| Generic Link | Named Reference Type | Value Added |
|---|---|---|
| Application -> Team | Application "Managed By" Team | Clear ownership |
| Application -> Team | Application "Used By" Team | Different meaning! |
| Server -> Server | Server "Depends On" Server | Dependency chain |
| Server -> Server | Server "Backed Up To" Server | Backup relationship |
The same two object types can have multiple reference types with completely different meanings.
Relationship Cardinality
Cardinality defines how many objects can be on each side of a relationship.
One-to-One
One object on each side. Rare in practice.
Employee --[Has Assigned Laptop]--> Laptop
1 1
Use case: Each employee has exactly one primary laptop.
One-to-Many
One object relates to multiple objects.
Person --[Reports To]--> Person
* 1
Use case: Many people report to one manager.
Many-to-Many
Multiple objects on both sides.
Application --[Used By]--> Team
* *
Use case: An application can be used by many teams; a team can use many applications.
Cardinality in JSM Assets
| Setting | Effect |
|---|---|
| Single-value reference | Object can reference one other object |
| Multi-value reference | Object can reference multiple objects |
Naming References Clearly
Reference names should read naturally as "Source [Reference Type] Target".
Good Names (Directional and Clear)
| Reference Type | Reads As | Meaning |
|---|---|---|
| Managed By | Application "Managed By" Team | Team manages this app |
| Reports To | Person "Reports To" Person | Manager relationship |
| Depends On | Service "Depends On" Service | Dependency chain |
| Located In | Server "Located In" Data Center | Physical location |
| Owned By | Contract "Owned By" Person | Ownership |
| Provides | Vendor "Provides" Application | Vendor supplies app |
Avoid These Patterns
| Bad Name | Problem | Better |
|---|---|---|
| Related To | Meaningless | Use specific relationship |
| Linked | Too generic | State the relationship type |
| Has | Ambiguous direction | "Contains" or "Owns" |
| Connection | What kind? | Name the connection type |
Common Relationship Patterns
Ownership Relationships
Who is responsible for this thing?
Application --[Business Owner]--> Person
Application --[Technical Owner]--> Person
Application --[Owning Team]--> Team
Contract --[Contract Owner]--> Person
Management Relationships
Who operates or maintains this?
Server --[Managed By]--> Team
Cloud Account --[Managed By]--> Team
Vendor --[Relationship Owner]--> Person
Location Relationships
Where is this thing?
Server --[Located In]--> Data Center
Person --[Works At]--> Location
Equipment --[Installed In]--> Room
Hierarchy Relationships
Organizational structure.
Person --[Reports To]--> Person
Department --[Parent]--> Department
Team --[Part Of]--> Department
Location --[Parent]--> Location
Dependency Relationships
What does this thing need to function?
Application --[Depends On]--> Application
Service --[Runs On]--> Server
Application --[Uses Database]--> Database
Relationship Graph: Visualization
JSM Assets automatically creates a graph view of your relationships. This is powerful for:
- Impact analysis: What's affected if this server goes down?
- Root cause analysis: What does this failing service depend on?
- Audit trails: Who owns what? What's connected to what?
Application Dependency Graph
+-----------------+
| Customer Portal|
| (Application) |
+--------+--------+
| Depends On
+--------------+--------------+
| | |
+------v------+ +-----v------+ +-----v------+
| Auth Service| | API Gateway| | Database |
|(Application)| |(Application)| | (Database) |
+------+------+ +-----+------+ +------------+
| |
| | Depends On
+------v------+ +-----v------+
| LDAP | | User Service|
|(Application)| |(Application)|
+-------------+ +-------------+
Bidirectional vs. Unidirectional
Unidirectional (Default)
The relationship is defined from one side only.
Application --[Depends On]--> Database
You can query "What does this application depend on?" but not easily "What applications depend on this database?"
Bidirectional (Inverse References)
JSM Assets can show the relationship from both sides when you query either object.
- Viewing Application: Shows "Depends On: Database"
- Viewing Database: Shows "Depended On By: Application"
In JSM Assets, bidirectional display is automatic when you view an object - it shows both outgoing references AND incoming references from other objects.
Avoiding Circular Dependencies
Circular dependencies create confusion and can break automation.
The Problem
App A --[Depends On]--> App B --[Depends On]--> App C --[Depends On]--> App A
If App A depends on App B, which depends on App C, which depends on App A... what's the startup order? What's the root cause when something fails?
How to Avoid
- Model reality: Real systems rarely have true circular dependencies
- Distinguish dependency types: Maybe App A needs App B for startup, but App B only needs App A for a feature
- Add direction indicators: "Hard Depends On" vs. "Soft Depends On"
- Break the circle: Often one relationship is actually "Integrates With" not "Depends On"
Relationship Best Practices
Do This
| Practice | Why |
|---|---|
| Name references from source perspective | "Application Managed By Team" reads naturally |
| Use verb phrases | "Depends On" not "Dependency" |
| Be specific | "Business Owner" not just "Owner" |
| Limit reference types | 10-15 is usually enough |
| Color-code by category | Blue for ownership, green for location, orange for dependencies |
Avoid This
| Anti-pattern | Problem |
|---|---|
| Generic "Related To" | Meaningless connection |
| Too many reference types | Confusion, inconsistency |
| Same meaning, different names | "Managed By" and "Owned By" meaning the same thing |
| Forcing all relationships | Not everything needs to be connected |
Color Coding Conventions
Use consistent colors to make graphs readable:
| Color | Category | Example Reference Types |
|---|---|---|
| Blue | Ownership/Management | Owned By, Managed By, Led By |
| Green | Location/Provision | Located In, Provides, Works At |
| Purple | Hierarchy/Membership | Reports To, Part Of, Member Of |
| Orange | Dependencies | Depends On, Requires |
| Red | Critical/Risk | Blocked By, Vulnerable To |
Example: Complete Reference Type Set
Here's a well-designed set of reference types for a Core CMDB:
| Reference Type | From | To | Color | Purpose |
|---|---|---|---|---|
| Reports To | Person | Person | Purple | Manager hierarchy |
| Member Of | Person | Department | Purple | Org membership |
| Works At | Person | Location | Green | Work location |
| Led By | Team | Person | Blue | Team leadership |
| Part Of | Team | Department | Purple | Org structure |
| Headed By | Department | Person | Blue | Dept leadership |
| Provides | Vendor | Application | Green | Vendor supplies app |
| Owned By | Application | Person | Blue | App ownership |
| Managed By | Application | Team | Blue | App management |
| Depends On | Application | Application | Orange | App dependencies |
Querying Relationships
Once relationships are in place, you can answer powerful questions:
| Question | How to Query |
|---|---|
| "What depends on this database?" | Find all objects with "Depends On" pointing to this database |
| "Who owns applications in Finance?" | Find Applications where Owner's Department = Finance |
| "What's the blast radius if this server fails?" | Traverse all "Depends On" relationships upstream |
| "Who reports to this manager (all levels)?" | Recursive "Reports To" query |
Relationships turn data into knowledge. Name them clearly, design them thoughtfully, and your CMDB becomes a powerful tool for understanding your organization.
Ready to Put This Into Practice?
JSM Launchpad deploys production-ready CMDB schemas with these best practices built in.