Bei der Auswahl eines Datenbankschemas für ein Data Warehouse, Schneeflocke und Sternschemata neigen dazu, beliebte Entscheidungen zu sein. In diesem Vergleich werden die Eignung von Stern-gegen-Schneeflocken-Schemata in verschiedenen Szenarien und ihre Eigenschaften erläutert.
Schneeflocke-Schema | Sternschema | |
---|---|---|
Einfache Wartung / Änderung | Keine Redundanz, daher sind Schneeflockenschemas einfacher zu warten und zu ändern. | Hat redundante Daten und ist daher weniger einfach zu warten / zu ändern |
Benutzerfreundlichkeit | Komplexere Abfragen und daher weniger verständlich | Geringere Abfragekomplexität und leicht verständlich |
Abfrageleistung | Mehr Fremdschlüssel und somit längere Ausführungszeit für Abfragen (langsamer) | Weniger Fremdschlüssel und somit kürzere Ausführungszeit für Abfragen (schneller) |
Art des Datawarehouse | Gut für den Datawarehouse-Kern zur Vereinfachung komplexer Beziehungen (viele: viele) | Geeignet für Datamarts mit einfachen Beziehungen (1: 1 oder 1: viele) |
Schließt sich an | Höhere Anzahl von Joins | Weniger Joins |
Maßtabelle | Ein Schneeflockenschema kann für jede Dimension mehr als eine Dimensionstabelle enthalten. | Ein Sternschema enthält nur eine Dimensionstabelle für jede Dimension. |
Wann verwenden? | Wenn die Maßtabelle relativ groß ist, sind Schneeflocken besser, da weniger Platz benötigt wird. | Wenn die Dimensionstabelle weniger Zeilen enthält, können Sie das Sternschema auswählen. |
Normalisierung / De-Normalisierung | Dimensionstabellen liegen in normalisierter Form vor, die Faktentabelle ist jedoch in nicht normalisierter Form | Sowohl Maßtabellen als auch Faktentabellen liegen in nicht normalisierter Form vor |
Datenmodell | Bottom-Up-Ansatz | Ansatz von oben nach unten |
Betrachten Sie eine Datenbank für einen Einzelhändler mit vielen Geschäften, wobei jeder Laden viele Produkte in vielen Produktkategorien und verschiedenen Marken verkauft. Ein Data Warehouse oder Data Mart für einen solchen Einzelhändler müsste Analysten die Möglichkeit geben, Verkaufsberichte nach Geschäft, Datum (oder Monat, Quartal oder Jahr), Produktkategorie oder Marke zu gruppieren.
Wenn dieses Data Mart ein Sternschema verwendet, würde es wie folgt aussehen:
Beispiel für ein Star-SchemaDie Faktentabelle wäre eine Aufzeichnung von Verkaufstransaktionen, während Dimensionstabellen für Datum, Geschäft und Produkt vorhanden sind. Dimensionstabellen sind jeweils über ihren Primärschlüssel, der ein Fremdschlüssel für die Faktentabelle ist, mit der Faktentabelle verbunden. Anstatt das tatsächliche Transaktionsdatum in einer Zeile der Faktentabelle zu speichern, wird beispielsweise die date_id gespeichert. Diese date_id entspricht einer eindeutigen Zeile in der Dim_Date-Tabelle, und diese Zeile speichert auch andere Attribute des Datums, die zum Gruppieren in Berichten erforderlich sind. z. B. Wochentag, Monat, Vierteljahr usw. Die Daten werden zur einfacheren Berichterstellung denormalisiert.
So erhalten Sie einen Bericht über die Anzahl der nach Marke und Land verkauften Fernsehgeräte mit Hilfe von Inner Joins.
Dasselbe Szenario kann auch ein Schneeflockenschema verwenden. In diesem Fall würde es wie folgt strukturiert sein:
Schneeflockenschema - Beispiel (zum Vergrößern anklicken)Verglichen mit dem Sternschema besteht der Hauptunterschied darin, dass Daten in Dimensionstabellen stärker normalisiert werden. Anstatt beispielsweise Monat, Viertel und Wochentag in jeder Zeile der Dim_Date-Tabelle zu speichern, werden diese weiter in ihre eigenen Dimensionstabellen aufgeteilt. In ähnlicher Weise sind für die Dim_Store-Tabelle der Staat und das Land geographische Attribute, die nur einen Schritt entfernt werden. Statt in der Dim_Store-Tabelle gespeichert zu werden, werden sie jetzt in einer separaten Dim_Geography-Tabelle gespeichert.
Der gleiche Bericht - die Anzahl der verkauften Fernsehgeräte nach Ländern und Marken - ist jetzt etwas komplizierter als in einem Sternschema:
SQL-Abfrage, um die Anzahl der nach Land und Marke verkauften Produkte abzurufen, wenn die Datenbank ein Schneeflockenschema verwendet.