Blog

Wiederverwendete Business Keys in Data Vault 2.0 mit dem Business Vault auflösen

Camila Birocchi

Camila Birocchi

Aktualisiert Oktober 14, 2025
9 Minuten

Einführung

In der Welt der Datenmodellierung besteht eine der Herausforderungen für Unternehmen in der Verwaltung von Tabellen mit Business Keys (BKs), die im Laufe der Zeit wiederverwendet werden. Dieses Problem tritt in der Regel auf, wenn ein Unternehmen aufgrund technischer Einschränkungen im Quellsystem Primärschlüssel oder "eindeutige Bezeichner" im Laufe der Zeit wiederverwendet. Diese Praxis kann zu Mehrdeutigkeit führen, insbesondere wenn historische Daten die für analytische Zwecke benötigt werden. In diesem Blogbeitrag erfahren Sie, wie Sie mit Data Vault 2.0 wiederverwendete BKs auflösen können, indem Sie den Business Vault nutzen.

Verstehen der Data Vault 2.0 Architektur

Data Vault 2.0 wird oft als eine Modellierungstechnik angesehen, aber es handelt sich um eine vollständige Lösung, die Methodik, Architektur, Implementierung und Modellierung umfasst.

Werfen wir einen Blick auf die untenstehende Architektur:

 

  1. Der erste Schritt besteht darin, die Daten aus den Quellsystemen zu extrahieren und die Daten in ihrem Rohformat in einen Staging-Bereich zu laden.
  2. Als Nächstes können Sie bei Bedarf harte Regeln anwenden, z. B. Datentypänderungen.
  3. Dann laden Sie die Daten in den Raw Vault und modellieren die Daten in Hubs, Links, Satellites usw.
  4. Wenn Sie Geschäftslogik auf Ihre Daten in mehr als einem Anwendungsfall anwenden müssen, können Sie den Raw Vault erweitern, indem Sie einen Business Vault erstellen.
  5. Der letzte Schritt ist die Erstellung der Information Marts (IMs), die für Berichte/Dashboarding-Zwecke verwendet werden. Die IM-Tabellen oder -Ansichten werden mit Raw Vault/Business Vault erstellt und können z.B. mit der Dimensionsmodellierung von Kimball modelliert werden. Lesen Sie diesen anderen Blog als Referenz: https://xebia.com/blog/kimball-dimensional-modelling/ .

Schauen wir uns ein Beispiel an

Nehmen wir an, wir sind ein E-Commerce-Unternehmen und möchten die Daten unserer Bestellungen analysieren. Der Bestellcode wird im Laufe der Zeit immer wieder verwendet. In diesem Szenario haben wir normalerweise eine Quelltabelle für den Bestellkopf und eine weitere für die Bestellpositionen.

Auftragskopf:

auftrag_code auftrag_datum kunde _code ship_to_city
111110/10/2024AAlmere
111211/10/2024BAmsterdam
111112/11/2024DBreda

Artikel bestellen:

auftrag_codezeilen_codeartikel_codeMengeBetrag
11111AB132
11112BC2 34.99
11113DF1056
11121BC570
11122XS15
11111DE20251.95

 

Das Business Intelligence (BI)-Team erwartet, dass sie zwei Information Mart-Tabellen haben, eine für den Auftragskopf und eine für die Auftragspositionen, und sie müssen in der Lage sein, diese für Berichtszwecke zu verbinden. Außerdem möchten sie die gesamten historischen Änderungen verfolgen können.

Um festzustellen, welche Auftragspositionen mit den einzelnen Auftragsköpfen verknüpft sind, würden wir normalerweise den Fremdschlüssel zu order_code in der Tabelle order items überprüfen und so den kompletten Auftrag rekonstruieren.

Wenn wir uns jedoch die Auftragskopftabelle genauer ansehen, stellen wir fest, dass der order_code "1111" an einem anderen Datum wiederverwendet wurde. Dadurch wird es kompliziert zu bestimmen, welche Artikelcodes im Laufe der Zeit mit jedem order_code verbunden sind.

Die logische Lösung in diesem Fall besteht darin, einen Primärschlüssel (PK) in der Tabelle Auftragskopf zu erstellen, der jeden Auftrag im Laufe der Zeit eindeutig identifiziert. Derselbe Wert sollte als Fremdschlüssel (FK) in die Tabelle der Auftragspositionen eingefügt werden. Indem wir das Bestelldatum als Teil des Primärschlüssels einfügen, können wir die Eindeutigkeit sicherstellen und erhalten eine Tabelle mit den erwarteten Ergebnissen, wie unten gezeigt:

im_order_header:

pk_bestellung_codeauftrag_codeauftrag_datumkunden_code ship_to_city
1111 || 10/10/2024111110/10/2024AAlmere
1112 || 11/10/2024111211/10/2024BAmsterdam
1111 || 12/11/2024111112/11/2024DBreda

 

im_order_items:

pk_bestellung_linie_codefk_bestellung_code auftrag_codezeilen_codeArtikel_codeMengeBetrag
1111 || 10/10/2024 || 11111 || 10/10/202411111AB132
1111 || 10/10/2024 || 21111 || 10/10/202411112BC234.99
1111 || 10/10/2024 || 31111 || 10/10/202411113DF1056
1112 || 11/10/2024 || 11112 || 11/10/202411121BC570
1112 || 11/10/2024 || 21112 || 11/10/202411122XS15
1111 || 12/11/2024 || 11111 || 12/11/202411111DE20251.95

 

In den nächsten Abschnitten erfahren Sie, wie Sie Data Vault 2.0 verwenden können, um diese Ausgabe zu erhalten.

Der rohe Tresor

Gehen wir davon aus, dass Ihre Daten bereits extrahiert und im Staging-Bereich verfügbar sind. Der nächste Schritt besteht darin, die Daten in den Raw Vault zu laden. In diesem Blog werden wir nicht im Detail auf die verschiedenen Strukturen eingehen, die im Data Warehouse nach den Prinzipien von Data Vault 2.0 erstellt werden können, wie z.B. Hubs, Links und Satelliten. Nachfolgend finden Sie eine mögliche Lösung für die Modellierung der Auftragsdaten.

 

Nachdem Sie Ihre Satelliten erstellt haben, sehen Sie die unten stehenden Informationen. In Data Vault 2.0 wird empfohlen, Hash Keys (HK) zu verwenden, um Datensätze eindeutig zu identifizieren und konsistente Verknüpfungen zwischen Tabellen sicherzustellen. Hash Keys bieten eine bessere Leistung bei Joins im Vergleich zu textbasierten Datentypen.

rv_sat__order_header:

hk_order auftrag_code auftrag_datum kunden_code ship_to_city load_date end_date
MD5(1111)111110/10/2024AAlmere10/10/202412/11/2024
MD5(1112)111211/10/2024BAmsterdam11/10/2024NULL
MD5(1111)111112/11/2024DBreda12/11/2024NULL

rv_sat__order_items:

hk_order hk_order_line auftrag_code zeilen_code artikel_code Menge Betrag load_date end_date
MD5(1111)MD5(1111 || 1)11111AB13210/10/202412/11/2024
MD5(1111)MD5(1111 || 2)11112BC234.9910/10/202412/11/2024
MD5(1111)MD5(1111 || 3)1111 3DF105610/10/202412/11/2024
MD5(1112)MD5(1112 || 1)1112 1BC57011/10/2024NULL
MD5(1112)MD5(1112 || 2)1112 2XS1511/10/2024NULL
MD5(1111)MD5(1111 || 1)1111 1DE20251.9512/11/2024NULL

 

Jetzt müssen wir also Folgendes bedenken:

  1. Derselbe Bestellcode ist nur einmal im Satelliten aktiv (mit end_date gleich NULL).
  2. Wenn Sie diese Satelliten verwenden, um Ihre Information Marts-Tabellen oder -Ansichten zu erstellen, müssen Sie unbedingt darauf achten, dass nur die aktiven Datensätze berücksichtigt werden und historische Daten ausgeschlossen werden. Wenn Sie nicht nach aktiven Datensätzen filtern, führt dies zu nicht eindeutigen Primärschlüsseln, so dass es unmöglich ist, die Kopf- und Artikelmodelle korrekt zu verknüpfen.

Das Unternehmen muss historische Daten analysieren, um fundierte Entscheidungen zu treffen. Wenn wir uns das erwartete Ergebnis ansehen, sehen wir, dass die eindeutige Zuordnung des Primärschlüssels die Anwendung von Geschäftslogik erfordert. Beide Tabellen müssen eine Kombination aus order_code und order_date als eindeutigen Bezeichner verwenden. Die Rohdaten für die Bestellpositionen enthalten jedoch keine Datumsangaben. In diesem Szenario haben wir die folgenden Möglichkeiten:

  1. Bitten Sie den Datenanbieter, die Datumsinformationen in die Quelltabelle der Auftragspositionen aufzunehmen. Dies kann sehr zeitaufwendig sein und ist manchmal nicht möglich.
  2. Nachdem Sie die Daten in den Raw Vault geladen haben, erstellen Sie eine Geschäftslogik, um die Kombination aus Bestellcode und Bestelldatum in die Artikelinformationen aufzunehmen. Dies kann mit Hilfe des Business Vault geschehen.
  3. Das Zusammenführen der Kopf- und Elementtabelle vor dem Laden der Daten in den Raw Vault ist keine Option, da dies gegen die Data Vault 2.0-Standards verstoßen würde, die besagen, dass Sie im Staging Layer nur harte Regeln anwenden sollten.
  4. Das Zusammenführen der Kopf- und Artikeldaten nach dem Laden der Daten in den Raw Vault im Information Mart ist ebenfalls nicht ideal, da es die Berichtsebene komplexer und redundanter macht. Die Geschäftslogik zur Kombination von Bestellcode und Bestelldatum müsste für jeden Anwendungsfall neu erstellt werden, was zu Inkonsistenzen führen würde.

Der Business Tresor

Der Business Vault ist eine Erweiterung des Raw Vault, die besonders nützlich ist, wenn Sie eine Geschäftslogik anwenden müssen, die für mehrere Anwendungsfälle benötigt wird. Er muss so implementiert werden, dass Sie denselben Ersatzschlüssel sowohl für den Bestellkopf als auch für die Bestellpositionen haben.

bv__order_header:

Der bv__order_header ist eine Erweiterung des rv_sat__order_header. Um sie zu erstellen, müssen Sie einen Ersatzschlüssel generieren und das Enddatum auf der Grundlage des vorherigen load_date-Werts für jeden Ersatzschlüssel neu berechnen. Dieser Ansatz ermöglicht es Ihnen, Fälle zu behandeln, in denen zwei order_code-Werte, wie z.B. "1111", gleichzeitig gültig sind. Nachfolgend sehen Sie ein Beispiel für den Code und wie die Business Vault Auftragskopftabelle aussehen würde:

with
  unique_key as (
    select
      order_code,
      order_date,
      concat (bk_order_code, ' || ', order_date) as bk_order_code,
      customer_code,
      ship_to_city,
      load_date
    from
      rv_sat__order_header
  ),
  end_date_calculation as (
    select
      *,
      lead (load_date) over (
        partition by
          bk_order_code
        order by
          load_date
      ) as end_date
    from
      unique_key
  )
select
  bk_order_code,
  order_date,
  customer_code,
  ship_to_city,
  load_date,
  coalesce(end_date, '9999-12-31') as end_date
from
  end_date_calculation

 

auftrag_code auftrag_datum bk_bestellung_code kunden_code ship_to_city load_date end_date
1111 10/10/20241111 || 10/10/2024BAlmere10/10/202411/10/2024
1111 10/10/20241111 || 10/10/2024AAlmere11/10/202431/12/9999
1112 11/10/20241112 || 11/10/2024BAmsterdam11/10/202412/10/2024
1112 11/10/20241112 || 11/10/2024BAmsterdam12/10/202431/12/9999
1111 12/11/2024 1111 || 12/11/2024DBreda12/11/202431/12/9999

 

bv__order_items:

Eine ähnliche Logik gilt für die Erstellung der Business Vault-Tabelle für rv_sat__order_items, aber zuerst müssen Sie denselben Surrogatschlüssel aus dem zuvor erstellten Business Vault-Bestellkopf hinzufügen. Hier noch einmal ein Codebeispiel und wie die Business Vault-Tabelle für Auftragspositionen aussehen würde:

with
  sat_order_items as (
    select
      order_code,
      line_code,
      item_code,
      quantity,
      amount,
      load_date
    from
      rv_sat__order_items
  ),
  bv_order_header as (
    select
      *
    from
      bv__order_header
  ),
  add_unique_key as (
    select
      sat_order_items.*,
      bv_order_header.bk_order_code,
      concat (
        bv_order_header.bk_order_code,
        "||",
        sat_order_items.line_code
      ) as bk_order_line_code
    from
      sat_order_items
      left join bv_order_header on sat_order_items.order_code = bv_order_header.bk_order_code
      and sat_order_items.load_date between bv_order_header.load_date and bv_order_header.end_date
  ),
  end_date_calculation as (
    select
      *,
      lead (load_date) over (
        partition by
          bk_order_line_code
        order by
          load_date
      ) as end_date
    from
      add_unique_key
  )
select
  *,
  coalesce(end_date, '9999-12-31') as end_date
from
  end_date_calculation

 

auftrag_codebk_bestellung_code bk_order_line_codezeilen_codeartikel_codeMengeBetragload_dateend_date
11111111 || 10/10/20241111 || 1 || 10/10/20241AB13211/10/202431/12/9999
11111111 || 10/10/20241111 || 2 || 10/10/20242BC234.9911/10/2024 31/12/9999
11111111 || 10/10/20241111 || 3 || 10/10/20243DF105611/10/202431/12/9999
11121112 || 11/10/20241112 || 1 || 11/10/20241BC57012/10/202431/12/9999
11121112 || 11/10/20241112 || 2 || 11/10/20242XS1512/10/202431/12/9999
11111111 || 12/11/20241111 || 1 || 12/11/20241DE20251.9512/11/202431/12/9999

 

Mit dem Business Vault können Sie jetzt Information Marts erstellen, die die BI-Anforderungen vollständig erfüllen.

Indem Sie den Information Mart als Ansicht materialisieren, die direkt aus dem Business Vault abgerufen wird, können Sie die Duplizierung von Daten auf mehreren Ebenen vermeiden und den Bedarf an Berechnungen auf der Information Mart-Ebene reduzieren. Dieser Ansatz verbessert die Geschwindigkeit, mit der BI-Tools auf die Daten zugreifen und sie analysieren können, erheblich.

Da durch die Anwendung von Geschäftslogik ein neuer Geschäftsschlüssel erstellt wurde, müssen Sie auch den Order Hub rekonstruieren und Verknüpfungen zwischen dem neuen Geschäftsschlüssel und den Customer und Item Hubs im Business Vault herstellen. Dies gewährleistet eine konsistente Integration und Nachvollziehbarkeit im gesamten Modell.

Fazit

Die Verwaltung von wiederverwendeten Geschäftsschlüsseln in einer Data Vault 2.0-Implementierung kann eine Herausforderung sein, aber der Business Vault bietet eine robuste Lösung, um die historische Integrität zu erhalten und die Eindeutigkeit der Daten zu gewährleisten.

Brauchen Sie Hilfe bei der Bewältigung komplexer Data Vault 2.0 Herausforderungen? Unsere Data Vault 2.0-zertifizierten Analysetechniker bei Xebia unterstützen Sie dabei, Ihr Data Vault effektiv zu nutzen. Kontaktieren Sie uns noch heute, um das volle Potenzial Ihrer Daten zu erschließen!

Verfasst von

Camila Birocchi

I'm a technology enthusiast passionate about problem-solving and making companies data-driven. I thrive on turning challenges into solutions and transforming data into actionable insights.

Contact

Let’s discuss how we can support your journey.