Tabellen und Felder dokumentieren

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Die Dokumentation von Datenbankanwendungen ist bei den meisten Entwicklern nicht besonders beliebt. Möglicherweise liegt der Grund schlicht darin, dass die Programmierarbeiten meist schon erledigt sind, wenn einem einfällt, dass der Kunde noch um eine ausführliche Dokumentation bat. Der vorliegende Beitrag soll zumindest die Dokumentation von Tabellen, Feldern und Co. so weit vereinfachen, dass Sie keinen Grund mehr haben, die Dokumentation an das äußerste Ende des Projekts zu verschieben.

Zur Dokumentation eines Datenmodells gehören eigentlich zwei Stufen:

  • Die Erfassung der Dokumentation, die mindestens die Beschreibung der Tabellen und der enthaltenen Felder enthalten sollte.
  • Die Ausgabe der Dokumentation in einem geeigneten Medium, beispielsweise als Access-Bericht, Word-Dokument oder HTML-Seite.

Beides kann in einem einzigen Schritt durchgeführt werden: Sie erstellen einfach das Zieldokument, beispielsweise mit Word, legen einige Absatzformatvorlagen fest um die Dokumentation zu strukturieren und tragen dann die Beschreibung der Tabellen und Felder ein.

Dies hat den Nachteil, dass änderungen in der zugrunde liegenden Datenbank meist nicht gleich in die Dokumentation übertragen werden – und dies später zu erledigen, dürfte zu einer unangenehmen Arbeit werden. Sie müssen dann nämlich erstmal herausfinden, an welchen Stellen die Dokumentation nun nicht mehr dem aktuellen Stand des Datenmodells entspricht.

Besser ist es, die zwei Stufen wie oben beschrieben zu realisieren. Das heißt, dass Sie die Beschreibung der Tabellen und Felder gleich in den entsprechenden, im Entwurf zur Verfügung stehenden Eigenschaften unterbringen.

Tabellen und Felder stellen jeweils eine eigene Eigenschaft namens Beschreibung zur Verfügung, die Sie an folgenden Stellen anpassen können:

  • Im Tabellenentwurf stellen Sie die Beschreibung der Tabelle im gleichnamigen Eintrag des Eigenschaftsfensters ein.
  • Ebenfalls dort legen Sie die Beschreibung der Felder an, und zwar gleich in der jeweiligen Zeile eines Feldes in der Spalte Beschreibung.
  • Zusätzlich können Sie die Beschreibung einer Tabelle im Dialog Tabelleneigenschaften eintragen, den Sie über den Kontextmenüeintrag Tabelleneigenschaften der Tabellen im Datenbankfenster (Access 2003 und älter) beziehungsweise im Navigationsbereich (Access 2007 und jünger) öffnen.

Während nur letztere Möglichkeit auf den ersten Blick die mehrzeilige Eingabe anbietet, können Sie vom Tabellenentwurf aus durch Markieren der entsprechenden Eigenschaft und anschließendes Drücken von Umschalt + F2 das Zoom-Fenster öffnen. Hier finden Sie ein wenig mehr Platz zum Eingeben auch mehrzeiliger Beschreibungstexte.

Was gehört in eine Dokumentation

Der Beschreibungstext ist am ehesten für Außenstehende interessant. Der Entwickler einer Datenbankanwendung könnte sich die Dokumentation neben den Rechner legen, um beispielsweise schnell einmal einen Tabellen- oder Feldnamen nachzuschlagen, weil er gerade mit der Nase im VBA-Editor steckt, ein SQL-Statement zusammenbaut und nicht dauernd zwischen VBA-Editor und dem Tabellenentwurf wechseln möchte. Davon abgesehen sollten wir die Dokumentation nicht nur mit Tabellen- und Feldnamen sowie deren Beschreibungstexten, sondern auch mit weiteren Informationen füttern. Für Tabellen sind folgende Einstellungen aus dem Eigenschaftsfenster interessant (s. Bild 1):

pic001.png

Bild 1: Eigenschaftsfenster einer Tabelle in der Entwurfsansicht

  • Gültigkeitsregel
  • Gültigkeitsmeldung

Die Tabellenfelder geben neben dem Feldnamen und der Beschreibung noch wesentlich mehr wichtige Eigenschaften her (s. Bild 2):

pic002.png

Bild 2: Übersicht der Felder und ihrer Eigenschaften in der Tabellenentwurfsansicht

  • Felddatentyp
  • Feldgröße
  • Eingabeformat
  • Beschriftung
  • Standardwert
  • Gültigkeitsregel
  • Gültigkeitsmeldung
  • Eingabe erforderlich
  • Leere Zeichenfolge
  • Indiziert
  • Unicode-Kompression

Für Felder, die als Nachschlagefeld definiert sind, gibt es sogar noch eine ganze Reihe weiterer Eigenschaften (s. Bild 3). Die wichtigsten finden Sie in dieser Auflistung:

pic003.png

Bild 3: Als Nachschlagefeld definierte Felder liefern noch mehr dokumentationswerte Eigenschaften.

  • Steuerelement anzeigen
  • Herkunftstyp
  • Datensatzherkunft
  • Gebundene Spalte
  • Spaltenanzahl
  • Spaltenbreiten

Indizes dokumentieren

Es gibt in Access verschiedene Index-Arten: Einfache Indizes, die lediglich die Suche nach den Werten des indizierten Feldes beschleunigen, eindeutige Indizes, die dafür sorgen, dass ein Wert nur einmal je Tabelle vorkommt, und Primärschlüssel, die als eindeutige Merkmale einer Tabelle dienen. Jede Indexart kann sich überdies auf ein oder mehrere Felder beziehen.

Beziehungen dokumentieren

Neben den Tabellen und ihren Feldern sollen auch die Beziehungen zwischen den Tabellen dokumentiert werden. Diese finden Sie in der Benutzeroberfläche von Access unter Umständen nur mit Mühe: Beziehungen werden zwar im Beziehungen-Fenster festgelegt, aber Sie können dort Tabellen ein- und ausblenden.

Und mit den Tabellen verschwinden dann auch die Beziehungspfeile, welche die Beziehung charakterisieren.

Dennoch sollen die Beziehungen in einer Dokumentation entsprechend gewürdigt werden.

Konzept für den Aufbau der Dokumentation

Bevor wir uns an die technische Umsetzung begeben, sollten wir uns ein paar Gedanken über den Aufbau der Dokumentation machen. Die oberste Einheit in der Struktur der Dokumentation ist die Datenbankanwendung. Gleich darunter folgen die Tabellen. Jede Tabelle enthält Felder, also werden diese unterhalb der Tabellen angeordnet.

Indizes beziehen sich auf ein oder mehrere Felder.Daher sollen Indizes auf der gleichen Ebene wie die Felder dargestellt werden, allerdings im Anschluss an diese.

Beziehungen betreffen zwar in der Regel jeweils immer nur ein Feld einer Tabelle, aber da Felder auch in mehrere Beziehungen verstrickt sein können, landen auch diese auf der gleichen Ebene wie die Tabellenfelder.

Die Eigenschaften von Tabellen, Feldern, Indizes und Beziehungen landen jeweils eine Ebene unterhalb des Objekts, auf das sie sich beziehen.

Der Datenbankdokumentierer

Access enthält von Haus aus bereits einen Datenbankdokumentierer. Dieser bietet zwar eine halbwegs durchdachte Benutzeroberfläche (s. Bild 4), aber die Dokumentation landet in einem Bericht, der sich nur bedingt zur Weiterverarbeitung eignet.

pic004.png

Bild 4: Access bietet ebenfalls einen Datenbank-Dokumentierer. Dieser liefert sein Ergebnis jedoch nur als Bericht.

Mit den nachfolgend vorgestellten Techniken wollen wir uns nicht auf Berichte beschränken, sondern verschiedene Ausgabemöglichkeiten erlauben.

Technische Umsetzung: Daten sammeln

Wir gehen in folgenden Schritten vor: Als Erstes schauen wir, wie wir an die benötigten Informationen gelangen (Tabellen, Felder, Indizes und Beziehungen). Anschließend entwickeln wir die Techniken zum Ausgeben dieser Daten in verschiedenen Formaten.

Entsprechend unserer Struktur geben wir dabei erst den Datenbanknamen aus und dann die Tabellen mit ihren Eigenschaften. Für jede Tabelle folgen in einer weiteren Ebene die Felder, Indizes und Beziehungen, ebenfalls mit den jeweiligen Eigenschaften.

Die folgenden Abschnitte beschreiben dabei die grundlegenden Techniken zum Ermitteln der Informationen für die Tabellendokumentation.

Tabellen ermitteln

Die Tabellen und ihre Eigenschaften erhalten wir über die TableDefs-Auflistung des Database-Objekts. Die folgenden Zeilen zeigen, wie Sie alle Tabellen einer Datenbank durchlaufen und einige ihrer Eigenschaften im Direktfenster ausgeben können:

Public Sub TabellenErmitteln()
    Dim db As DAO.Database
    Dim tdf As DAO.TableDef
    Set db = CurrentDb
    For Each tdf In db.TableDefs
         Debug.Print tdf.Name, tdf.DateCreated
    Next tdf
    Set db = Nothing
End Sub

Um Systemtabellen auszuschließen, die mit MSys… oder USys… beginnen, können Sie innerhalb der For Each-Schleife eine entsprechende Bedingung einarbeiten:

If Not (tdf.Name Like "MSys*" Or tdf.Name Like "USys*") Then
    Debug.Print tdf.Name, tdf.DateCreated
End If

Das TableDef-Objekt bietet noch weitere Eigenschaften, die wir für die Dokumentation verwenden können.

Felder und ihre Eigenschaften ermitteln

Wenn Sie einmal auf ein TableDef-Objekt zugreifen, ist der Weg zur Fields-Auflistung nicht mehr weit – und die ermöglicht den Zugriff auf alle Field-Objekte einer Tabelle, sprich: auf die Felder.

Die folgende Beispielprozedur können Sie von der obigen Prozedur zum Ausgeben aller Tabellen aus aufrufen – zum Beispiel mit der folgenden Anweisung:

Call FelderErmitteln(tdf)

Die Prozedur durchläuft alle Field-Elemente der Fields-Auflistung des als Parameter übergebenen TableDef-Objekts und gibt einige der Eigenschaften aus:

Public Sub FelderErmitteln(tdf As DAO.TableDef)
    Dim fld As DAO.Field
    For Each fld In tdf.Fields
         Debug.Print fld.Name, fld.Type, fld.Size
    Next fld
End Sub

Indizes ermitteln

Auch auf die Indizes einer Tabelle können Sie per DAO zugreifen. Dazu liefert das TableDef-Objekt eine Auflistung namens Indexes. Jeder Index kann ein oder mehrere Felder betreffen. Dementsprechend enthält das Index-Objekt wiederum eine Fields-Auflistung, über die Sie alle Felder des Indexes abfragen können. Die folgende Beispielprozedur rufen Sie wiederum für jedes TableDef-Objekt einmal auf:

Call IndizesErmitteln(tdf)

Die Prozedur durchläuft erst alle Elemente der Indexes-Auflistung und gibt einige Eigenschaften des aktuellen Indexes aus. Danach durchläuft sie alle Felder des Indexes und gibt auch diese aus:

Public Sub IndizesErmitteln(tdf As DAO.TableDef)
    Dim idx As DAO.Index
    Dim fld As DAO.Field
    For Each idx In tdf.Indexes
         Debug.Print idx.Name, idx.Primary, idx.Foreign, idx.IgnoreNulls
        For Each fld In idx.Fields
            Debug.Print " " & fld.Name
        Next fld
    Next idx
End Sub

Beziehungen ermitteln

Die Beziehungen wiederum befinden sich im Objektmodell nicht unterhalb der TableDef-Objekte, sondern auf der gleichen Ebene. Das scheint auch logisch, denn schließlich betrifft jede Beziehung zwei Tabellen und verbindet diese.

Die folgende Beispielprozedur liefert alle Beziehungen der aktuellen Datenbank. ForeignTable liefert dabei die Tabelle, die das Primärschlüsselfeld der Beziehung enthält, Table die Tabelle mit dem Fremdschlüsselfeld.

Die Fields-Auflistung liefert in der Regel nur ein Field-Objekt (außer, Sie erstellen eine Beziehung mit zwei Feldern jeder Tabelle – dies sollten Sie jedoch vermeiden).

Dieses Field-Objekt liefert über die Eigenschaft Name das Feld der Tabelle mit dem Primärschlüssel. Den Namen des Fremdschlüsselfeldes finden Sie mit der Eigenschaft ForeignName des Field-Objekts heraus.

Public Sub BeziehungenErmitteln()
    Dim db As DAO.Database
    Dim rel As DAO.Relation
    Dim fld As DAO.Field
    Set db = CurrentDb
    For Each rel In db.Relations
         Debug.Print rel.Name, rel.Table, rel.ForeignTable
        For Each fld In rel.Fields
            Debug.Print " " & fld.Name, fld.ForeignName
        Next fld
    Next rel
    Set db = Nothing
End Sub

Damit haben Sie alle Informationen zusammen, die eine Dokumentation der Tabellen erfordert – wir haben zwar nur jeweils ein paar Eigenschaften der betroffenen Objekte untersucht, aber das reicht für den Anfang. Die übrigen Elemente schauen wir uns später an.

Struktur und Inhalt der Dokumentation

Normalerweise wird eine Tabellendokumentation etwa in diesem Schema aufgebaut sein:

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar