Data Warehouse Design

Data Warehouse Design

Elimination matrix datadata warehouseanalyticsmedallion architectureetl

As a data warehouse product manager responsible for integrating new data sources into a four-tier medallion architecture, use this decision tree to identify the most effective integration strategy. The tool assumes three guiding principles: all data consumption occurs from the final data products layer; the further right the integration point (towards Platinum), the more efficient the processing in terms of storage and compute; and we prefer materialised views over additional storage layers wherever the source system supports it.

Overview

Type
Elimination matrix
Tags
data, data warehouse, analytics, medallion architecture, etl
Entry
Q1
Questions
25
Outcomes
1
Author
Andrew
Last updated
2026-05-12

Decision Tree

Start: How is the data expected to be used?

A: REAL-TIME: The data is expected to be available as a hyper near-time service, prioritising latency over standardisation and consolidation. [PLATINUM-M]

B: NEAR-TIME/BATCH: The data is expected to be available in a timely manner for analytics or onward integrations, but standardisation, accuracy, and completeness are prioritised over latency.

Machine-Readable JSON (Canonical Model)

View JSON
{
  "_meta": {
    "schema": "https://www.drawdecisiontree.com/decision-dag.schema.json",
    "source": "https://www.drawdecisiontree.com",
    "description": "DrawDecisionTree.com is a free tool for building, sharing, and embedding interactive decision trees. This file is the machine-readable export of a published decision tree. The `dsl` field contains the original source in the Decision DAG DSL; the `dag` schema is documented at the URL in `schema` above.",
    "links": {
      "interactive": "https://www.drawdecisiontree.com/t/drawdecisiontree/data-warehouse.html",
      "embed": "https://www.drawdecisiontree.com/embed/path/drawdecisiontree/data-warehouse",
      "dsl_reference": "https://www.drawdecisiontree.com/decision-tree-dsl-reference.html",
      "guides": "https://www.drawdecisiontree.com/guides",
      "schema_docs": "https://www.drawdecisiontree.com/decision-dag.schema.json",
      "author_trees": "https://www.drawdecisiontree.com/trees/drawdecisiontree"
    },
    "generated_at": "2026-05-29T12:05:39.276Z"
  },
  "author": {
    "handle": "drawdecisiontree",
    "first_name": "Andrew",
    "last_name": null,
    "avatar_url": "1d32d828-b6ca-40ec-bdd7-771fe7b9c36a/avatar-1778531481027.svg",
    "display_name": "Andrew"
  },
  "file": {
    "id": "4709f3ba-8c81-40fa-9279-ed8af0ca6d01",
    "name": "Data Warehouse Design",
    "public_slug": "data-warehouse",
    "updated_at": "2026-05-12T16:53:43.587978+00:00",
    "url": "https://www.drawdecisiontree.com/t/drawdecisiontree/data-warehouse.html",
    "json_url": "https://www.drawdecisiontree.com/t/drawdecisiontree/data-warehouse/tree.json",
    "dsl_url": "https://www.drawdecisiontree.com/t/drawdecisiontree/data-warehouse/tree.dag"
  },
  "meta": {
    "description": "As a data warehouse product manager responsible for integrating new data sources into a four-tier medallion architecture, use this decision tree to identify the most effective integration strategy. The tool assumes three guiding principles: all data consumption occurs from the final data products layer; the further right the integration point (towards Platinum), the more efficient the processing in terms of storage and compute; and we prefer materialised views over additional storage layers wherever the source system supports it.",
    "mode": "elimination",
    "entry": "Q1",
    "tags": [
      "data",
      "data warehouse",
      "analytics",
      "medallion architecture",
      "etl"
    ],
    "image": "https://images.unsplash.com/photo-1551288049-bebda4e38f71?w=1200&q=80"
  },
  "questions": [
    {
      "id": "Q1",
      "text": "How is the data expected to be used?"
    },
    {
      "id": "A",
      "text": "REAL-TIME: The data is expected to be available as a hyper near-time service, prioritising latency over standardisation and consolidation.  [PLATINUM-M]"
    },
    {
      "id": "B",
      "text": "NEAR-TIME/BATCH: The data is expected to be available in a timely manner for analytics or onward integrations, but standardisation, accuracy, and completeness are prioritised over latency."
    },
    {
      "id": "Q2",
      "text": "What is the content of the data to be consumed in the warehouse?"
    },
    {
      "id": "A",
      "text": "ENTITY: The data contains information about a specific entity or object that follows a specific lifecycle over time and will ultimately need to be included as part of a target logical data model. [COPPER, BRONZE-M, BRONZE-S, SILVER-M, SILVER-S, GOLD-M, GOLD-S, PLATINUM-M]"
    },
    {
      "id": "B",
      "text": "TRANSACTIONAL: The data contains point-in-time information about a specific event that needs to be included in a target logical data model, either as a list of events or as summarised data. [COPPER, BRONZE-M, BRONZE-S, SILVER-M, SILVER-S, GOLD-M, GOLD-S, PLATINUM-M]"
    },
    {
      "id": "C",
      "text": "UNDERLYING: The data contains low-level transactional information about a specific event that will ultimately be aggregated or analysed in some way before derived data is included in the target data model. [COPPER, BRONZE-M, BRONZE-S]"
    },
    {
      "id": "Q3",
      "text": "What is the technical integration type for obtaining the data from the source?"
    },
    {
      "id": "A",
      "text": "FILES: Data is pulled or pushed from the source system as files and needs to land somewhere before being consumed into structured data records. [COPPER]"
    },
    {
      "id": "B",
      "text": "DATABASE: Data is pulled directly from a database or warehouse, where data can either be queried or triggers established to represent data changes via SQL or another structured query language. [BRONZE-M, BRONZE-S, SILVER-M, SILVER-S]"
    },
    {
      "id": "C",
      "text": "API: Data is provided via a dedicated API endpoint that can be polled or pushed via a webhook to get one or a few records at a time. [BRONZE-S, SILVER-S]"
    },
    {
      "id": "D",
      "text": "MESSAGES: Data is received via a real-time message queue as whole or partial records. [BRONZE-S, SILVER-S, GOLD-S]"
    },
    {
      "id": "Q4",
      "text": "Are the files readable as they arrive, or do they require decrypting or unpackaging before you can understand the data?"
    },
    {
      "id": "A",
      "text": "READABLE: No additional processing is required and the files can be processed as-is into the warehouse. [COPPER]"
    },
    {
      "id": "B",
      "text": "ENCODED: A specific decoding tool must be applied before the data can be processed into the warehouse. [COPPER]"
    },
    {
      "id": "Q5",
      "text": "What data model, structure, and values does the data arrive in?"
    },
    {
      "id": "A",
      "text": "SOURCE MODEL: The data arrives in a proprietary model with source-specific values that need to be converted into a target model before being used. [COPPER, BRONZE-M, BRONZE-S]"
    },
    {
      "id": "B",
      "text": "TARGET MODEL: The data is already formatted to conform to the target logical model and does not need any transformation before it can be used. [COPPER, BRONZE-M, BRONZE-S, SILVER-M, SILVER-S, PLATINUM-M]"
    },
    {
      "id": "Q6",
      "text": "Is the source the sole source of all information for a specific data subject/object, or will it need to be combined with other sources to create a complete logical model?"
    },
    {
      "id": "A",
      "text": "SOLE-SOURCE: The data source already conforms to the target logical model AND is the only source of data for this data subject. No other data consolidation is needed to establish the complete data records. [COPPER, BRONZE-S, BRONZE-M, SILVER-S, SILVER-M, GOLD-M, GOLD-S, PLATINUM-M]"
    },
    {
      "id": "B",
      "text": "PARTIAL-SOURCE: While the data source already conforms to the target logical data model, it does not contain everything needed about these records or the full population, and it will need to be consolidated with other sources before being used. [COPPER, BRONZE-S, BRONZE-M, SILVER-S, SILVER-M]"
    },
    {
      "id": "Q7",
      "text": "What additional special situations do you need to take into account when considering the integration strategy?"
    },
    {
      "id": "A",
      "text": "NONE: No additional capabilities are required."
    },
    {
      "id": "B",
      "text": "SOURCE AUDITING: We are required to evidence the exact data content in its original form as received from the source system, separate from our internal warehouse control and processing requirements. [COPPER, BRONZE-S, SILVER-S, GOLD-S]"
    },
    {
      "id": "C",
      "text": "HIGH PERFORMANCE: We are required to make the data available immediately after it becomes available from the source to downstream consumers. [GOLD-M, PLATINUM-M]"
    }
  ],
  "outcomes": [
    {
      "id": "COPPER",
      "label": "Integrate to COPPER File Landing Zone"
    }
  ],
  "dsl": "dag: Data Warehouse Design\nversion: 1.0.0\nimage: https://images.unsplash.com/photo-1551288049-bebda4e38f71?w=1200&q=80\ndescription: As a data warehouse product manager responsible for integrating new data sources into a four-tier medallion architecture, use this decision tree to identify the most effective integration strategy. The tool assumes three guiding principles: all data consumption occurs from the final data products layer; the further right the integration point (towards Platinum), the more efficient the processing in terms of storage and compute; and we prefer materialised views over additional storage layers wherever the source system supports it.\ntags: data, data warehouse, analytics, medallion architecture, etl\nentry: Q1\nmode: elimination\n\nQ1: How is the data expected to be used?\n  A: REAL-TIME: The data is expected to be available as a hyper near-time service, prioritising latency over standardisation and consolidation.  [PLATINUM-M]\n  B: NEAR-TIME/BATCH: The data is expected to be available in a timely manner for analytics or onward integrations, but standardisation, accuracy, and completeness are prioritised over latency.\n\nQ2: What is the content of the data to be consumed in the warehouse?\n  A: ENTITY: The data contains information about a specific entity or object that follows a specific lifecycle over time and will ultimately need to be included as part of a target logical data model. [COPPER, BRONZE-M, BRONZE-S, SILVER-M, SILVER-S, GOLD-M, GOLD-S, PLATINUM-M]\n  B: TRANSACTIONAL: The data contains point-in-time information about a specific event that needs to be included in a target logical data model, either as a list of events or as summarised data. [COPPER, BRONZE-M, BRONZE-S, SILVER-M, SILVER-S, GOLD-M, GOLD-S, PLATINUM-M]\n  C: UNDERLYING: The data contains low-level transactional information about a specific event that will ultimately be aggregated or analysed in some way before derived data is included in the target data model. [COPPER, BRONZE-M, BRONZE-S]\n\nQ3: What is the technical integration type for obtaining the data from the source?\n  A: FILES: Data is pulled or pushed from the source system as files and needs to land somewhere before being consumed into structured data records. [COPPER]\n  B: DATABASE: Data is pulled directly from a database or warehouse, where data can either be queried or triggers established to represent data changes via SQL or another structured query language. [BRONZE-M, BRONZE-S, SILVER-M, SILVER-S]\n  C: API: Data is provided via a dedicated API endpoint that can be polled or pushed via a webhook to get one or a few records at a time. [BRONZE-S, SILVER-S]\n  D: MESSAGES: Data is received via a real-time message queue as whole or partial records. [BRONZE-S, SILVER-S, GOLD-S]\n\nQ4: Are the files readable as they arrive, or do they require decrypting or unpackaging before you can understand the data?\n  when: Q3=A\n  A: READABLE: No additional processing is required and the files can be processed as-is into the warehouse. [COPPER]\n  B: ENCODED: A specific decoding tool must be applied before the data can be processed into the warehouse. [COPPER]\n\nQ5: What data model, structure, and values does the data arrive in?\n  A: SOURCE MODEL: The data arrives in a proprietary model with source-specific values that need to be converted into a target model before being used. [COPPER, BRONZE-M, BRONZE-S]\n  B: TARGET MODEL: The data is already formatted to conform to the target logical model and does not need any transformation before it can be used. [COPPER, BRONZE-M, BRONZE-S, SILVER-M, SILVER-S, PLATINUM-M]\n\nQ6: Is the source the sole source of all information for a specific data subject/object, or will it need to be combined with other sources to create a complete logical model?\n  when: Q5=B\n  A: SOLE-SOURCE: The data source already conforms to the target logical model AND is the only source of data for this data subject. No other data consolidation is needed to establish the complete data records. [COPPER, BRONZE-S, BRONZE-M, SILVER-S, SILVER-M, GOLD-M, GOLD-S, PLATINUM-M]\n  B: PARTIAL-SOURCE: While the data source already conforms to the target logical data model, it does not contain everything needed about these records or the full population, and it will need to be consolidated with other sources before being used. [COPPER, BRONZE-S, BRONZE-M, SILVER-S, SILVER-M]\n\nQ7: What additional special situations do you need to take into account when considering the integration strategy?\n  A: NONE: No additional capabilities are required.\n  B: SOURCE AUDITING: We are required to evidence the exact data content in its original form as received from the source system, separate from our internal warehouse control and processing requirements. [COPPER, BRONZE-S, SILVER-S, GOLD-S]\n  C: HIGH PERFORMANCE: We are required to make the data available immediately after it becomes available from the source to downstream consumers. [GOLD-M, PLATINUM-M]\n\n[PLATINUM-M]: Integrate to PLATINUM (as a Materialised View)\n  color: #E5E4E2\n  description: The source data and its consumers demand the fastest possible access — latency is the primary constraint and standardisation is secondary. The data is available via a standard SQL-like query interface, so bypass the intermediate medallion layers entirely and materialise the data directly into Platinum as its own self-contained Data Product. This is the most efficient integration path in terms of compute and storage: no intermediate copies, no transformation pipelines, no bronze or silver staging. The trade-off is that Platinum-direct integrations carry source-model artefacts into the consumption layer, which can complicate cross-source reporting. Use this pattern only when real-time latency is genuinely non-negotiable and consumers understand they are working with a source-native model.\n\n[GOLD-M]: Integrate to Gold (as a Materialised View)\n  color: #D4AF37\n  description: The source data already conforms to the target logical schema, this source is the sole provider of all information for the relevant data subject, and the data is accessible via an SQL-style interface that can be queried remotely. All three conditions mean there is no need for additional normalisation, consolidation, or transformation. Materialise the data directly into the Gold layer as a view over the source system — no physical copy is required in the warehouse. This is the most cost-efficient pattern when the source can be queried with acceptable latency: storage overhead is minimal, the data is always current, and there is no ETL pipeline to maintain. Ensure the source system's query interface can handle the read load imposed by downstream consumers before committing to this pattern.\n\n[GOLD-S]: Integrate to Gold (as stored data)\n  color: #D4AF37\n  description: The source data already conforms to the target logical schema and this source is the sole provider of all information for the relevant data subject — but the data cannot be accessed via a queryable SQL interface and must be physically loaded into the warehouse. There is no need for additional normalisation, consolidation, or transformation beyond ingestion. Load the data directly into Gold, bypassing Bronze and Silver. This pattern is appropriate when the source provides clean, fully conformant data via files, API, or message queue, and the warehouse does not need to retain a raw history of the source payload for audit purposes. Establish an idempotent load process with a clear primary key to enable safe re-runs.\n\n[SILVER-M]: Integrate to Silver (as a Materialised View)\n  color: #C0C0C0\n  description: The source data already conforms to the target logical schema and is accessible via an SQL-like query engine — but it cannot be taken directly to Gold because it is a partial source that must be consolidated with other data sources to build a complete data product. Establish a materialised view of the data in the Silver layer, joining or unioning it with other Silver-layer sources as needed before promoting the consolidated result to Gold. The materialised view approach keeps storage overhead low while maintaining a live, queryable representation of the source. This pattern works well when the source system can handle the read load and when consolidation logic is stable rather than rapidly evolving.\n\n[SILVER-S]: Integrate to Silver (as stored data)\n  color: #C0C0C0\n  description: The source data already conforms to the target logical schema, but it is only accessible through an integration mechanism (file drop, API, message queue) that requires physically loading and storing the records in the warehouse. It is also a partial source that needs to be consolidated with other data sources before it is ready for Gold. Load the data into Silver as a stored table, preserving enough metadata (source timestamp, load batch ID) to enable incremental loads and audit tracing. Apply the consolidation logic at the Silver-to-Gold promotion step. This pattern introduces a physical copy but ensures the data is available for consolidation even when the source system is temporarily unavailable.\n\n[BRONZE-M]: Integrate to BRONZE Layer (as a Materialised View)\n  color: #CD7F32\n  description: The source data is available via a queryable SQL interface, which means you can establish a live materialised view in the Bronze layer without copying the raw data. Bronze becomes the point at which the warehouse first has a structured representation of the source records, but because it is a view, there is no storage duplication. New or changed records are visible in Bronze as soon as they appear in the source. This pattern is appropriate when the source data arrives in a proprietary model that needs transformation before it can be used — Bronze stores the source-native representation, and the Silver layer handles the model conversion. Ensure the view definition is idempotent and that upstream schema changes in the source system are detected and handled.\n\n[BRONZE-S]: Integrate to BRONZE Layer (as stored data)\n  color: #CD7F32\n  description: The source data must be physically loaded into the Bronze layer because the integration mechanism (file, API, message queue) does not expose a queryable SQL interface. Each incoming record is inserted into Bronze as received, creating an append-only, auditable history of every payload the warehouse has ever received from this source. Bronze is the warehouse's system of record for raw inbound data — downstream transformation layers (Silver, Gold) read from Bronze rather than from the source directly, which decouples the pipeline from source system availability. Establish a clear primary key and ingestion timestamp on each Bronze record to support incremental loading, deduplication, and replay. If source auditing is required, Bronze is the layer where original payloads must be preserved in their exact received form.\n\n[COPPER]: Integrate to COPPER File Landing Zone\n  color: #B87333\n  description: The source delivers data as files — whether pushed by the source system or pulled by an integration job — and those files must land in a staging area before any structured processing can begin. The Copper layer is a file-based landing zone: raw files are received and stored here, optionally for an extended retention period to satisfy audit or recovery requirements, before being processed onward into Bronze. Loaders pick up each arriving file, apply any necessary decryption, format conversion (CSV to Parquet, XML to JSON, proprietary binary to structured records), and validation before inserting rows into the Bronze layer. Files that fail validation are quarantined rather than discarded, enabling replay once the issue is resolved. Copper is the entry point for all file-based integrations regardless of the eventual target layer — the destination (Bronze, Silver, Gold) is determined by subsequent questions about data model conformance and consolidation requirements.\n"
}

DSL Representation

dag: Data Warehouse Design
version: 1.0.0
image: https://images.unsplash.com/photo-1551288049-bebda4e38f71?w=1200&q=80
description: As a data warehouse product manager responsible for integrating new data sources into a four-tier medallion architecture, use this decision tree to identify the most effective integration strategy. The tool assumes three guiding principles: all data consumption occurs from the final data products layer; the further right the integration point (towards Platinum), the more efficient the processing in terms of storage and compute; and we prefer materialised views over additional storage layers wherever the source system supports it.
tags: data, data warehouse, analytics, medallion architecture, etl
entry: Q1
mode: elimination

Q1: How is the data expected to be used?
  A: REAL-TIME: The data is expected to be available as a hyper near-time service, prioritising latency over standardisation and consolidation.  [PLATINUM-M]
  B: NEAR-TIME/BATCH: The data is expected to be available in a timely manner for analytics or onward integrations, but standardisation, accuracy, and completeness are prioritised over latency.

Q2: What is the content of the data to be consumed in the warehouse?
  A: ENTITY: The data contains information about a specific entity or object that follows a specific lifecycle over time and will ultimately need to be included as part of a target logical data model. [COPPER, BRONZE-M, BRONZE-S, SILVER-M, SILVER-S, GOLD-M, GOLD-S, PLATINUM-M]
  B: TRANSACTIONAL: The data contains point-in-time information about a specific event that needs to be included in a target logical data model, either as a list of events or as summarised data. [COPPER, BRONZE-M, BRONZE-S, SILVER-M, SILVER-S, GOLD-M, GOLD-S, PLATINUM-M]
  C: UNDERLYING: The data contains low-level transactional information about a specific event that will ultimately be aggregated or analysed in some way before derived data is included in the target data model. [COPPER, BRONZE-M, BRONZE-S]

Q3: What is the technical integration type for obtaining the data from the source?
  A: FILES: Data is pulled or pushed from the source system as files and needs to land somewhere before being consumed into structured data records. [COPPER]
  B: DATABASE: Data is pulled directly from a database or warehouse, where data can either be queried or triggers established to represent data changes via SQL or another structured query language. [BRONZE-M, BRONZE-S, SILVER-M, SILVER-S]
  C: API: Data is provided via a dedicated API endpoint that can be polled or pushed via a webhook to get one or a few records at a time. [BRONZE-S, SILVER-S]
  D: MESSAGES: Data is received via a real-time message queue as whole or partial records. [BRONZE-S, SILVER-S, GOLD-S]

Q4: Are the files readable as they arrive, or do they require decrypting or unpackaging before you can understand the data?
  when: Q3=A
  A: READABLE: No additional processing is required and the files can be processed as-is into the warehouse. [COPPER]
  B: ENCODED: A specific decoding tool must be applied before the data can be processed into the warehouse. [COPPER]

Q5: What data model, structure, and values does the data arrive in?
  A: SOURCE MODEL: The data arrives in a proprietary model with source-specific values that need to be converted into a target model before being used. [COPPER, BRONZE-M, BRONZE-S]
  B: TARGET MODEL: The data is already formatted to conform to the target logical model and does not need any transformation before it can be used. [COPPER, BRONZE-M, BRONZE-S, SILVER-M, SILVER-S, PLATINUM-M]

Q6: Is the source the sole source of all information for a specific data subject/object, or will it need to be combined with other sources to create a complete logical model?
  when: Q5=B
  A: SOLE-SOURCE: The data source already conforms to the target logical model AND is the only source of data for this data subject. No other data consolidation is needed to establish the complete data records. [COPPER, BRONZE-S, BRONZE-M, SILVER-S, SILVER-M, GOLD-M, GOLD-S, PLATINUM-M]
  B: PARTIAL-SOURCE: While the data source already conforms to the target logical data model, it does not contain everything needed about these records or the full population, and it will need to be consolidated with other sources before being used. [COPPER, BRONZE-S, BRONZE-M, SILVER-S, SILVER-M]

Q7: What additional special situations do you need to take into account when considering the integration strategy?
  A: NONE: No additional capabilities are required.
  B: SOURCE AUDITING: We are required to evidence the exact data content in its original form as received from the source system, separate from our internal warehouse control and processing requirements. [COPPER, BRONZE-S, SILVER-S, GOLD-S]
  C: HIGH PERFORMANCE: We are required to make the data available immediately after it becomes available from the source to downstream consumers. [GOLD-M, PLATINUM-M]

[PLATINUM-M]: Integrate to PLATINUM (as a Materialised View)
  color: #E5E4E2
  description: The source data and its consumers demand the fastest possible access — latency is the primary constraint and standardisation is secondary. The data is available via a standard SQL-like query interface, so bypass the intermediate medallion layers entirely and materialise the data directly into Platinum as its own self-contained Data Product. This is the most efficient integration path in terms of compute and storage: no intermediate copies, no transformation pipelines, no bronze or silver staging. The trade-off is that Platinum-direct integrations carry source-model artefacts into the consumption layer, which can complicate cross-source reporting. Use this pattern only when real-time latency is genuinely non-negotiable and consumers understand they are working with a source-native model.

[GOLD-M]: Integrate to Gold (as a Materialised View)
  color: #D4AF37
  description: The source data already conforms to the target logical schema, this source is the sole provider of all information for the relevant data subject, and the data is accessible via an SQL-style interface that can be queried remotely. All three conditions mean there is no need for additional normalisation, consolidation, or transformation. Materialise the data directly into the Gold layer as a view over the source system — no physical copy is required in the warehouse. This is the most cost-efficient pattern when the source can be queried with acceptable latency: storage overhead is minimal, the data is always current, and there is no ETL pipeline to maintain. Ensure the source system's query interface can handle the read load imposed by downstream consumers before committing to this pattern.

[GOLD-S]: Integrate to Gold (as stored data)
  color: #D4AF37
  description: The source data already conforms to the target logical schema and this source is the sole provider of all information for the relevant data subject — but the data cannot be accessed via a queryable SQL interface and must be physically loaded into the warehouse. There is no need for additional normalisation, consolidation, or transformation beyond ingestion. Load the data directly into Gold, bypassing Bronze and Silver. This pattern is appropriate when the source provides clean, fully conformant data via files, API, or message queue, and the warehouse does not need to retain a raw history of the source payload for audit purposes. Establish an idempotent load process with a clear primary key to enable safe re-runs.

[SILVER-M]: Integrate to Silver (as a Materialised View)
  color: #C0C0C0
  description: The source data already conforms to the target logical schema and is accessible via an SQL-like query engine — but it cannot be taken directly to Gold because it is a partial source that must be consolidated with other data sources to build a complete data product. Establish a materialised view of the data in the Silver layer, joining or unioning it with other Silver-layer sources as needed before promoting the consolidated result to Gold. The materialised view approach keeps storage overhead low while maintaining a live, queryable representation of the source. This pattern works well when the source system can handle the read load and when consolidation logic is stable rather than rapidly evolving.

[SILVER-S]: Integrate to Silver (as stored data)
  color: #C0C0C0
  description: The source data already conforms to the target logical schema, but it is only accessible through an integration mechanism (file drop, API, message queue) that requires physically loading and storing the records in the warehouse. It is also a partial source that needs to be consolidated with other data sources before it is ready for Gold. Load the data into Silver as a stored table, preserving enough metadata (source timestamp, load batch ID) to enable incremental loads and audit tracing. Apply the consolidation logic at the Silver-to-Gold promotion step. This pattern introduces a physical copy but ensures the data is available for consolidation even when the source system is temporarily unavailable.

[BRONZE-M]: Integrate to BRONZE Layer (as a Materialised View)
  color: #CD7F32
  description: The source data is available via a queryable SQL interface, which means you can establish a live materialised view in the Bronze layer without copying the raw data. Bronze becomes the point at which the warehouse first has a structured representation of the source records, but because it is a view, there is no storage duplication. New or changed records are visible in Bronze as soon as they appear in the source. This pattern is appropriate when the source data arrives in a proprietary model that needs transformation before it can be used — Bronze stores the source-native representation, and the Silver layer handles the model conversion. Ensure the view definition is idempotent and that upstream schema changes in the source system are detected and handled.

[BRONZE-S]: Integrate to BRONZE Layer (as stored data)
  color: #CD7F32
  description: The source data must be physically loaded into the Bronze layer because the integration mechanism (file, API, message queue) does not expose a queryable SQL interface. Each incoming record is inserted into Bronze as received, creating an append-only, auditable history of every payload the warehouse has ever received from this source. Bronze is the warehouse's system of record for raw inbound data — downstream transformation layers (Silver, Gold) read from Bronze rather than from the source directly, which decouples the pipeline from source system availability. Establish a clear primary key and ingestion timestamp on each Bronze record to support incremental loading, deduplication, and replay. If source auditing is required, Bronze is the layer where original payloads must be preserved in their exact received form.

[COPPER]: Integrate to COPPER File Landing Zone
  color: #B87333
  description: The source delivers data as files — whether pushed by the source system or pulled by an integration job — and those files must land in a staging area before any structured processing can begin. The Copper layer is a file-based landing zone: raw files are received and stored here, optionally for an extended retention period to satisfy audit or recovery requirements, before being processed onward into Bronze. Loaders pick up each arriving file, apply any necessary decryption, format conversion (CSV to Parquet, XML to JSON, proprietary binary to structured records), and validation before inserting rows into the Bronze layer. Files that fail validation are quarantined rather than discarded, enabling replay once the issue is resolved. Copper is the entry point for all file-based integrations regardless of the eventual target layer — the destination (Bronze, Silver, Gold) is determined by subsequent questions about data model conformance and consolidation requirements.

Machine Access

Questions in this decision tree

Possible outcomes

How to use this decision tree

Click "Open interactive version" to step through the questions. Your answers narrow the tree until a recommended outcome is reached. You can also embed this tree on your own site.

More decision trees by Andrew

Which API design pattern is right for my project?
Which API design pattern is right for my project?
Determine the right API design style for your integration scenario.
Authentication Method Selection
Authentication Method Selection
Authentication is a security-critical, high-friction decision to reverse — migrating users from one auth method to another requires coordinated password resets or credential migration campaigns. This tree eliminates methods that don't match your user type, enterprise requirements, and security posture, giving you a clear shortlist before you write a line of code.
Caching Strategy Selection
Caching Strategy Selection
Premature or misapplied caching adds complexity — stale data bugs, invalidation logic, and distributed consistency problems — without solving the actual bottleneck. This tree routes you to the caching pattern that matches your data access profile, so you apply the right tool to the right problem rather than defaulting to Redis for everything.
CI/CD Pipeline Tool Selection
CI/CD Pipeline Tool Selection
Choosing a CI/CD platform is a long-term infrastructure commitment — pipelines accumulate config, custom scripts, and team muscle memory that make switching painful. This tree eliminates tools that don't fit your source control host, infrastructure model, or team scale, leaving only the options genuinely viable for your situation.
Which cloud provider should I use — AWS, Azure, or Google Cloud?
Which cloud provider should I use — AWS, Azure, or Google Cloud?
Answer a few questions to identify the most suitable cloud platform for your workload.
Container Orchestration Platform Selection
Container Orchestration Platform Selection
Container orchestration is foundational infrastructure — the platform you choose shapes how you deploy, scale, network, and operate every service you run. This tree eliminates options that don't match your operational maturity, cloud provider commitment, and workload complexity, so you land on the platform that fits your team today without over-engineering for a scale you haven't reached.