{"id":92015,"date":"2020-08-21T19:42:13","date_gmt":"2020-08-21T17:42:13","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/obzor-gibkih-metodologij-proektirovaniya-dwh"},"modified":"2020-08-21T19:42:13","modified_gmt":"2020-08-21T17:42:13","slug":"obzor-gibkih-metodologij-proektirovaniya-dwh","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/obzor-gibkih-metodologij-proektirovaniya-dwh","title":{"rendered":"\u00dcberblick \u00fcber agile DWH-Designmethodologien","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Die Entwicklung eines Data Warehouses ist eine langwierige und ernsthafte Angelegenheit. <\/p>\n<p>Vieles im Leben eines Projekts h\u00e4ngt davon ab, wie gut das objektorientierte Modell und die Datenbankstruktur von Anfang an durchdacht sind.<\/p>\n<p>Eine g\u00e4ngige Methode sind verschiedene Kombinationen aus Sternschema und dritter Normalform. In der Regel gilt: Quelldaten \u2013 3NF, Data Marts \u2013 Sternschema. Dieser, durch die Jahre bew\u00e4hrte Ansatz, gest\u00fctzt durch zahlreiche Studien, ist das Erste (und manchmal auch das Einzige), was einem erfahrenen DWH-Spezialisten in den Sinn kommt, wenn er dar\u00fcber nachdenkt, wie ein analytisches Data Warehouse aussehen sollte.<\/p>\n<p>Andererseits ist es f\u00fcr Unternehmen im Allgemeinen und f\u00fcr die Anforderungen des Kunden im Besonderen typisch, sich schnell zu ver\u00e4ndern, w\u00e4hrend Daten sowohl \u201evertikal\u201c als auch \u201ehorizontal\u201c wachsen. Hier zeigt sich der Hauptnachteil des Sternschemas \u2013 die Begrenztheit. <b>Flexibilit\u00e4t<\/b>.<\/p>\n<p>Und wenn in Ihrem ruhigen und gem\u00fctlichen Leben eines DWH-Entwicklers pl\u00f6tzlich:<\/p>\n<ul>\n<li>die Aufgabe auftaucht, \u201eschnell irgendetwas zu machen und dann sehen wir weiter\u201c;<\/li>\n<li>ein schnell wachsendes Projekt mit der Anbindung neuer Datenquellen und einer Umgestaltung des Gesch\u00e4ftsmodells mindestens einmal pro Woche entsteht;<\/li>\n<li>Ein Kunde ist aufgetaucht, der sich nicht vorstellen kann, wie das System aussehen und welche Funktionen es letztendlich erf\u00fcllen soll, aber bereit ist, zu experimentieren und das gew\u00fcnschte Ergebnis schrittweise zu verfeinern, w\u00e4hrend er sich schrittweise diesem Ziel n\u00e4hert.<\/li>\n<li>Der Projektmanager kam mit einer frohen Botschaft: \u201eUnd jetzt haben wir Agile!\u201c<\/li>\n<\/ul>\n<p>\nOder wenn Sie einfach nur neugierig sind, wie man Speicher bauen kann \u2013 willkommen unter dem Cut!<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberblick \u00fcber agile DWH-Designmethodologien\" src=\"\/wp-content\/uploads\/2020\/08\/59cd70ca3af4841d0c5c9bfbbd7636a3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Was bedeutet \"Flexibilit\u00e4t\"?<\/h3>\n<p>\nLassen Sie uns zun\u00e4chst festlegen, welche Eigenschaften das System haben sollte, damit es als \"flexibel\" bezeichnet werden kann. <\/p>\n<p>Es ist wichtig zu betonen, dass die beschriebenen Eigenschaften sich speziell auf <b>das System<\/b>und nicht auf <b>den Prozess <\/b>seiner Entwicklung beziehen. Wenn Sie also \u00fcber Agile als Entwicklungsmethodologie lesen m\u00f6chten, sollten Sie sich besser mit anderen Artikeln vertrautmachen. Zum Beispiel gibt es hier auf Habr eine F\u00fclle interessanter Materialien (wie <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/436178\/\">\u00fcbersichtliche<\/a><\/noindex> und <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/284012\/\">praktische<\/a><\/noindex>, als auch <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dataart\/blog\/245605\/\">problematische<\/a><\/noindex>).<\/p>\n<p>Das bedeutet nicht, dass der Entwicklungsprozess und die Struktur eines Data Warehouses \u00fcberhaupt nicht miteinander verbunden sind. Im Allgemeinen sollte die Entwicklung eines flexiblen Architekturspeichers nach Agile wesentlich einfacher sein. In der Praxis finden sich jedoch h\u00e4ufig auch Varianten, bei denen klassisches DWH-Design nach Kimball und Data Vault \u2014 nach dem Wasserfallprinzip \u2014 \u00f6fter vorkommen als gl\u00fcckliche F\u00e4lle der Flexibilit\u00e4t in beiden Formen in einem Projekt.<\/p>\n<p>Also, welche Eigenschaften sollte ein flexibles Data Warehouse besitzen? Hier lassen sich drei Punkte hervorheben:<\/p>\n<ol>\n<li><b>Fr\u00fche Lieferung und schnelle Anpassungen<\/b> \u2014 das bedeutet, dass im Idealfall das erste Gesch\u00e4ftsergebnis (zum Beispiel die ersten funktionierenden Berichte) so fr\u00fch wie m\u00f6glich erzielt werden sollte, also noch bevor das gesamte System vollst\u00e4ndig entworfen und implementiert ist. Dabei sollte auch jede nachfolgende Anpassung m\u00f6glichst wenig Zeit in Anspruch nehmen.<\/li>\n<li><b>Iterative Anpassungen<\/b> \u2014 das bedeutet, dass jede folgende Anpassung idealerweise nicht die bereits funktionierenden Funktionalit\u00e4ten beeintr\u00e4chtigen sollte. Genau dieser Aspekt wird oft zum gr\u00f6\u00dften Albtraum bei gro\u00dfen Projekten \u2013 fr\u00fcher oder sp\u00e4ter wachsen einzelne Objekte mit so vielen Verbindungen, dass es einfacher wird, die Logik in einer Kopie daneben vollst\u00e4ndig zu replizieren, als ein Feld in die bestehende Tabelle hinzuzuf\u00fcgen. Und wenn es Sie \u00fcberrascht, dass die Analyse der Auswirkungen einer Anpassung auf bestehende Objekte mehr Zeit in Anspruch nehmen kann als die Anpassung selbst \u2013 dann haben Sie wahrscheinlich noch nicht mit gro\u00dfen HD im Bankwesen oder Telekommunikation gearbeitet.<\/li>\n<li><b>St\u00e4ndige Anpassung an sich \u00e4ndernde Gesch\u00e4ftsanforderungen<\/b> \u2014 die gesamte Objekthierarchie sollte nicht nur unter Ber\u00fccksichtigung m\u00f6glicher Erweiterungen entworfen werden, sondern mit dem Kalk\u00fcl, dass die Richtung dieser n\u00e4chsten Erweiterung Ihnen zu Entwurfszeitpunkten niemals h\u00e4tte in den Sinn kommen k\u00f6nnen.<\/li>\n<\/ol>\n<p>\nUnd ja, die Einhaltung all dieser Anforderungen in einem System ist m\u00f6glich (nat\u00fcrlich unter bestimmten Umst\u00e4nden und mit einigen Vorbehalten).<\/p>\n<p>Im Folgenden bespreche ich die zwei beliebtesten agilen Designmethoden f\u00fcr HD \u2013 <b>Anchor-Modell<\/b> und <b>Data Vault<\/b>. Dabei gibt es so wunderbare Ans\u00e4tze wie EAV, 6NF (in reinster Form) und alles, was mit NoSQL-L\u00f6sungen zu tun hat \u2013 nicht weil diese schlechter sind, und auch nicht, weil der Artikel sonst den Umfang einer typischen Dissertation annehmen w\u00fcrde. Einfach weil alles dies zu L\u00f6sungen einer etwas anderen Klasse geh\u00f6rt \u2013 entweder zu Ans\u00e4tzen, die Sie in spezifischen F\u00e4llen anwenden k\u00f6nnen, unabh\u00e4ngig von der Gesamtarchitektur Ihres Projekts (wie EAV), oder zu global anderen Paradigmen der Informationsspeicherung (wie zum Beispiel Graph-Datenbanken und andere NoSQL-Varianten).<\/p>\n<h3>Probleme des \u201eklassischen\u201c Ansatzes und deren L\u00f6sungen in flexiblen Methoden<\/h3>\n<p>\n<i>Mit dem \u201eklassischen\u201c Ansatz meine ich den guten alten Stern (unabh\u00e4ngig von der konkreten Umsetzung der zugrunde liegenden Schichten, m\u00f6gen mir die Anh\u00e4nger von Kimball, Inmon und CDM vergeben).<br \/>\n<\/i><\/p>\n<h4>1. Strikte Kardinalit\u00e4t der Verbindungen<\/h4>\n<p>\nDiese Modellierung basiert auf einer klaren Trennung der Daten in <b>Dimensionen (Dimension)<\/b> und <b>Fakten (Fact)<\/b>. Und das macht verdammt viel Sinn \u2014 denn die Datenanalyse reduziert sich in \u00fcberwiegendem Ma\u00dfe auf die Analyse bestimmter numerischer Kennzahlen (Fakten) in bestimmten Anschnitten (Dimensionen).<\/p>\n<p>Dabei werden die Beziehungen zwischen Objekten in Form von Verbindungen zwischen Tabellen \u00fcber einen Fremdschl\u00fcssel gelegt. Das erscheint v\u00f6llig nat\u00fcrlich, f\u00fchrt aber sofort zu der ersten Einschr\u00e4nkung der Flexibilit\u00e4t \u2014 <b>der strengen Definition der Kardinalit\u00e4t von Beziehungen.<\/b>.<\/p>\n<p>Das bedeutet, dass Sie in der Entwurfsphase der Tabellen genau festlegen m\u00fcssen, ob jede Paarung verbundener Objekte viele-zu-viele oder nur eins-zu-viele sein kann und \u201ein welche Richtung\u201c. Davon h\u00e4ngt direkt ab, in welcher der Tabellen der Prim\u00e4rschl\u00fcssel und in welcher der Fremdschl\u00fcssel platziert wird. Eine \u00c4nderung dieser Beziehung bei neuen Anforderungen wird mit gro\u00dfer Wahrscheinlichkeit zu einer \u00dcberarbeitung der Datenbank f\u00fchren.<\/p>\n<p>Wenn Sie zum Beispiel das Objekt \u201eKassenbon\u201c entwerfen, haben Sie, gest\u00fctzt auf die eidesstattlichen Erkl\u00e4rungen der Verkaufsabteilung, die M\u00f6glichkeit vorgesehen, <b>eine Promotion auf mehrere Positionen im Bon anzuwenden<\/b> (aber nicht umgekehrt):<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberblick \u00fcber agile DWH-Designmethodologien\" src=\"\/wp-content\/uploads\/2020\/08\/15226cb79c30364d94147383ba36a8fd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nNach einiger Zeit f\u00fchrten die Kollegen eine neue Marketingstrategie ein, bei der mehrere Aktionen gleichzeitig f\u00fcr eine gleiche Position wirken k\u00f6nnen. <b>Und jetzt m\u00fcssen Sie die Tabellen \u00fcberarbeiten und die Beziehungen in einem separaten Objekt hervorheben.<\/b>(Alle abgeleiteten Objekte, in denen das Join-Check auf die Promotion stattfindet, m\u00fcssen jetzt ebenfalls \u00fcberarbeitet werden.) <\/p>\n<p>Beziehungen im Data Vault und im Anchor Model<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberblick \u00fcber agile DWH-Designmethodologien\" src=\"\/wp-content\/uploads\/2020\/08\/3c4d84a31088660257d74c4c703071e0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Es stellte sich als recht einfach heraus, eine solche Situation zu vermeiden: Man muss der Verkaufsabteilung nicht vertrauen; es reicht aus,<\/b><\/p>\n<p>alle Beziehungen urspr\u00fcnglich in separaten Tabellen zu speichern <b>und als viele-zu-viele zu verarbeiten.<\/b> Dieser Ansatz wurde <\/p>\n<p>von Dan Linstedt <b>als Teil der Paradigmen<\/b> und wurde vollst\u00e4ndig unterst\u00fctzt <b>Data Vault<\/b> von Lars R\u00f6nnb\u00e4ck. <b>Anchor Model<\/b> in <b>Somit erhalten wir das erste Unterscheidungsmerkmal flexibler Methoden:<\/b>.<\/p>\n<p>Die Beziehungen zwischen Objekten werden nicht in den Attributen der \u00fcbergeordneten Entit\u00e4ten gespeichert, sondern stellen einen eigenen Objekttyp dar.<\/p>\n<blockquote><p>Solche Verbindungstabellen werden genannt<\/p><\/blockquote>\n<p>In <b>Data Vault<\/b> Anchor Model <b>Link<\/b>, sondern in <b>Verbindung<\/b> \u2014 <b>Verbinde<\/b>. Auf den ersten Blick scheinen sie sehr \u00e4hnlich, obwohl ihre Unterschiede nicht auf die Namen beschr\u00e4nkt sind (dar\u00fcber wird im Folgenden gesprochen). In beiden Architekturen k\u00f6nnen Verkn\u00fcpfungstabellen beliebig viele Entit\u00e4ten verbinden <b>jede Anzahl von Entit\u00e4ten<\/b> (nicht unbedingt 2).<\/p>\n<p>Diese auf den ersten Blick redundante Struktur bietet wesentliche Flexibilit\u00e4t bei Erg\u00e4nzungen. Solch eine Struktur wird nicht nur tolerant gegen\u00fcber \u00c4nderungen der Kardinalit\u00e4ten bestehender Beziehungen, sondern auch gegen\u00fcber dem Hinzuf\u00fcgen neuer \u2014 wenn nun eine Verkn\u00fcpfung zur kassatf\u00fchrenden Person f\u00fcr den Beleg hinzugef\u00fcgt wird, wird das Auftreten dieser Verkn\u00fcpfung einfach eine Erweiterung der bestehenden Tabellen sein, ohne Einfluss auf vorhandene Objekte und Prozesse.<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberblick \u00fcber agile DWH-Designmethodologien\" src=\"\/wp-content\/uploads\/2020\/08\/6a3b942a6e5d04dcbe2ff0881ebdf1bf.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h4>2. Datenredundanz<\/h4>\n<p>\nDas zweite Problem, das durch flexible Architekturen gel\u00f6st wird, ist weniger offensichtlich und charakteristisch vor allem f\u00fcr <b>SCD2-Typ-Messungen<\/b> (langsam sich \u00e4ndernde Dimensionen zweiten Typs), obwohl nicht nur f\u00fcr diese.<\/p>\n<p>In einem klassischen Data Warehouse stellt eine Dimension normalerweise eine Tabelle dar, die einen Surrogatschl\u00fcssel (als PK) sowie eine Reihe von Gesch\u00e4ftsschl\u00fcsseln und Attributen in einzelnen Spalten enth\u00e4lt. <\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberblick \u00fcber agile DWH-Designmethodologien\" src=\"\/wp-content\/uploads\/2020\/08\/059dd47b2302b58c19a0144061b78cb4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWenn das Ma\u00df eine Versionierung unterst\u00fctzt, werden dem Standardsatz von Feldern die Zeitgrenzen der Versionsg\u00fcltigkeit hinzugef\u00fcgt, und es erscheinen mehrere Versionen in der Quelle (eine f\u00fcr jede \u00c4nderung der versionierten Attribute).<\/p>\n<p>Enth\u00e4lt das Ma\u00df mindestens ein h\u00e4ufig ver\u00e4ndertes versioniertes Attribut, wird die Anzahl der Versionen dieses Ma\u00dfes erheblich sein (auch wenn die anderen Attribute nicht versioniert sind oder sich nie \u00e4ndern), und wenn mehrere solcher Attribute vorhanden sind, kann die Anzahl der Versionen exponentiell mit ihrer Anzahl wachsen. Solch ein Ma\u00df kann erheblichen Speicherplatz beanspruchen, obwohl der Gro\u00dfteil der darin gespeicherten Daten einfach Duplikate von Werten unver\u00e4nderlicher Attribute aus anderen Zeilen sind.<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberblick \u00fcber agile DWH-Designmethodologien\" src=\"\/wp-content\/uploads\/2020\/08\/f3d5a4fd83a5ef36355961302173791d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDabei wird h\u00e4ufig auch <b>Denormalisierung<\/b> verwendet \u2014 Teile von Attributen werden absichtlich als Werte und nicht als Verweise auf ein Verzeichnis oder ein anderes Ma\u00df gespeichert. Dieser Ansatz beschleunigt den Datenzugriff und reduziert die Anzahl der Joins beim Zugriff auf das Ma\u00df.<\/p>\n<p>In der Regel f\u00fchrt dies dazu, dass <b>Die gleichen Informationen werden gleichzeitig an mehreren Orten gespeichert.<\/b>Zum Beispiel k\u00f6nnen Informationen \u00fcber den Wohnort und die Zugeh\u00f6rigkeit zur Kundenkategorie gleichzeitig in den Dimensionen 'Kunde' und den Fakten 'Kauf', 'Lieferung' sowie 'Anfragen beim Callcenter' gespeichert werden, ebenso wie in der Verkn\u00fcpfungstabelle 'Kunde \u2014 Kundenmanager'.<\/p>\n<p>Insgesamt gilt das oben Beschriebene auch f\u00fcr gew\u00f6hnliche (nicht versionierte) Dimensionen, aber in versionierten Dimensionen k\u00f6nnen andere Ma\u00dfst\u00e4be gelten: Das Erscheinen einer neuen Version eines Objekts (insbesondere r\u00fcckblickend) f\u00fchrt nicht nur zu einem Update aller verbundenen Tabellen, sondern zu einem kaskadierenden Erscheinen neuer Versionen der verkn\u00fcpften Objekte \u2014 wenn Tabelle 1 beim Aufbau von Tabelle 2 verwendet wird und Tabelle 2 beim Aufbau von Tabelle 3 usw. Selbst wenn kein Attribut von Tabelle 1 an der Erstellung von Tabelle 3 beteiligt ist (sondern andere Attribute von Tabelle 2, die aus anderen Quellen stammen), wird ein versioniertes Update dieser Konstruktion mindestens zu zus\u00e4tzlichen Overheadkosten f\u00fchren und im schlimmsten Fall zu \u00fcberfl\u00fcssigen Versionen in Tabelle 3, die hier \u00fcberhaupt 'nicht zutrifft' und so weiter in der Kette.<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberblick \u00fcber agile DWH-Designmethodologien\" src=\"\/wp-content\/uploads\/2020\/08\/2935f93abc46f02bdc528accda2af758.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h4>3. Nichtlineare Komplexit\u00e4t der Nachbearbeitung<\/h4>\n<p>\nJede neue Sicht, die auf einer anderen basiert, erh\u00f6ht die Anzahl der Stellen, an denen sich die Daten bei \u00c4nderungen im ETL \u201eauseinanderentwickeln\u201c k\u00f6nnen. Dies f\u00fchrt wiederum zu einer h\u00f6heren Komplexit\u00e4t (und Dauer) jeder nachfolgenden Anpassung.<\/p>\n<p>Wenn das oben Beschriebene f\u00fcr Systeme mit selten angepassten ETL-Prozessen gilt, kann man in einer solchen Paradigme leben \u2013 es gen\u00fcgt, darauf zu achten, dass neue Anpassungen korrekt in alle verbundenen Objekte \u00fcbernommen werden. Treten jedoch h\u00e4ufig Anpassungen auf, steigt die Wahrscheinlichkeit, versehentlich mehrere Verbindungen \u201ezu \u00fcbersehen\u201c, erheblich.<\/p>\n<p>Wenn man zudem bedenkt, dass \u201eversioniertes\u201c ETL wesentlich komplexer ist als \u201enicht-versioniertes\u201c, wird es ziemlich schwierig, Fehler bei h\u00e4ufigen Anpassungen dieser gesamten Struktur zu vermeiden.<\/p>\n<h3>Speicherung von Objekten und Attributen im Data Vault und Anchor Model<\/h3>\n<p>\nDer von den Autoren flexibler Architekturen vorgeschlagene Ansatz l\u00e4sst sich wie folgt formulieren:<\/p>\n<blockquote><p>Es ist notwendig, das Ver\u00e4nderliche von dem Unver\u00e4nderlichen zu trennen. Das hei\u00dft, Schl\u00fcssel separat von Attributen zu speichern.<\/p><\/blockquote>\n<p> Dabei sollte man nicht verwechseln <b>nicht-versioniert<\/b> das Attribut mit <b>unver\u00e4ndert<\/b>: Der erste speichert keine \u00c4nderungsverlauf, kann sich jedoch \u00e4ndern (zum Beispiel bei der Korrektur eines Eingabefehlers oder beim Empfang neuer Daten); der zweite \u00e4ndert sich niemals.<\/p>\n<p>\u00dcber die Definition dessen, was in einem Data Vault und einem Anchor-Modell unver\u00e4nderlich ist, gibt es unterschiedliche Ansichten.<\/p>\n<p>Aus architektonischer Sicht <b>Data Vault<\/b>, kann man als unver\u00e4nderlich betrachten <b>das gesamte Satz an Schl\u00fcsseln<\/b> \u2014 nat\u00fcrliche (z. B. die Steuer-Identifikationsnummer der Organisation, die Artikelnummer im Quellsystem usw.) und surrogate. Dabei k\u00f6nnen die anderen Attribute nach Quelle und\/oder \u00c4nderungsfrequenz in Gruppen unterteilt werden und <b>f\u00fcr jede Gruppe sollte eine separate Tabelle gef\u00fchrt werden<\/b> mit einem unabh\u00e4ngigen Satz von Versionen.<\/p>\n<p>Im Konzept des <b>Anchor Model<\/b> wird als unver\u00e4nderlich betrachtet <b>nur der surrogate Schl\u00fcssel<\/b> der Entit\u00e4t. Alles andere (einschlie\u00dflich der nat\u00fcrlichen Schl\u00fcssel) ist einfach ein Spezialfall seiner Attribute. Dabei <b>sind alle Attribute standardm\u00e4\u00dfig unabh\u00e4ngig voneinander<\/b>, daher sollte f\u00fcr jedes Attribut eine <b>separate Tabelle erstellt werden.<\/b>.<\/p>\n<p>In <b>Data Vault<\/b> Die Tabellen, die Entit\u00e4tsschl\u00fcssel enthalten, werden als <b>Hubs (Hub)<\/b>. Hubs enthalten immer eine feste Anzahl von Feldern:<\/p>\n<ul>\n<li>Nat\u00fcrliche Entit\u00e4tsschl\u00fcssel<\/li>\n<li>Surrogatschl\u00fcssel<\/li>\n<li>Referenz auf die Quelle<\/li>\n<li>Zeitpunkt der Hinzuf\u00fcgung des Datensatzes<\/li>\n<\/ul>\n<p>\nDatens\u00e4tze in den Hubs <b>werden niemals ge\u00e4ndert und haben keine Versionen<\/b>. \u00c4u\u00dferlich \u00e4hneln Hubs sehr den ID-Map-Tabellen, die in einigen Systemen zur Generierung von Surrogaten verwendet werden; jedoch wird im Data Vault empfohlen, als Surrogate keinen ganzzahligen Sequenzwert, sondern einen Hash aus einer Menge von Gesch\u00e4ftsschl\u00fcsseln zu verwenden. Dieser Ansatz vereinfacht das Laden von Beziehungen und Attributen aus Quellen (es ist nicht notwendig, sich mit dem Hub zu verbinden, um das Surrogat zu erhalten; es reicht aus, einfach den Hash des nat\u00fcrlichen Schl\u00fcssels zu berechnen), kann jedoch andere Probleme verursachen (wie Kollisionen, Gro\u00df-\/Kleinschreibung und nicht druckbare Zeichen in Zeichenfolgen-Schl\u00fcsseln usw.), weshalb er nicht allgemein anerkannt ist.<\/p>\n<p>Alle anderen Attribute der Entit\u00e4ten werden in speziellen Tabellen gespeichert, die <b>Satelliten (Satellit)<\/b>. Ein Hub kann mehrere Satelliten haben, die unterschiedliche Attributs\u00e4tze speichern.<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberblick \u00fcber agile DWH-Designmethodologien\" src=\"\/wp-content\/uploads\/2020\/08\/e145f211b8cfb51894e6e1789991e1cd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDie Verteilung der Attribute auf die Satelliten erfolgt nach dem Prinzip der <b>gemeinsamen \u00c4nderung<\/b> \u2014 In einem Satelliten k\u00f6nnen nicht-versionierte Attribute (zum Beispiel Geburtsdatum und SNILS f\u00fcr nat\u00fcrliche Personen) gespeichert werden, in einem anderen selten sich \u00e4ndernde versionierte (zum Beispiel Nachname und Reisepassnummer), in einem dritten h\u00e4ufig sich \u00e4ndernde (zum Beispiel Lieferadresse, Kategorie, Datum der letzten Bestellung usw.). Die Versionierung erfolgt dabei auf der Ebene der einzelnen Satelliten und nicht der Entit\u00e4t insgesamt, weshalb die Verteilung der Attribute so erfolgen sollte, dass die \u00dcberschneidung der Versionen innerhalb eines Satelliten minimal ist (was die Gesamtanzahl der gespeicherten Versionen reduziert). <\/p>\n<p>Um den Datenladeprozess zu optimieren, werden in separate Satelliten h\u00e4ufig Attribute ausgelagert, die aus verschiedenen Quellen stammen.<\/p>\n<p>Die Satelliten sind mit dem Hub verbunden \u00fcber <b>einen Fremdschl\u00fcssel<\/b> (was der Kardinalit\u00e4t 1 zu vielen entspricht). Das bedeutet, dass mehrere Werte von Attributen (zum Beispiel mehrere Telefonnummern eines Kunden) durch solch eine Architektur \u201estandardm\u00e4\u00dfig\u201c unterst\u00fctzt werden.<\/p>\n<p>In <b>Anker-Modell (Anchor Model)<\/b> Tabellen, die Schl\u00fcssel speichern, werden genannt <b>Anker (Anchor)<\/b>. Und sie speichern: <\/p>\n<ul>\n<li><b>Nur surrogate Schl\u00fcssel<\/b><\/li>\n<li>Referenz auf die Quelle<\/li>\n<li>Zeitpunkt der Hinzuf\u00fcgung des Datensatzes<\/li>\n<\/ul>\n<p>\nNat\u00fcrliche Schl\u00fcssel aus der Sicht des Anker-Modells gelten als <b>gew\u00f6hnliche Attribute<\/b>. Diese Variante mag komplexer erscheinen, bietet jedoch wesentlich mehr Spielraum zur Identifizierung des Objekts.<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberblick \u00fcber agile DWH-Designmethodologien\" src=\"\/wp-content\/uploads\/2020\/08\/0bf941581fd1177eda228d4429cf69db.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWenn beispielsweise Daten \u00fcber dieselbe Entit\u00e4t aus verschiedenen Systemen stammen, in denen jeweils ein anderer nat\u00fcrlicher Schl\u00fcssel verwendet wird. Im Data Vault kann dies zu ziemlich umfangreichen Konstruktionen aus mehreren Hubs f\u00fchren (einen pro Quelle + eine vereinigende Master-Version), w\u00e4hrend im Anker-Modell der nat\u00fcrliche Schl\u00fcssel jeder Quelle in sein eigenes Attribut gelangt und unabh\u00e4ngig von allen anderen beim Laden verwendet werden kann. <\/p>\n<p>Doch hier verbirgt sich ein t\u00fcckischer Moment: Wenn in einer Entit\u00e4t Attribute aus verschiedenen Systemen zusammengef\u00fchrt werden, gibt es wahrscheinlich bestimmte <b>Regeln zur \u201eVerklebung\u201c<\/b>, nach denen das System verstehen muss, dass Datens\u00e4tze aus unterschiedlichen Quellen zu einem einzigen Exemplar der Entit\u00e4t geh\u00f6ren. <\/p>\n<p>In <b>Data Vault<\/b> Diese Regeln werden wahrscheinlich die Bildung <b>eines \u201esurrogativen Hubs\u201c der Master-Entit\u00e4t bestimmen<\/b> und keinen Einfluss auf die Hubs aus\u00fcben, die die nativen Schl\u00fcssel der Quellen und ihre urspr\u00fcnglichen Attribute speichern. Wenn sich zu einem bestimmten Zeitpunkt die Kleberegeln \u00e4ndern (oder ein Update der Attribute kommt, nach denen es erfolgt), reicht es aus, die Surrogat-Hubs neu zu bilden.<\/p>\n<p>In <b>Anker-Modell<\/b> so wird eine solche Entit\u00e4t wahrscheinlich in <b>einem einzigen Anker<\/b>. Das bedeutet, dass alle Attribute, unabh\u00e4ngig von der Quelle, aus der sie stammen, an dasselbe Surrogat gebunden sind. Fehlerhaft zusammengef\u00fchrte Datens\u00e4tze zu trennen und die Aktualit\u00e4t der Zusammenf\u00fchrung in einem solchen System zu \u00fcberwachen, kann sich als erheblich schwieriger erweisen, insbesondere wenn die Regeln recht komplex sind und sich h\u00e4ufig \u00e4ndern, und das gleiche Attribut aus verschiedenen Quellen stammen kann (obwohl dies genau m\u00f6glich ist, da jede Version des Attributs einen Verweis auf ihre Quelle speichert).<\/p>\n<p>In jedem Fall, wenn in Ihrem System die Implementierung von Funktionen <b>Deduplizierung, Zusammenf\u00fchrung von Datens\u00e4tzen und anderen MDM-Elementen vorgesehen ist.<\/b>, es ist besonders wichtig, die Aspekte der Speicherung nat\u00fcrlicher Schl\u00fcssel in flexiblen Methodologien genau zu pr\u00fcfen. Wahrscheinlich erweist sich die umfangreichere Data Vault-Konstruktion pl\u00f6tzlich als sicherer in Bezug auf Merge-Fehler.<\/p>\n<p><b>Das Anker-Modell<\/b> sieht auch einen zus\u00e4tzlichen Objekttyp vor, der als <b>Knoten (Knot)<\/b> definiert ist, <b>es handelt sich im Wesentlichen um eine spezielle<\/b>degenerierte Variante des Ankers <b>, die nur ein Attribut enthalten kann. Knoten sollen zur Speicherung flacher Nachschlagewerke verwendet werden (z. B. Geschlecht, Familienstand, Kundenkategorie usw.). Im Gegensatz zum Anker hat der Knoten<\/b>keine verkn\u00fcpften Attribut-Tabellen<\/p>\n<p>, und sein einziges Attribut (der Name) wird immer in einer Tabelle mit dem Schl\u00fcssel gespeichert. Knoten werden mit Ankern durch Verkn\u00fcpfungstabellen (Tie) verbunden, \u00e4hnlich wie Anker untereinander. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/azathot\/\">Es gibt keine eindeutige Meinung \u00fcber die Verwendung von Knoten. Beispielsweise<\/a><\/noindex>Nikola\u00ef Golov <b>immer<\/b> , der die Anwendung des Anker-Modells in Russland aktiv f\u00f6rdert, ist der Ansicht (nicht ohne Grund), dass man f\u00fcr kein Nachschlagewerk mit Sicherheit behaupten kann, dass es<\/p>\n<p>Ein weiteres wichtiges Unterscheidungsmerkmal zwischen Data Vault und dem Anker-Modell ist das Vorhandensein <b>von Attributen bei den Verbindungen.<\/b>:<\/p>\n<p>In <b>Data Vault<\/b> Verbindungen sind ebenso eigenst\u00e4ndige Objekte wie Hubs und k\u00f6nnen <b>eigene Attribute haben.<\/b>In <b>Anker-Modell<\/b> Verbindungen werden ausschlie\u00dflich verwendet, um Anker zu verbinden und <b>k\u00f6nnen keine eigenen Attribute haben.<\/b>. Diese Unterscheidung f\u00fchrt zu grundlegend unterschiedlichen Ans\u00e4tzen in der Modellierung <b>von Fakten.<\/b>, wor\u00fcber wir im Folgenden sprechen werden.<\/p>\n<h3>Die Speicherung von Fakten.<\/h3>\n<p>\nZuvor haben wir haupts\u00e4chlich \u00fcber die Modellierung von Dimensionen gesprochen. Bei Fakten gestaltet sich die Sache etwas weniger eindeutig.<\/p>\n<p>In <b>Data Vault<\/b> typisches Objekt zur Speicherung von Fakten \u2014<b> eine Verbindung (Link),<\/b>in deren Satelliten sich die tats\u00e4chlichen Kennzahlen ansammeln.<\/p>\n<p>Dieser Ansatz erscheint intuitiv verst\u00e4ndlich. Er erm\u00f6glicht einfachen Zugriff auf die analysierten Kennzahlen und \u00e4hnelt insgesamt einer traditionellen Faktentabelle (nur dass die Kennzahlen nicht in der Tabelle selbst gespeichert werden, sondern in einer \"benachbarten\"). Aber es gibt auch Fallstricke: Eine der typischen Anpassungen des Modells \u2014 die Erweiterung des Faktenschl\u00fcssels \u2014 erfordert <b>die Hinzuf\u00fcgung eines neuen Fremdschl\u00fcssels in den Link.<\/b>. Dies \u201ebricht\u201c wiederum die Modularit\u00e4t und kann potenziell die Notwendigkeit von Anpassungen anderer Objekte zur Folge haben.<\/p>\n<p>In <b>Anker-Modell<\/b> Eine Beziehung kann keine eigenen Attribute haben, daher funktioniert dieser Ansatz nicht \u2014 alle Attribute und Kennzahlen m\u00fcssen an einen bestimmten Anker gebunden sein. Die Schlussfolgerung ist einfach \u2014 <b>f\u00fcr jede Tatsache wird auch ein eigener Anker ben\u00f6tigt.<\/b>. Bei einigen der Dinge, die wir als Fakten betrachten, mag dies nat\u00fcrlich erscheinen \u2014 zum Beispiel wird der Kauf als Objekt \u201eBestellung\u201c oder \u201eBeleg\u201c interpretiert, der Besuch einer Website \u2014 als Sitzung usw. Doch gibt es auch Fakten, f\u00fcr die es nicht so einfach ist, ein solches nat\u00fcrliches \u201eTr\u00e4gersubjekt\u201c zu finden \u2014 etwa der Warenbestand in den Lagern zu Beginn eines jeden Tages. <\/p>\n<p>Daher gibt es bei der Erweiterung des Schl\u00fcssels f\u00fcr Fakten im Anker-Modell keine Probleme mit der Modularit\u00e4t (es reicht aus, eine neue Beziehung zum entsprechenden Anker hinzuzuf\u00fcgen), aber das Design des Modells zur Darstellung von Fakten ist weniger eindeutig, und es k\u00f6nnen \u201ek\u00fcnstliche\u201c Anker entstehen, die das Gesch\u00e4ftsobjektmodell nicht offensichtlich darstellen.<\/p>\n<h3>Wie wird Flexibilit\u00e4t erreicht?<\/h3>\n<p>\nDie entstandene Struktur enth\u00e4lt in beiden F\u00e4llen <b>deutlich mehr Tabellen<\/b>, als die traditionelle Messung. Sie kann jedoch <b>deutlich weniger Speicherplatz beanspruchen<\/b> bei denselben Versionierungsattributen wie die traditionelle Messung. Nat\u00fcrlich gibt es hier keine Magie \u2013 alles h\u00e4ngt von der Normalisierung ab. Indem wir die Attribute auf Satelliten (im Data Vault) oder separate Tabellen (Anchor Model) verteilen, reduzieren wir (oder schlie\u00dfen ganz aus) <b>die Duplizierung von Werten einiger Attribute bei der \u00c4nderung anderer.<\/b>.<\/p>\n<p>F\u00fcr <b>Data Vault<\/b> Der Gewinn h\u00e4ngt von der Verteilung der Attribute auf die Satelliten ab, und f\u00fcr <b>Anker-Modell<\/b> ist er praktisch direkt proportional zur durchschnittlichen Anzahl der Versionen eines Messobjekts.<\/p>\n<p>Der Gewinn an Speicherplatz ist jedoch ein wichtiges, aber nicht das Hauptvorteil separater Attributspeicherung. Zusammen mit der separaten Speicherung von Beziehungen macht dieser Ansatz das Data Warehouse <b>modular aufgebaut.<\/b>Das bedeutet, dass die Hinzuf\u00fcgung sowohl einzelner Attribute als auch ganzer neuer Fachgebiete in ein solches Modell wie eine <b>Erweiterung<\/b> des bestehenden Satzes von Objekten aussieht, ohne deren \u00c4nderungen. Und genau das macht die beschriebenen Methoden flexibel.<\/p>\n<p>Es erinnert auch an den \u00dcbergang von Einzel- zu Massenerzeugung \u2014 w\u00e4hrend im traditionellen Ansatz jede Modelltabelle einzigartig ist und besondere Aufmerksamkeit erfordert, handelt es sich bei flexiblen Methoden bereits um eine Reihe von standardisierten \"Details\". Einerseits gibt es mehr Tabellen, die Datenlade- und -abfrageprozesse erscheinen komplexer. Andererseits werden sie <b>standardisiert<\/b>. Das bedeutet, sie k\u00f6nnen <b>automatisiert und durch Metadaten gesteuert werden<\/b>. Die Frage \u201eWie werden wir das umsetzen?\u201d \u2014 auf die vorher ein erheblicher Teil der Entwurfsarbeit entfiel \u2014 stellt sich jetzt einfach nicht mehr (genauso wenig wie die Frage nach den Auswirkungen einer Modell\u00e4nderung auf die bestehenden Prozesse). <\/p>\n<p>Das bedeutet nicht, dass Analysten in einem solchen System v\u00f6llig \u00fcberfl\u00fcssig sind \u2014 irgendjemand muss immer noch ein Set von Objekten mit Attributen bearbeiten und sich dar\u00fcber klar werden, wo und wie man all dies l\u00e4dt. Aber das Arbeitsvolumen sowie die Wahrscheinlichkeit und die Kosten eines Fehlers sinken erheblich. Sowohl in der Analysephase als auch bei der ETL-Entwicklung, die in erheblichem Ma\u00dfe auf die Bearbeitung von Metadaten reduziert werden kann. <\/p>\n<h3>Die dunkle Seite<\/h3>\n<p>\nAlles, was oben beschrieben wurde, macht beide Ans\u00e4tze wirklich flexibel, technologisch fortschrittlich und geeignet f\u00fcr iterative Verbesserungen. Nat\u00fcrlich gibt es auch \u201aden Wermutstropfen\u2018, dessen Sie sich, wie ich denke, bereits bewusst sind.<\/p>\n<p>Die Dekompensation von Daten, die der Modularit\u00e4t flexibler Architekturen zugrunde liegt, f\u00fchrt zu einer zunehmenden Anzahl von Tabellen und damit auch zu <b>overhead costs<\/b> f\u00fcr Joins w\u00e4hrend der Abfrage. Um einfach alle Attributmessungen zu erhalten, reicht in einem klassischen Lager ein einziges Select aus, w\u00e4hrend eine flexible Architektur eine ganze Reihe von Joins erfordert. W\u00e4hrend diese Joins f\u00fcr Berichte im Voraus geschrieben werden k\u00f6nnen, wird es Analysten, die es gewohnt sind, SQL von Hand zu schreiben, doppelt schwerfallen.<\/p>\n<p>Es gibt einige Faktoren, die diese Situation erleichtern:<\/p>\n<p><b>Beim Arbeiten mit gro\u00dfen Dimensionen werden fast nie alle Attribute gleichzeitig genutzt.<\/b> Das bedeutet, dass die Verbindungen weniger sein k\u00f6nnen, als es auf den ersten Blick bei dem Modell scheint. Im Data Vault kann auch die angenommene gemeinsame Nutzungsh\u00e4ufigkeit bei der Verteilung von Attributen auf Satelliten ber\u00fccksichtigt werden. Dabei dienen die Hubs oder Anker in erster Linie zur Generierung und Zuordnung von Surrogaten w\u00e4hrend des Ladevorgangs und werden selten in Abfragen verwendet (insbesondere gilt dies f\u00fcr die Anker).<\/p>\n<p><b>Alle Joins erfolgen \u00fcber Schl\u00fcssel.<\/b> Dar\u00fcber hinaus verringert eine \u201ekompaktere\u201c Methode zur Speicherung von Daten die Kosten f\u00fcr das Scannen von Tabellen, wo es notwendig ist (zum Beispiel beim Filtern nach Attributwerten). Dies kann dazu f\u00fchren, dass eine Abfrage aus einer normalisierten Datenbank mit vielen Joins sogar schneller ist als das Scannen einer einzigen gro\u00dfen Dimension mit vielen Versionen pro Zeile.<\/p>\n<p>Zum Beispiel gibt es in <noindex><a rel=\"nofollow\" href=\"http:\/\/www.anchormodeling.com\/wp-content\/uploads\/2011\/05\/Anchor-Modeling.pdf\">dieser <\/a><\/noindex> diesem Artikel einen detaillierten Leistungsvergleichstest des Anker-Modells mit einer Abfrage aus einer Tabelle.<\/p>\n<p><b>Vieles h\u00e4ngt vom Engine ab.<\/b> Viele moderne Plattformen verf\u00fcgen \u00fcber interne Mechanismen zur Optimierung von Joins. Beispielsweise sind MS SQL und Oracle in der Lage, Joins auf Tabellen zu \"\u00fcberspringen\", wenn deren Daten nirgendwo anders verwendet werden, au\u00dfer in anderen Joins, und keinen Einfluss auf die endg\u00fcltige Auswahl haben (Table\/Join Eliminierung). MPP Vertica hat sich in. <noindex><a rel=\"nofollow\" href=\"http:\/\/www.anchormodeling.com\/wp-content\/uploads\/2011\/05\/Big_Data_Normalization.pdf\">der Erfahrung von Kollegen bei Avito<\/a><\/noindex>, als hervorragende Engine f\u00fcr das Anchormodell erwiesen, wenn auch mit gewisser manueller Optimierung des Abfrageplans. Andererseits scheint es keine besonders gute Idee zu sein, das Anchormodell beispielsweise in Click House zu speichern, das eine begrenzte Unterst\u00fctzung f\u00fcr Joins hat.<\/p>\n<p>Dar\u00fcber hinaus gibt es spezielle Techniken <b>, die den Zugriff auf Daten erleichtern (sowohl aus Sicht der Abfrageleistung als auch f\u00fcr die Endbenutzer). Zum Beispiel<\/b>Point-In-Time-Tabellen <b>im Data Vault oder<\/b> spezielle Tabellenfunktionen <b>im Anchormodell.<\/b> Der Hauptgedanke der betrachteten flexiblen Architekturen liegt in der Modularit\u00e4t ihrer \"Konstruktion\".<\/p>\n<h2>Gesamt<\/h2>\n<p>\nGenau diese Eigenschaft erm\u00f6glicht es: <\/p>\n<p>Nach einer gewissen anf\u00e4nglichen Vorbereitung, die mit der Bereitstellung von Metadaten und dem Schreiben grundlegender ETL-Algorithmen verbunden ist,<\/p>\n<ul>\n<li>schnell dem Kunden das erste Ergebnis zu liefern. <b>schnell dem Kunden das erste Ergebnis liefern<\/b> in Form von ein paar Berichten, die Daten von nur wenigen Quellobjekten enthalten. Es ist nicht notwendig, das gesamte Objektmodell vollst\u00e4ndig zu durchdenken (auch nicht auf oberster Ebene).<\/li>\n<li>Das Datenmodell kann mit nur 2-3 Objekten beginnen und dennoch Nutzen bringen, und dann <b>allm\u00e4hlich anwachsen.<\/b> (in Bezug auf das Anker-Modell hat Nikolai <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/avito\/blog\/322510\/\">eine sch\u00f6ne Analogie mit dem Myzel verwendet). <\/a><\/noindex>Die meisten Erweiterungen, einschlie\u00dflich der Erweiterung des Fachbereichs und der Hinzuf\u00fcgung neuer Quellen,<\/li>\n<li>beeinflussen nicht die bestehende Funktionalit\u00e4t und gef\u00e4hrden nicht, etwas, das bereits funktioniert, zu besch\u00e4digen. <b>Durch die Zerlegung in Standardelemente erscheinen ETL-Prozesse in solchen Systemen einheitlich, ihre Erstellung kann algorithmisiert und letztendlich<\/b>.<\/li>\n<li>automatisiert werden. <b>Der Preis dieser Flexibilit\u00e4t ist<\/b>.<\/li>\n<\/ul>\n<p>\n. Das bedeutet nicht, dass es unm\u00f6glich ist, akzeptable Leistung mit solchen Modellen zu erreichen. H\u00e4ufig m\u00fcssen Sie einfach mehr Aufwand und Aufmerksamkeit auf Details verwenden, um die gew\u00fcnschten Kennzahlen zu erreichen. <b>Leistung<\/b>Entit\u00e4tstypen<\/p>\n<h2>Anwendungen<\/h2>\n<p><\/p>\n<h4>Mehr \u00fcber Data Vault: <b>Data Vault<\/b><\/h4>\n<p>\n<img decoding=\"async\" alt=\"\u00dcberblick \u00fcber agile DWH-Designmethodologien\" src=\"\/wp-content\/uploads\/2020\/08\/6bbaee505587152d7e5c11b2889bf25a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDie Website von Dan Linstedt<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/danlinstedt.com\/\">Alles \u00fcber Data Vault auf Russisch<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"http:\/\/www.dwh-club.com\/ru\/dwh-bi-articles\/vse-o-data-vault.html\">\u00dcber Data Vault auf habrahabr<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/348188\/\">Entit\u00e4tstypen<\/a><\/noindex><\/p>\n<h4>Mehr \u00fcber das Anker-Modell: <b>Anchor Model<\/b><\/h4>\n<p>\n<img decoding=\"async\" alt=\"\u00dcberblick \u00fcber agile DWH-Designmethodologien\" src=\"\/wp-content\/uploads\/2020\/08\/d518f01e6a5c241e9e73d1ea0210c557.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMehr \u00fcber das Anchor Model:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"http:\/\/www.anchormodeling.com\/\">Website der Creator des Anchor Model<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/avito\/blog\/322510\/\">Artikel \u00fcber die Implementierungserfahrungen des Anchor Model bei Avito<\/a><\/noindex><\/p>\n<p>\u00dcbersichtstabelle mit allgemeinen Merkmalen und Unterschieden der betrachteten Ans\u00e4tze:<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberblick \u00fcber agile DWH-Designmethodologien\" src=\"\/wp-content\/uploads\/2020\/08\/807717245fd874ab141031fc64e584fc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/glowbyte\/blog\/515940\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u2014 \u0434\u0435\u043b\u043e \u0434\u043e\u043b\u0433\u043e\u0435 \u0438 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e\u0435. \u041c\u043d\u043e\u0433\u043e\u0435 \u0432 \u0436\u0438\u0437\u043d\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u0440\u043e\u0434\u0443\u043c\u0430\u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0431\u0430\u0437\u044b \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u0435. \u041e\u0431\u0449\u0435\u043f\u0440\u0438\u043d\u044f\u0442\u044b\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u043c \u0431\u044b\u043b\u0438 \u0438 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u0441\u0445\u0435\u043c\u044b \u201c\u0437\u0432\u0435\u0437\u0434\u0430\u201d \u0441 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u043e\u0439. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043f\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443: \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u2014 3NF, \u0432\u0438\u0442\u0440\u0438\u043d\u044b \u2014 \u0437\u0432\u0435\u0437\u0434\u0430. \u042d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434, \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0439 \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0438 \u043f\u043e\u0434\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u043d\u044b\u0439 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":92016,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-92015","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u2014 \u0434\u0435\u043b\u043e \u0434\u043e\u043b\u0433\u043e\u0435 \u0438 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e\u0435. \u041c\u043d\u043e\u0433\u043e\u0435 \u0432 \u0436\u0438\u0437\u043d\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u0440\u043e\u0434\u0443\u043c\u0430\u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0431\u0430\u0437\u044b \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u0435. \u041e\u0431\u0449\u0435\u043f\u0440\u0438\u043d\u044f\u0442\u044b\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u043c \u0431\u044b\u043b\u0438 \u0438 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u0441\u0445\u0435\u043c\u044b \u201c\u0437\u0432\u0435\u0437\u0434\u0430\u201d \u0441 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u043e\u0439. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043f\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443: \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u2014 3NF, \u0432\u0438\u0442\u0440\u0438\u043d\u044b \u2014 \u0437\u0432\u0435\u0437\u0434\u0430. \u042d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434, \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0439 \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0438 \u043f\u043e\u0434\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u043d\u044b\u0439\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/obzor-gibkih-metodologij-proektirovaniya-dwh\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041e\u0431\u0437\u043e\u0440 \u0433\u0438\u0431\u043a\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f DWH | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u2014 \u0434\u0435\u043b\u043e \u0434\u043e\u043b\u0433\u043e\u0435 \u0438 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e\u0435. \u041c\u043d\u043e\u0433\u043e\u0435 \u0432 \u0436\u0438\u0437\u043d\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u0440\u043e\u0434\u0443\u043c\u0430\u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0431\u0430\u0437\u044b \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u0435. \u041e\u0431\u0449\u0435\u043f\u0440\u0438\u043d\u044f\u0442\u044b\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u043c \u0431\u044b\u043b\u0438 \u0438 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u0441\u0445\u0435\u043c\u044b \u201c\u0437\u0432\u0435\u0437\u0434\u0430\u201d \u0441 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u043e\u0439. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043f\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443: \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u2014 3NF, \u0432\u0438\u0442\u0440\u0438\u043d\u044b \u2014 \u0437\u0432\u0435\u0437\u0434\u0430. \u042d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434, \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0439 \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0438 \u043f\u043e\u0434\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u043d\u044b\u0439\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/obzor-gibkih-metodologij-proektirovaniya-dwh\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-08-21T17:42:13+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-21T17:42:13+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47\u00dcberblick \u00fcber flexible Designmethoden f\u00fcr DWH | ProHoster","description":"Die Entwicklung eines Speichers ist ein langwieriges und ernsthaftes Unterfangen. Vieles im Leben eines Projekts h\u00e4ngt davon ab, wie gut das objektorientierte Modell und die Datenbankstruktur von Anfang an durchdacht sind. Allgemein akzeptierte Ans\u00e4tze waren und bleiben verschiedene Varianten der Kombination von Sternschema mit der dritten Normalform. In der Regel nach dem Prinzip: Quelldaten \u2013 3NF, Dashboards \u2013 Stern. Dieser zeitgepr\u00fcfte Ansatz wird unterst\u00fctzt durch","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/obzor-gibkih-metodologij-proektirovaniya-dwh","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041e\u0431\u0437\u043e\u0440 \u0433\u0438\u0431\u043a\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f DWH | ProHoster","og:description":"\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u2014 \u0434\u0435\u043b\u043e \u0434\u043e\u043b\u0433\u043e\u0435 \u0438 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e\u0435. \u041c\u043d\u043e\u0433\u043e\u0435 \u0432 \u0436\u0438\u0437\u043d\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u0440\u043e\u0434\u0443\u043c\u0430\u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0431\u0430\u0437\u044b \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u0435. \u041e\u0431\u0449\u0435\u043f\u0440\u0438\u043d\u044f\u0442\u044b\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u043c \u0431\u044b\u043b\u0438 \u0438 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u0441\u0445\u0435\u043c\u044b \u201c\u0437\u0432\u0435\u0437\u0434\u0430\u201d \u0441 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u043e\u0439. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043f\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443: \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u2014 3NF, \u0432\u0438\u0442\u0440\u0438\u043d\u044b \u2014 \u0437\u0432\u0435\u0437\u0434\u0430. \u042d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434, \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0439 \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0438 \u043f\u043e\u0434\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u043d\u044b\u0439","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/obzor-gibkih-metodologij-proektirovaniya-dwh","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-08-21T17:42:13+00:00","article:modified_time":"2020-08-21T17:42:13+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"92015","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 12:16:44","updated":"2022-09-27 14:57:59"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/92015","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=92015"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/92015\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/92016"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=92015"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=92015"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=92015"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}