MDM Implementation Patterns: Registry vs Consolidation vs Coexistence vs Centralized

Type: ERP Integration System: SAP MDG, Informatica IDMC, Reltio, Profisee, Stibo STEP Confidence: 0.83 Sources: 7 Verified: 2026-03-07 Freshness: evolving

TL;DR

System Profile

This card compares MDM architecture patterns — not specific platform implementations. The patterns are vendor-agnostic, but implementation choices are shaped by which MDM platform you select. SAP MDG is tightly coupled to the SAP ecosystem and acts as a centralized/coexistence hub natively within S/4HANA. Informatica and Reltio are vendor-neutral hubs. Profisee offers the fastest deployment for Microsoft-centric shops. Stibo STEP is strongest for product data (PIM + MDM combined). [src1, src2]

PlatformVendorBest-Fit StyleDeploymentPrimary APINatural Strength
SAP MDGSAPCentralized / CoexistenceHybridOData, RFC/BAPIDeep SAP integration, workflow governance
Informatica IDMCInformaticaConsolidation / CoexistenceCloudREST, SIFMulti-domain, 300+ connectors, CLAIRE AI matching
Reltio CDPReltioCoexistence / ConsolidationCloud (SaaS only)REST, GraphQLFast deployment (<90 days), real-time graph
ProfiseeProfiseeCoexistence / CentralizedCloud / On-PremREST, SDKMicrosoft ecosystem (Azure), FastApp UI
Stibo STEPStibo SystemsCentralized / CoexistenceCloudREST, IIEPPIM + MDM combined, product data mastery

API Surfaces & Capabilities

MDM platforms expose APIs for three purposes: data ingestion, golden record retrieval, and match/merge operations. The pattern you choose determines which APIs are critical. [src3]

API PurposeRegistryConsolidationCoexistenceCentralized
Inbound ingestionBatch ETLBatch ETL/ELTReal-time REST + BatchReal-time REST only
Golden record readCross-reference lookupBatch export, BI queryREST/GraphQL real-timeREST/GraphQL real-time
Writeback to sourcesNoneNoneBidirectional REST/CDCPublish (one-way out)
Match/merge triggerAutomated on ingestAutomated + steward reviewAutomated + real-timeAutomated + workflow approval
Event notificationsNoneNoneCDC / webhooks / KafkaKafka / event bus
Typical latencyN/A (read-only)4-24h batch<1s to <5min<1s

Rate Limits & Quotas

Platform API Limits

PlatformAPI Call LimitBulk Import LimitConcurrent ConnectionsNotes
SAP MDGSAP BTP rate limits (varies by plan)IDoc batch: 10K records/packetConfigurable per dialog processLimits shared with S/4HANA app layer
Informatica IDMC100 API calls/sec (default)SIF batch: 50K records/batch20 concurrent REST sessionsElastic scaling available
Reltio500 req/sec per tenant (default)Bulk load: 100K entities/fileConfigurableGraphQL counts same as REST
ProfiseeNo published hard limitREST bulk: 10K records/batchAzure-tier dependentScales with Azure App Service plan
Stibo STEPIIEP: ~5K records/minBatch import: configurableJVM-bound (heap dependent)On-prem deployments self-managed

Match/Merge Processing Limits

OperationTypical ThroughputBottleneckMitigation
Initial data load & match50K-500K records/hourMatch algorithm complexityPre-cleanse data, reduce match rule count for initial load
Incremental match (daily)1K-50K records/hourDuplicate candidate generationUse blocking keys to narrow match scope
Manual steward review50-200 records/day/stewardHuman throughputAutomate high-confidence merges (>95%), route only ambiguous cases
Survivorship rule executionNegligible overheadN/ASurvivorship runs inline with merge

Authentication

PlatformAuth MethodToken TypeLifetimeNotes
SAP MDGSAP BTP OAuth 2.0 / X.509Bearer tokenConfigurable (default 12h)Communication arrangements in BTP cockpit
Informatica IDMCOAuth 2.0 client credentialsBearer token1h (refreshable)Separate tokens for REST vs SIF
ReltioOAuth 2.0 client credentialsBearer token1hTenant-scoped tokens
ProfiseeAzure AD / OAuth 2.0Bearer token1h (configurable)Azure AD app registration required
Stibo STEPBasic auth / OAuth 2.0Session or bearerSession-based or 1hCertificate auth for IIEP

Authentication Gotchas

Constraints

Integration Pattern Decision Tree

START — Organization needs cross-ERP master data consistency
├── How many ERP systems?
│   ├── 1 ERP + satellite apps
│   │   ├── Data governance within single ERP? → Use native MDG (SAP MDG, Oracle DRM)
│   │   └── Need 360-degree view for analytics? → CONSOLIDATION (lowest cost)
│   └── 2+ ERPs (multi-vendor or M&A)
│       ├── Organizational structure?
│       │   ├── FEDERATED (autonomous BUs, own ERPs, own processes)
│       │   │   ├── Need cross-BU reporting only? → REGISTRY
│       │   │   ├── Need harmonized analytics? → CONSOLIDATION
│       │   │   └── Need operational data consistency? → COEXISTENCE
│       │   ├── CENTRALIZED (single IT, uniform processes)
│       │   │   ├── Greenfield / ERP consolidation? → CENTRALIZED
│       │   │   └── Brownfield / phased harmonization? → COEXISTENCE
│       │   └── HYBRID (central standards, local execution)
│       │       └── → COEXISTENCE (most common choice)
│       └── Data governance maturity?
│           ├── LOW → Start with CONSOLIDATION, evolve to COEXISTENCE (12-18 months)
│           ├── MEDIUM → COEXISTENCE
│           └── HIGH → CENTRALIZED or COEXISTENCE
├── Data domains?
│   ├── Customer/Account → Highest ROI domain — start here
│   ├── Vendor/Supplier → Second priority — compliance benefits
│   ├── Product/Material → Consider PIM + MDM (Stibo STEP, Informatica PIM)
│   ├── Chart of Accounts → Financial consolidation — often SAP MDG or Oracle DRM
│   └── Employee → HR systems often already centralized
└── Budget and timeline?
    ├── < $500K, < 6 months → Registry or Consolidation
    ├── $500K-$2M, 6-12 months → Coexistence (single domain)
    └── > $2M, 12-24 months → Centralized or multi-domain Coexistence

Quick Reference

DimensionRegistryConsolidationCoexistenceCentralized
Data ownershipSource systemsSource systems (hub read-only)Shared (hub + sources)MDM hub exclusively
Golden record locationVirtual (assembled on query)Hub (batch-created)Hub (real-time synced)Hub (sole copy)
Sync patternNone (read-only index)One-way: sources to hubBidirectionalOne-way: hub to sources
Writeback to ERPsNoNoYes (real-time/near-RT)Yes (publish/subscribe)
Typical latencyN/A4-24 hoursSeconds to minutesSeconds
Data quality improvementNone (reports dupes only)Hub onlyBoth hub and sourcesHub (sources consume clean data)
Implementation complexityLowMediumHighVery high
Implementation cost$100K-$300K$200K-$800K$500K-$2M$1M-$5M+
Timeline2-4 months3-6 months6-12 months12-24 months
Governance maturity requiredLowLow-MediumMedium-HighHigh
Org structure fitFederated, decentralizedAny (analytics-first)Hybrid, maturingCentralized, single-standard
# ERPs sweet spot3+ (many sources, read-only)2-5 (analytics consolidation)2-4 (operational sync)1-2 (single authority)
Best forReporting, compliance, duplicate IDBI, data warehouse, analyticsOperational consistencyGreenfield, ERP consolidation
Not suitable forOperational quality, writebackReal-time lookups, transactionalLow-governance, budget-constrainedFederated orgs, phased adoption

Step-by-Step Integration Guide

1. Assess current state and define data domains

Map all master data domains (customer, vendor, product, chart of accounts, employee) across every ERP and satellite system. Document who creates each entity, how often, and what the authoritative source is today. [src5, src6]

Domain Assessment Template:
+-----------------+---------------+--------------+-------------+----------------+
| Data Domain     | Systems       | Record Count | Create Rate | Current Source  |
|                 |               |              | (per month) | of Truth       |
+-----------------+---------------+--------------+-------------+----------------+
| Customer        | SF, SAP, NS   | 2.3M total   | 5K          | Salesforce     |
| Vendor/Supplier | SAP, Oracle   | 180K total   | 200         | SAP            |
| Product         | SAP, PIM, WMS | 500K total   | 1K          | SAP MM         |
| Chart of Acct   | SAP, Oracle   | 12K total    | 50          | SAP FI         |
| Employee        | Workday, SAP  | 45K total    | 300         | Workday        |
+-----------------+---------------+--------------+-------------+----------------+

Verify: Count total unique entities across systems — if cross-system overlap > 30%, MDM ROI is likely positive.

2. Select MDM pattern using the decision tree

Use the decision tree above. Key factors: org structure (federated vs centralized), number of ERPs, data governance maturity, and budget/timeline. [src1, src2]

Verify: Confirm pattern selection with stakeholders before proceeding to platform selection.

3. Define match rules and survivorship strategy

Design match keys per data domain. Match keys determine which records are candidates for merging. Survivorship rules determine which attribute value wins when merging. [src3]

Survivorship Rules (per attribute):
+---------------+----------------------+-------------------------------+
| Attribute     | Survivorship Rule    | Rationale                     |
+---------------+----------------------+-------------------------------+
| Legal Name    | Most trusted source  | ERP > CRM (ERP has contracts) |
| Email         | Most recent          | Email addresses change often  |
| Phone         | Most complete        | Pick non-null, longest value  |
| Address       | Most trusted source  | ERP for billing, CRM for ship |
| Tax ID        | Most trusted source  | ERP (validated at PO creation)|
| Credit Limit  | Highest authority    | Finance system always wins    |
| Industry      | Most recent          | CRM updated by sales reps    |
+---------------+----------------------+-------------------------------+

Verify: Test match rules against a sample of 10K records — false positive rate < 2%, false negative rate < 5%.

4. Configure data flow and sync patterns

Set up integration pipelines based on selected pattern. For coexistence: implement CDC listeners on source ERPs, conflict detection in the hub, and writeback channels. [src3]

# Coexistence pattern: conflict detection pseudocode
def resolve_conflict(incoming_change, golden_record, survivorship_rules):
    conflicts = []
    for attr in incoming_change.changed_attributes:
        golden_val = getattr(golden_record, attr)
        incoming_val = getattr(incoming_change, attr)
        if golden_val != incoming_val:
            rule = survivorship_rules.get(attr)
            if rule.type == "most_trusted_source":
                winner = rule.evaluate_trust(
                    golden_record.source, incoming_change.source)
            elif rule.type == "most_recent":
                winner = max(golden_record, incoming_change,
                           key=lambda r: r.last_modified)
            else:
                conflicts.append({"attribute": attr,
                    "golden_value": golden_val,
                    "incoming_value": incoming_val})
                continue
            if winner == incoming_change:
                setattr(golden_record, attr, incoming_val)
    if conflicts:
        create_steward_task(golden_record.id, conflicts)
    return golden_record

Verify: Run conflict resolution against historical change log — unresolved conflicts < 10% of total changes.

Code Examples

Python: Informatica MDM REST API — Search and Match

# Input:  Customer record attributes (name, address, tax_id)
# Output: Matched golden record ID and confidence score

import requests

INFORMATICA_BASE = "https://your-org.informatica.com/mdm/api/v2"
TOKEN = "Bearer <your_oauth_token>"

def search_and_match(customer_data):
    headers = {"Authorization": TOKEN, "Content-Type": "application/json"}
    search_payload = {
        "searchType": "MATCH",
        "recordData": {
            "companyName": customer_data["name"],
            "postalCode": customer_data["postal_code"],
            "country": customer_data["country"]
        },
        "matchRuleSet": "CustomerMatchRules",
        "maxResults": 10
    }
    resp = requests.post(f"{INFORMATICA_BASE}/match/Customer",
                        json=search_payload, headers=headers, timeout=30)
    resp.raise_for_status()
    matches = resp.json().get("matchedRecords", [])
    if not matches:
        return {"status": "no_match", "action": "create_new_golden_record"}
    best = max(matches, key=lambda m: m["matchScore"])
    if best["matchScore"] >= 95:
        return {"status": "auto_merge", "golden_record_id": best["recordId"],
                "confidence": best["matchScore"]}
    elif best["matchScore"] >= 70:
        return {"status": "steward_review", "golden_record_id": best["recordId"],
                "confidence": best["matchScore"]}
    return {"status": "no_match", "action": "create_new_golden_record"}

cURL: SAP MDG — Read Master Data via OData

# Input:  SAP MDG OData endpoint, OAuth token, business partner ID
# Output: Master data record in JSON format

# Step 1: Get OAuth token from SAP BTP
curl -X POST "https://your-btp.authentication.eu10.hana.ondemand.com/oauth/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials&client_id=YOUR_CLIENT_ID&client_secret=YOUR_SECRET"

# Step 2: Read Business Partner master data from MDG
curl -X GET "https://your-s4hana.sap/sap/opu/odata/sap/API_BUSINESS_PARTNER/A_BusinessPartner('1000042')" \
  -H "Authorization: Bearer <token>" \
  -H "Accept: application/json" \
  -H "sap-client: 100"

Data Mapping

Master Data Domain Mapping Across ERPs

Data DomainSAP S/4HANAOracle ERP CloudSalesforceNetSuiteWorkday
CustomerBusiness Partner (BP)Customer (HZ_PARTIES)AccountCustomerN/A
VendorBusiness Partner (BP, FLVN01)Supplier (AP_SUPPLIERS)N/AVendorSupplier
ProductMaterial (MARA/MARC)Item (EGP_SYSTEM_ITEMS)Product2ItemN/A
EmployeePersonnel (PA) / BPWorker (PER_ALL_PEOPLE)Contact (Employee)EmployeeWorker
Chart of AccountsGL Account (SKA1/SKB1)GL Account (GL_CODE_COMBINATIONS)N/AAccount (chart)Ledger Account

Data Type Gotchas

Error Handling & Failure Points

Common Error Scenarios

ErrorMDM StyleCauseResolution
False positive mergeAllOverly broad match keysAdd discriminating attributes (Tax ID, DUNS). Implement unmerge capability
False negative (missed dupe)AllOverly strict match keys, data quality issuesAdd fuzzy matching (Jaro-Winkler, Soundex). Pre-cleanse before matching
Survivorship conflict deadlockCoexistence, CentralizedTwo sources update same attribute simultaneously with equal trustAdd timestamp tiebreaker. Last-write-wins for equal-trust sources
Circular sync loopCoexistenceHub writes back, ERP CDC detects change, sends back to hubTag changes with origin. Ignore hub-originated changes in CDC listener
Golden record corruptionCoexistence, CentralizedRace condition between hub merge and incoming updateImplement optimistic locking. Use version numbers for conflict detection
Steward queue overflowAllToo many ambiguous matches routed to manual reviewTighten auto-merge threshold. Add secondary match rules

Failure Points in Production

Anti-Patterns

Wrong: Treating MDM as an ETL project

// BAD — "We'll just deduplicate with an ETL job"
1. Extract customer data from 3 ERPs nightly
2. Run SQL DISTINCT on name + address
3. Load "deduplicated" records into data warehouse
4. Declare "MDM done"

Problems:
- No match/merge engine — misses fuzzy duplicates
- No survivorship rules — arbitrary record wins
- No writeback — source ERPs still create duplicates daily
- No governance — data quality degrades immediately

Correct: Implement proper MDM with match engine and governance

// GOOD — proper MDM implementation
1. Define match rules: deterministic (Tax ID) + fuzzy (name similarity > 0.85)
2. Define survivorship: per-attribute rules based on source trust ranking
3. Load into MDM hub with match/merge engine
4. Auto-merge high-confidence, route ambiguous to stewards
5. Publish golden records with stable cross-reference IDs
6. Continuous CDC: source changes -> hub update -> writeback
7. Governance: stewards review exceptions, refine rules quarterly

Wrong: Ignoring data stewardship ("fully automated MDM")

// BAD — "AI will handle all matching, no stewards needed"
1. Deploy MDM with default match rules
2. Set auto-merge threshold to 60% confidence
3. No steward queue, no exception handling

Problems:
- 60% threshold causes mass false merges
- Legal entities merged that should remain separate
- Unmerge requests pile up with no one to process them

Correct: Tiered automation with steward escalation

// GOOD — tiered approach
1. Auto-merge: confidence >= 95% (exact Tax ID match)
2. Auto-merge with notification: 85-94% (steward can review retroactively)
3. Manual steward review: 70-84% (approve/reject within SLA)
4. No match: < 70% (separate records)
5. Weekly spot-check of auto-merged records
6. Quarterly match rule tuning based on false positive/negative rates

Wrong: Boiling the ocean — all domains, all systems, day one

// BAD — "Master all data domains across all 7 ERPs simultaneously"
Scope: Customer + Vendor + Product + Employee + CoA across 7 ERPs
Timeline: 6 months, Budget: $800K
Result: 18 months later, $3M spent, 2 domains partially live,
  project sponsor replaced, organizational trust in MDM destroyed

Correct: Start small, prove value, expand

// GOOD — phased domain rollout
Phase 1 (months 1-4): Customer domain, 2 highest-volume ERPs ($300K)
Phase 2 (months 5-8): Add vendor domain, same 2 ERPs
Phase 3 (months 9-14): Expand to remaining ERPs
Phase 4 (months 15-20): Add product domain
Each phase: Measurable ROI before next phase funding approved

Common Pitfalls

Diagnostic Commands

# Check golden record duplicate rate (Informatica MDM REST API)
curl -X GET "$INFORMATICA_BASE/mdm/api/v2/statistics/Customer/duplicates" \
  -H "Authorization: Bearer $TOKEN" -H "Accept: application/json"

# Check match queue depth (steward tasks pending)
curl -X GET "$INFORMATICA_BASE/mdm/api/v2/tasks?status=PENDING&type=MERGE_REVIEW" \
  -H "Authorization: Bearer $TOKEN"

# SAP MDG: Check change request status
curl -X GET "$SAP_HOST/sap/opu/odata/sap/API_MASTERDATA_GOVERNANCE_SRV/ChangeRequests?\$filter=Status eq '01'" \
  -H "Authorization: Bearer $SAP_TOKEN" -H "Accept: application/json"

# Reltio: Check entity resolution statistics
curl -X GET "https://your-tenant.reltio.com/reltio/api/entities/_stats" \
  -H "Authorization: Bearer $RELTIO_TOKEN"

# Check CDC replication lag (Debezium / Kafka Connect)
curl -X GET "http://kafka-connect:8083/connectors/erp-cdc/status" | jq '.tasks[0].state'

Version History & Compatibility

PlatformCurrent VersionPreviousBreaking ChangesNotes
SAP MDGS/4HANA 2025 (Cloud Edition on BTP)S/4HANA 2023Cloud-ready mode as defaultClassic mode still supported
Informatica IDMC2025.2 (cloud-native)10.5 (on-prem)SIF API v3 replaces v2v2 SIF deprecated July 2026
Reltio2025.12024.2FERN LLM-matching replaces legacy MLOpt-in for existing tenants
Profisee2024.12023.2REST API v2 replaces v1v1 sunset December 2025
Stibo STEP2024 R22024 R1IIEP v3 deprecates v2 outboundMigration tool provided

When to Use / When Not to Use

Use WhenDon't Use WhenUse Instead
2+ ERPs with overlapping customer/vendor/product dataSingle ERP, no cross-system data sharingNative ERP data governance (SAP MDG within S/4HANA)
Duplicate records causing operational errorsDuplicates exist but have no operational impactData warehouse deduplication for reporting only
M&A integration requiring data harmonizationOne-time data migration off legacy ERPETL migration scripts with reconciliation
Regulatory requirement for single customer view (KYC, GDPR)No regulatory pressure for unified recordsAd-hoc reporting with manual deduplication
Analytics team needs trusted, deduplicated cross-BU dataEach BU operates independently, no cross-BU reportingFederated queries against individual ERP data warehouses

Cross-System Comparison

CapabilitySAP MDGInformatica IDMCReltioProfiseeStibo STEP
Primary strengthSAP ecosystem governanceMulti-domain, AI matchingReal-time graph, speedAzure/Microsoft fit, easePIM + MDM combined
Supported stylesCentralized, CoexistenceAll fourConsolidation, CoexistenceCoexistence, CentralizedCentralized, Coexistence
DeploymentHybrid (on-prem + BTP)Cloud-native (IDMC)SaaS onlySaaS, PaaS, on-premCloud, on-prem
Match engineBuilt-in (deterministic + fuzzy)CLAIRE AI + configurableFERN LLM + MLML-assisted + rulesRules-based + ML
SurvivorshipAttribute-level, workflow-drivenAttribute-level, trust-basedAttribute-level, source-rankedAttribute-level, rules-basedAttribute-level, rules-based
Non-SAP ERP supportRequires middlewareNative connectors (300+)REST API integrationREST API + Azure connectorsREST API + IIEP
Implementation time12-24 months6-12 months2-3 months3-6 months6-12 months
Typical cost (1st domain)$1M-$3M$500K-$1.5M$300K-$800K$200K-$600K$500K-$1.5M
AI/ML capabilitiesGenerative AI (2025)CLAIRE AI matchingFERN LLM matchingML-assisted matchingML matching (emerging)
Data domainsAll (MDG-F, C, S, M)All (multi-domain native)Customer, vendor, productAllProduct-centric, expanding
Gartner positionLeaderLeaderVisionary to LeaderNiche to ChallengerLeader (PIM/MDM)

Important Caveats

Related Units