Start here
Every system in a company keeps its own list of customers. The same person can be in all of them, with different spellings.
Master Data Management (MDM) finds the records that match. Then it builds one trusted record for each real person.
In Keys & Identity you gave one person one surrogate key. Here the ids come from different systems, so no shared key exists.
The shop, seen from three systems
First, the shop app. Its customers table is the one you know, with the email column from Keys & Identity. Asha lives in DE, because she moved on 2026-01-08.
| customer_id | name | country | |
|---|---|---|---|
| 1 | asha@example.com | Asha | DE |
| 2 | ben@example.com | Ben | GB |
| 3 | carla@example.com | Carla | US |
| 4 | dev@example.com | Dev | NULL |
| 5 | omar@example.com | Omar | IN |
Two more systems also hold customers. The CRM (customer relationship management) is the sales team’s tool. The support desk is where help tickets live.
These CRM and support records are made up, and the emails are fake. Their ids start at 320. The updated column is the day the record last changed.
| source_system | source_id | name | country | updated | |
|---|---|---|---|---|---|
| shop | 1 | Asha | asha@example.com | DE | 2026-01-08 |
| shop | 2 | Ben | ben@example.com | GB | 2026-01-02 |
| shop | 3 | Carla | carla@example.com | US | 2026-01-03 |
| shop | 4 | Dev | dev@example.com | NULL | 2026-01-04 |
| shop | 5 | Omar | omar@example.com | IN | 2026-01-05 |
| crm | 320 | Asha Kumar | Asha@Example.com | IN | 2025-12-15 |
| crm | 321 | Benjamin Hall | ben.hall@example.com | GB | 2026-01-10 |
| crm | 322 | Carla Mendes | carla.m@example.com | US | 2026-01-12 |
| support | 340 | A. Kumar | asha@example.com | DE | 2026-01-14 |
| support | 341 | Ben Hall | ben.hall@example.com | GB | 2026-01-16 |
Count the records in each system:
| source_system | source_id | name | country | updated | |
|---|---|---|---|---|---|
| shop | 1 | Asha | asha@example.com | DE | 2026-01-08 |
| shop | 2 | Ben | ben@example.com | GB | 2026-01-02 |
| shop | 3 | Carla | carla@example.com | US | 2026-01-03 |
| shop | 4 | Dev | dev@example.com | NULL | 2026-01-04 |
| shop | 5 | Omar | omar@example.com | IN | 2026-01-05 |
| crm | 320 | Asha Kumar | Asha@Example.com | IN | 2025-12-15 |
| crm | 321 | Benjamin Hall | ben.hall@example.com | GB | 2026-01-10 |
| crm | 322 | Carla Mendes | carla.m@example.com | US | 2026-01-12 |
| support | 340 | A. Kumar | asha@example.com | DE | 2026-01-14 |
| support | 341 | Ben Hall | ben.hall@example.com | GB | 2026-01-16 |
SELECT source_system, COUNT(*) AS records
FROM source_customers
GROUP BY source_system
ORDER BY source_system;| source_system | records |
|---|---|
| crm | 3 |
| shop | 5 |
| support | 2 |
Look at Asha. She is shop 1, CRM 320 and support 340. Ben is three records too.
This chapter finds the 6 people and builds one record for each.
What you will learn
- What master data is, and what it is not.
- How to clean, block and match records.
- How to decide: merge, review or keep apart.
- How the master id and the crosswalk table work.
- How one golden record is built, field by field.
- How to undo a wrong merge, and how privacy fits in.
