Interested in a ServiceNow event built for developers? Registration for now[dev]26 is officially open!

Normalization Data Services - Questions About Existing Data, Canonical Companies and Mappings

Mika Latvala
Tera Contributor

I'm investigating Normalization Data Services (NDS) in depth and have reviewed OOTB Business Rules, Script Includes and runtime behavior.

Confirmed findings

1. NDS consists of three separate concepts (tables)

  • cds_client_name = canonical/normalized names
  • cds_client_mapping = discovered name → canonical name mappings
  • core_company = actual Company records

I have not found a direct reference relationship between core_company and cds_client_name. The OOTB logic appears to connect them primarily through hashes and names.


2. canonical=true does NOT require a matching cds_client_name record

Example:

core_company: Mircosoft, canonical=true

but:

cds_client_name:

This matches the OOTB logic in Make Canonical Company:

 
if (!cdsmap.next())
setCanonicalFlag(current);

which effectively treats unmapped companies as canonical.


3. Real-time normalization works for some fields

I added a mapping:

Mircosoft -> Microsoft Corporation
Then I created a new CI and selected:
Manufacturer = "Mircosoft"
Manufacturer was automatically changed to "Microsoft Corporation"

So Manufacturer normalization clearly works.


4. Normalization is NOT generic

Using the exact same Company record:

Vendor = "Mircosoft"

did not normalize.

This suggests normalization is implemented for specific fields/tables rather than for all core_company references.


5. Reference qualifier updates are NOT the same thing as normalization

I found:

CanonicalServiceFilter

which returns:

canonical=true

when:

glide.cmdb.canonical.company.qualifier.enabled=true

 

This means:

"show only canonical companies"

and:

"automatically replace aliases with canonical companies"

are two different mechanisms.


What I still cannot explain

Question 1

When a new mapping is created later:

 
Mircosoft -> Microsoft Corporation

what OOTB process revisits existing core_company records?

I have not found any logic that changes canonical=true -> canonical=false for an existing alias Company.


Question 2

What exactly does CanonicalUpdaterWorker do?

I've found many references to it through:

 
AJAXCanonicalizationWorker

but not the implementation itself.

Is it native code?

Does it:

  • update existing references?
  • update canonical flags?
  • process existing Company records after new mappings are introduced?

Question 3

How is stale data supposed to be handled?

Company record created on 2019 with name "Mircosoft" with attribute canonical=true

Later "Mircosoft" -> "Microsoft Corporation" mapping was added.

What is the intended OOTB outcome?

  • Keep both records?
  • Mark Mircosoft as canonical=false (and how to actually do it)?
  • Delete it?
  • Something else?

Question 4

Has anyone successfully deployed NDS beyond Manufacturer/Publisher use cases?

Most of the OOTB logic I found appears focused on Manufacturer, Publisher and Model Manufacturer, `

but qualifier updates affect Company references much more broadly.

How are people handling:

 
- Vendor
- Customer
- Partner
- Service Provider

references in real-world deployments?


Question 5

How are we supposed to implement normalization to other than manufacturer fields? This includes ootb fields, like "Vendor" but also custom fields we have created referencing to core_company table.

 

Any insight from somebody familiar with NDS internals would be very helpful, especially around existing data reconciliation and canonical flag lifecycle.

0 REPLIES 0