Hi @Khasim_1, here is the pattern I would use for conformed dimensions on Unity Catalog, taking your questions in order.
1) Layering. I would avoid a "Master Silver" that everything funnels through, because it tends to become a bottleneck team. Treat conformed dimensions as a published data product with a named owner. Domain Silver stays decentralized, the conformed dimension is produced by one pipeline, and every Gold mart consumes it read-only.
2) Golden record plus SCD2 at volume. Keep the golden record (match/merge, survivorship rules) separate from history. Maintain a current-state dimension with a stable surrogate key, and write the SCD2 history as its own table with AUTO CDC / APPLY CHANGES ... STORED AS SCD TYPE 2. Marts then join on the surrogate key plus a validity window. The surrogate key must never change when attributes change, otherwise every downstream mart breaks at once.
3) Unity Catalog structure. A dedicated catalog (or at least a schema) for conformed dimensions works well, owned by a platform or data governance group. Grant consumers SELECT only and give the owning group MANAGE. Mart teams get full control in their own catalogs, so they can innovate without touching the shared layer. That is the cleanest answer to governance versus agility: strict where it is shared, free where it is local.
4) Schema evolution without cascading failures. Version the contract, not the table. Additive changes (new nullable columns) are low risk. Breaking changes (rename, type change, dropped column) go out as a new view version (dim_customer_v2) while v1 stays for a deprecation window. Marts should read through views rather than the base table so you can shim old shapes. Use lineage (system.access.table_lineage) to see which consumers are still on v1 before you retire it.
5) Contract testing. Worth it. Put expectations on the producer side (not null and unique on the surrogate key, no overlapping validity windows, row count within a tolerance of the previous run), and have consumers run a small schema check in CI. If the producer fails its expectations it should not publish the new version, so marts keep reading the last good one.
One thing I would settle before any tooling: who owns Customer, and what the change process is. The Unity Catalog setup follows naturally once that is agreed.
1) Layering. I would not build a "Master Silver" that everything funnels through. It becomes a bottleneck team within a quarter. Treat conformed dimensions as a published data product with a named owner. Domain Silver stays decentralized, and the conformed dimension is produced by one pipeline and consumed read-only by every Gold mart.
2) Golden record plus SCD2 at volume. Keep the golden record (match/merge, survivorship rules) separate from history. Maintain a current-state dim with a stable surrogate key, and write the SCD2 history as its own table with AUTO CDC / APPLY CHANGES ... STORED AS SCD TYPE 2. Marts then join on the surrogate key plus a validity window. The key point is that the surrogate key must never change when attributes change, otherwise every downstream mart breaks at once.
3) Unity Catalog structure. A dedicated catalog (or at least schema) for conformed dimensions works well, for example a "conformed" catalog owned by a platform/data-governance group. Grant consumers SELECT only, and give the owning group MANAGE. Mart teams get full control in their own catalogs, so they can innovate without touching the shared layer. This is the cleanest answer to the governance versus agility trade-off: strict where it is shared, free where it is local.
4) Schema evolution without cascading failures. Version the contract, not the table. Additive changes (new nullable columns) are free. Breaking changes (rename, type change, dropped column) go out as a new view version (dim_customer_v2) while v1 is kept for a deprecation window. Marts should read through views, not the base table, so you can shim old shapes. Use lineage (system.access.table_lineage) to see exactly which consumers are on v1 before you retire it.
5) Contract testing. Yes, and it pays off the most of anything here. Put expectations on the producer side (not null and unique on the surrogate key, no overlapping validity windows, row count within a tolerance of the previous run), and have the consumer repo run a small test against the dimension's schema in CI. If the producer pipeline fails its expectations, it should not publish the new version, so marts keep reading the last good one.
Lesson learned: the hard part is rarely the technology, it is agreeing on who owns Customer. Settle the ownership and the change process first, and the Unity Catalog setup follows naturally.