Nein, es hat nichts mit dem Winter oder Weihnachten zu tun. Mit den Begriffen Star- und Snowflake-Schema sowie Dimension und Fakt bezeichnen wir Muster bei Datenanalysen.

Relationale Datenbanken

Nahezu alle Datenbanken sind relational aufgebaut. Relational bedeutet, dass alle Daten in Zeilen und Spalten untergebracht sind, den Tabellen (oder formal: Relationen). Tabellen untereinander können über Beziehungen verknüpft werden. So kann man in einer Auftragstabelle alle Artikeldaten hinterlegen. Damit speichern wir die Artikelbezeichnung bei jedem Auftrag, den wir für den gleichen Artikel anlegen. Einfacher ist es, in einer eigenen Tabelle die Artikel-Informationen zu hinterlegen und in der Auftragstabelle nur noch auf die Artikelnummer zu verweisen. Damit müssen alle Artikeldaten, wie Bezeichnung, Preis, Gewicht nicht jedes Mal auf den Auftrag kopiert werden.

Fremd- und Primärschlüssel

Die Artikelnummer dient als Schlüssel für die Verknüpfung. In der Tabelle der Artikelnummern muss dieser Schlüssel eindeutig sein. In der Tabelle der Aufträge natürlich nicht. Die Artikelnummer in der Artikel-Tabelle wird als Primärschlüssel bezeichnet, die Artikelnummer in der Auftragstabelle als Fremdschlüssel. Die Auftragstabelle hat auch einen Primärschlüssel – vermutlich die Auftragsnummer. Kommen keine Daten mehrfach vor, spricht man von einer normalisierten, sonst eben von einer denormalisierten Datenbank. Ein Beziehungsgeflecht einer Datenbank kann man als ER-Diagramm darstellen (Entity-Relationship-Diagram) – als Beispiel die Demo-Datenbank AdventureWorks:   ER-Diagramm AdventureWorks

Modelle bei Datenanalysen

Bei Datenanalysen wertet man über bestimmte Kriterien aus. Im obigen Beispiel werten wir über die Artikelnummer aus. Daher sprechen wir bei Datenanalysen von der Dimension Artikel. Ausgewertet wird beispielsweise die Häufigkeit, in der ein Artikel verkauft wurde. Damit ist die Auftragstabelle notwendig. Diese dient heißt dann Fakten-Tabelle. Dimensionen und Fakten sind über einen Primär- und Fremdschlüssel verbunden. Anders als bei normalisierten Datenbanken versucht man bei Auswertungen eine Fakt-Tabelle sowie mehrere Dimensions-Tabellen zu haben, die jeweils direkt mit der Fakt-Tabelle verknüpft sind. Ordnet man die Fakten-Tabelle in der Mitte, die Dimensions-Tabellen außen an, erhält man ein Sternen-Schema oder Star-Schema: Star-Schema

Die Schneeflocke

Manchmal möchte man die Dimensionen selbst auch normalisieren. Weil dort beispielsweise eine weitere Hierarchie vorliegt. Dann splitten sich die Dimensionen in weitere Dimensionstabellen auf. Dann spricht man von einem Snowflake-Schema: Snowflake-Schema Hier sogar so deutlich, dass sich die Dimension Product weiter verfeinert in eine Subkategorie und eine Kategorie.

Performance

Wir können natürlich auch mit einer einzigen flachen Tabelle arbeiten. Power Pivot muss dann in dem Moment, in dem wir beispielsweise die Artikelnummer als Dimension in eine Pivot-Tabelle einfügen, erst alle eindeutigen Werte in der Ausgangstabelle berechnen. Erst dann können wir Optimierungen über diese Dimension berechnen. Ist die Tabelle Artikel vorab als eigene Tabelle vorhanden, kann Power Pivot das früher und schneller durchführen – außerdem wird Speicherplatz gespart. Unter diesem Gesichtspunkt müsste jetzt das Snowflake-Schema noch besser sein, als das Star-Schema. Der Speicherplatz ist vermutlich geringer, die Abfragezeit dafür aber höher – weil längere Wege zwischen äußerster Dimensions- und Fakt-Tabelle in Kauf genommen werden müssen.

The Rule of Thumb

Eine flache Tabelle, in der alle Dimensions- und Faktendaten vorkommen, sollten Anwender vermeiden. Ein Snowflake-Schema ist okay, solange Sie mit der Performance auskommen. Das Star-Schema ist die beste Option – sie ist darüber hinaus die lesbarste der Varianten. Wird Ihnen das Snowflake-Schema zu langsam oder zu komplex, dann sollten Sie es denormalisieren. Das bedeutet dann, dass Sie die verknüpften Dimensions-Tabellen zusammengefassen – zu Lasten des Speicherplatz aber zu Gunsten der Performance.

Ausblick

Was machen wir, wenn eben nur eine flache Tabelle vorliegt? Dafür gibt es zwei Wege – ohne SQL zu kennen – die wir in den nächsten beiden Artikeln vorstellen möchten.