2014-02-28

Beziehungen zwischen Tabellen dokumentieren

"Herzlichen Glückwunsch - Sie haben eine Datenbank gewonnen!" Mit diesen Worten bekam ich vor einigen Jahren anlässlich der Verabschiedung eines Kollegen die Verantwortung für den Betrieb und die Weiterentwicklung einer Datenbank überreicht. Wie Sie sich vorstellen können, hatte ich daraufhin erst einmal einiges an Arbeit, um mir einen Überblick über Art und Umfang des "Geschenks" zu verschaffen.

Beziehungen automatisch dokumentieren


Insbesondere um die existierenden Abfragen gegen die nicht so gut dokumentierte Datenbank zu verstehen und weiterentwickeln zu können, brauchte ich schnell eine Zusammenstellung der Beziehungen zwischen den Tabellen:
  • von Tabelle
  • nach Tabelle
  • Namen der Primär- und Fremdschlüsselspalten
Die folgende Abfrage auf Basis der Sichten in INFORMATION_SCHEMA hat mir dabei sehr geholfen.


SELECT FKT.TABLE_NAME AS FK_Table -- Fremdschlüssel-Tabelle
,CU.COLUMN_NAME AS FK_Column -- Fremdschlüssel-Spalte
,PKT.TABLE_NAME AS PK_Table -- Primärschlüssel-Tabelle
,PKT1.COLUMN_NAME AS PK_Column -- Primärschlüssel-Spalte
,C.CONSTRAINT_NAME AS Constraint_Name -- Name des Constraints
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FKT
  ON C.CONSTRAINT_NAME = FKT.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PKT
  ON C.UNIQUE_CONSTRAINT_NAME = PKT.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU
  ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
INNER JOIN (
  SELECT TCI.TABLE_NAME
    ,CUI.COLUMN_NAME
    ,CUI.ORDINAL_POSITION
  FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS TCI
  INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CUI
    ON TCI.CONSTRAINT_NAME = CUI.CONSTRAINT_NAME
  WHERE TCI.CONSTRAINT_TYPE = 'PRIMARY KEY'
  ) PKT1
  ON PKT1.TABLE_NAME = PKT.TABLE_NAME
    AND PKT1.ORDINAL_POSITION = CU.ORDINAL_POSITION

Aus SQL-Sicht ist daran interessant, dass die Tabellen TABLE_CONSTRAINTS und KEY_COLUMN_USAGE mehrfach vorkommen, aber in unterschiedlichen Rollen. Durch Vergabe unterschiedlicher Alias-Namen für dieselbe Tabelle (FKT, PKT, TCI bzw. CU, CUI) wird das unterschieden. So, als handle es sich jedes Mal um eine andere Tabelle. Eine Technik, die Sie immer dann anwenden können, wenn dieselbe Tabelle in einer Abfrage unterschiedliche Rollen einnimmt.

2014-02-19

Entwurfsmuster für DAX Formeln

Vielen DAX Formeln, die wir in Analysen und Berichten benötigen, liegen immer wieder typische Aufgabenstellungen zugrunde. Zum Beispiel laufende Summen, Lagerbestände, Buchungen und Gegenbuchungen.
Um nicht jedes Mal das Rad neu zu erfinden, ist die Verwendung von Entwurfsmustern ("pattern") eine gute Sache. Sie helfen uns in der jeweiligen Situation schnell einen bewährten Lösungsweg zu finden. Für die noch junge Sprache DAX gab es bisher keine Sammlung solcher Entwurfsmuster. Da ist es ausgesprochen hilfreich, dass die erfahrenen Vorreiter Alberto Ferrari und Marco Russo jetzt diesen Mangel abstellen. Sie stellen unter http://www.daxpatterns.com/  genau solche Muster zur Verfügung.


http://www.daxpatterns.com/
Die Website ist ein Vorbild an Übersichtlichkeit


Die Website ist ausgesprochen übersichtlich, die Texte verständlich geschrieben und mit praxisgerechten Beispielen erklärt.

Fazit: Leider nur auf Englisch verfügbar, aber eine unschätzbare Hilfe!