{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["admonition","partial"]},"type":"markdown"},"seo":{"title":"Data Mirror","description":"What a Data Mirror is, how storages, data sources and business partners relate, and how to decide the data source design for your landscape."},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"data-mirror","__idx":0},"children":["Data Mirror"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"overview","__idx":1},"children":["Overview"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Data Mirror"]}," is the copy of your business partner data that CDQ holds and keeps in step with your own systems."," ","CDQ services do not reach into your ERP. They work on the mirror, and everything you get back - curated records,"," ","duplicate links, quality findings, qualification results - is written back into the mirror for you to collect."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["That single idea has a large consequence. The mirror, not any individual product, is what you integrate with. Once"," ","data flows into it and results flow out of it, every CDQ product is reachable through the same two directions of"," ","travel, and adding a product later becomes a configuration change rather than a new integration project."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["In this article, you will understand:"]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["What a Data Mirror holds, and how storages, data sources and business partners relate"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["What identifies a record, and why that makes every write an update rather than a duplicate"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["How to decide your data source design: by process stage, by source system, and by partner role"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["How data and results move around the mirror over the life of an engagement"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Available in:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://cloud.cdq.com"},"children":["CDQ Cloud Apps"]}," - set up and inspect the mirror through a user interface"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/documentation/api/data-exchange/quickstart"},"children":["Data Exchange API"]}," - the programmatic interface"]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This article covers the concepts and the design decisions. For endpoints, payloads and the mechanics of moving data,"," ","see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/documentation/_public/product-manuals/data-mirror-integration"},"children":["Data Mirror Integration"]},"."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"what-a-data-mirror-is-made-of","__idx":2},"children":["What a Data Mirror is made of"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Three objects carry the whole model."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Object"},"children":["Object"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"What it is"},"children":["What it is"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Why it matters"},"children":["Why it matters"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Storage"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The container that holds your business partner data in CDQ. A storage usually corresponds to one workspace."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["It is the boundary of your data, and it appears in every call an integration makes."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Data source"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A named partition inside a storage. A storage can hold up to 100."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The unit you write to, the unit you filter by when reading, and the unit most configuration is scoped to."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Business partner"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["One record: names, addresses, identifiers, bank accounts, classifications."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Identified by its ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["external ID within a data source"]},", not by a CDQ-generated ID."]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"the-external-id-is-what-identifies-a-record","__idx":3},"children":["The external ID is what identifies a record"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A record is identified by the pair ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["external ID + data source"]},". In practice the external ID is the key the record"," ","already has in your system, most often the SAP business partner number."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This has a consequence worth stating plainly. CDQ also assigns its own ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["id"]}," to every record, but that is not the key"," ","you build on. If the same external ID arrives twice into the same data source, the second arrival updates the first"," ","record rather than creating a second one. Writes behave as updates, and the external ID is what makes that safe to"," ","repeat."]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"warning"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If your source system does not have a stable key per record, resolve that before connecting it. An external ID that"," ","changes between loads produces duplicate records in the mirror, and no amount of downstream duplicate detection"," ","fully repairs it."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"designing-your-data-sources","__idx":4},"children":["Designing your data sources"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A single data source is enough to hold data. Almost nobody uses only one, because the data source is the natural"," ","place to express a split that already exists in the business."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Three splits account for most designs, and they combine rather than compete."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Split by"},"children":["Split by"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Example"},"children":["Example"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"What it buys you"},"children":["What it buys you"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Process stage"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["input"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["output"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The record you sent and the record CDQ produced both survive, so you can compare them."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Source system"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["s4"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["salesforce"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["legacy-erp"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Each system keeps its own mapping and its own key space, and you know where a record came from."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Partner role"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["suppliers"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["customers"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Different rules, different checks and different owners for populations that are not comparable."]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"by-process-stage","__idx":5},"children":["By process stage"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The first split, and the one worth taking even on a small engagement:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"┌──────────────────── YOUR STORAGE ────────────────────┐\n│                                                      │\n│   ┌────────────────┐            ┌────────────────┐   │\n│   │ input          │            │ output         │   │\n│   │ raw records    │            │ curated records│   │\n│   │ as your system │            │ as CDQ returns │   │\n│   │ holds them     │            │ them           │   │\n│   └───────┬────────┘            └────────▲───────┘   │\n│           │                              │           │\n└───────────┼──────────────────────────────┼───────────┘\n            │                              │\n            ▼                              │\n     ┌──────────────────────────────────────────┐\n     │  CDQ services                            │\n     │  augmentation · validation · duplicates  │\n     │  qualification · curation                │\n     └──────────────────────────────────────────┘\n"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Keeping them apart means the record you sent and the record CDQ produced both survive. You can compare them, decide"," ","per field whether to accept a change, and re-run the process without having overwritten your own starting point. If"," ","input and output share one data source, the original value is gone after the first write back."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"by-source-system","__idx":6},"children":["By source system"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Most organisations do not keep business partners in one place. The same supplier exists in S/4, in Salesforce, and"," ","often in a legacy system nobody has retired yet. Giving each system its own data source is the normal design, for"," ","three reasons."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Each data source carries its own mapping."]}," A data source is bound to a data transformation definition, which"," ","describes how that system's fields become CDQ attributes. S/4 and Salesforce do not name anything the same way, and"," ","one mapping cannot serve both. Separate data sources let each system keep its own layout and arrive without"," ","pre-translation."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Each system keeps its own key space."]}," A record is identified by external ID within a data source, so the S/4"," ","number and the Salesforce ID never collide even when they describe the same company. That matters, because they"," ","often ",{"$$mdtype":"Tag","name":"em","attributes":{},"children":["are"]}," the same company."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["You keep provenance."]}," When results flow back, you filter by data source, so each system collects the records it"," ","is responsible for. Without the split you would need a field of your own to remember which system a record came"," ","from, and keep it correct forever."]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The same company appearing in several data sources is not a modelling mistake. It is the honest representation of"," ","your landscape, and it is what makes cross-system duplicate detection possible: a duplicate monitor configured over"," ","several data sources searches for candidates across all of them, so the S/4 record and the Salesforce record are"," ","found as a pair. Collapsing both systems into one data source would hide exactly the overlap you want measured."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"by-partner-role","__idx":7},"children":["By partner role"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The other common split is by what the partner ",{"$$mdtype":"Tag","name":"em","attributes":{},"children":["is"]},": suppliers in one data source, customers in another, sometimes"," ","employees or carriers alongside them."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The reason is that the two populations are not judged the same way. A supplier usually needs bank account validation,"," ","sanction screening and ownership checks. A customer usually needs none of those and needs something else instead. The"," ","completeness bar differs, the stewardship owner differs, and a quality score computed across both at once describes"," ","nobody."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This is enforceable rather than conventional, because ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["a data monitor is configured against a set of data sources"]},"."," ","The same mirror can run a strict configuration over suppliers and a lighter one over customers, and report on each"," ","separately, without either set of rules reaching the other population."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"how-far-to-take-it","__idx":8},"children":["How far to take it"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The splits combine. A mature setup often has an input and an output data source per source system, with roles"," ","distinguished inside them or by further sources again."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The cost is configuration. Each data source may carry its own mapping, and each monitor has to know which sources it"," ","covers. Splitting along a line that does not change how records are ",{"$$mdtype":"Tag","name":"em","attributes":{},"children":["treated"]}," adds that cost and returns nothing."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A useful test: if two groups of records will be mapped the same way, checked by the same rules, and collected by the"," ","same system, they do not need separate data sources."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"reference-data-sources","__idx":9},"children":["Reference data sources"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Alongside your own data sources, a storage also sees ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["CDQ-managed reference data sources"]},": the community data pool,"," ","business registers, commercial providers and tax authority databases. You do not write to these. They are what CDQ"," ","matches your records against, and which of them are active is a configuration of your workspace rather than part of"," ","your integration."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"how-data-moves","__idx":10},"children":["How data moves"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Putting both directions together gives the shape that a CDQ engagement follows, whether it runs for a week or across"," ","a multi-year migration."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"   your system          input DS            CDQ services           output DS         your system\n        │                   │                     │                    │                  │\n        │   records in      │                     │                    │                  │\n        │ ─────────────────►│                     │                    │                  │\n        │                   │  augmentation,      │                    │                  │\n        │                   │ ───────────────────►│                    │                  │\n        │                   │  curation,          │   results written  │                  │\n        │                   │  duplicates, DQ     │ ──────────────────►│                  │\n        │                   │                     │                    │  results out     │\n        │                   │                     │                    │ ────────────────►│\n        │                                                                                 │\n        │◄──────────────────  repeat for changed records only  ───────────────────────────│\n"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The loop matters more than any single pass. A first load is rarely the end of the work: records change in the source"," ","system, curation decisions get revisited, and new rules get applied to data that was already processed. A connection"," ","designed around \"what changed since last time\" handles all three without special cases."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"choosing-a-cadence","__idx":11},"children":["Choosing a cadence"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["How often the mirror is updated is a business decision before it is a technical one."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["On every change."]}," Each create, update and delete in your system reaches CDQ immediately. Results become"," ","available shortly after, which is what you want when a user is waiting for a validation or a sanction check before"," ","onboarding a partner."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Daily."]}," Collect the day's changes and send them in one go. Cheaper to run and simpler to operate, at the cost"," ","of results being a day behind."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["On demand."]}," Load when a project needs it. Normal for migration and cleansing work, where data moves in distinct"," ","rounds rather than continuously."]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A live connection and a periodic bulk load are complements rather than alternatives. The live connection keeps the"," ","mirror current; a periodic load catches anything the event stream missed. Deletions in particular need their own"," ","handling, because a record that disappears from your system does not disappear from the mirror unless you say so."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"comparing-before-and-after","__idx":12},"children":["Comparing before and after"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Where an engagement delivers curated values alongside the originals, the convention is to carry both on the same"," ","record under paired field names: one set holding the value as you supplied it, one holding the value as CDQ curated"," ","it."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This is what lets a data steward decide per field and per record whether to accept a change, rather than accepting"," ","or rejecting a whole load. Which fields are paired, and what the pairs are called, is agreed per engagement rather"," ","than fixed by the platform."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"summary","__idx":13},"children":["Summary"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Data Mirror is the copy of your business partner data that CDQ works on, and it is the surface every CDQ product"," ","is reached through. A ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["storage"]}," holds ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["data sources"]},", a data source holds ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["business partners"]},", and a record is"," ","identified by its ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["external ID within a data source"]},", which is what makes repeated writes safe."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["How you cut the mirror into data sources is a design decision worth making deliberately rather than inheriting."," ","Separating input from output is what lets you compare what you sent against what CDQ returned. Separating by source"," ","system keeps each system's mapping and key space its own, and is what makes cross-system duplicate detection"," ","meaningful. Separating by partner role is what lets suppliers and customers be held to different rules. The three"," ","combine, and the limit on how far to take them is the configuration each one carries."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"related-resources","__idx":14},"children":["Related Resources"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/documentation/_public/product-manuals/data-mirror-integration"},"children":["Data Mirror Integration"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/documentation/_public/instructions/dsp-how-to-sync-with-data-mirror"},"children":["How to synchronize data with the Data Mirror"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/documentation/_public/instructions/define-data-transformation-definitions"},"children":["How to Define and Use Data Transformation Definitions"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/documentation/api/data-exchange/quickstart"},"children":["Data Exchange API"]}]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"your-opinion-matters","__idx":15},"children":["Your opinion matters!"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["We are constantly working on providing an outstanding user experience with our products. Please share your opinion about this tutorial!"]}]},"headings":[{"value":"Data Mirror","id":"data-mirror","depth":1},{"value":"Overview","id":"overview","depth":2},{"value":"What a Data Mirror is made of","id":"what-a-data-mirror-is-made-of","depth":2},{"value":"The external ID is what identifies a record","id":"the-external-id-is-what-identifies-a-record","depth":3},{"value":"Designing your data sources","id":"designing-your-data-sources","depth":2},{"value":"By process stage","id":"by-process-stage","depth":3},{"value":"By source system","id":"by-source-system","depth":3},{"value":"By partner role","id":"by-partner-role","depth":3},{"value":"How far to take it","id":"how-far-to-take-it","depth":3},{"value":"Reference data sources","id":"reference-data-sources","depth":3},{"value":"How data moves","id":"how-data-moves","depth":2},{"value":"Choosing a cadence","id":"choosing-a-cadence","depth":3},{"value":"Comparing before and after","id":"comparing-before-and-after","depth":3},{"value":"Summary","id":"summary","depth":2},{"value":"Related Resources","id":"related-resources","depth":2},{"value":"Your opinion matters!","id":"your-opinion-matters","depth":2}],"frontmatter":{"seo":{"title":"Data Mirror","description":"What a Data Mirror is, how storages, data sources and business partners relate, and how to decide the data source design for your landscape."},"toc":{"enable":true},"cdqContentMetadata":{"product":"CDQ Platform","type":"article","subtype":"expertise","lastUpdate":"2026-10-02T00:00:00.000Z","author":"Simon Schlosser"}},"lastModified":"2026-10-21T09:50:10.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/documentation/_public/articles/expertise/data-mirror","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}