Datenbankanwendungen über Assistenten und grafische Editoren per Mausklick erstellen – ganz ohne SQL und Programmierung: Das verspricht das LibreOffice-Programm Base nach dem Vorbild von Microsoft Access.
Mit Access schuf Microsoft ein Programm, das relationale SQL-Datenbanken (siehe Kasten “Relationale Datenbanken”) hinter einer grafischen Benutzeroberfläche verbirgt: SQL-Abfragen und Formulare für die Dateneingabe entstehen dort per Mausklick, Kenntnisse einer Programmiersprache benötigt der Anwender nicht.
Auch OpenOffice erkannte das Potenzial einer solchen Software und liefert seit Ende 2005 das Access-Pendant Base [1] mit (Abbildung 1). An die Arbeit mit grafischen Benutzeroberflächen gewöhnte Anwender “programmieren” mit dessen Hilfe Bücher- oder Videodatenbanken, kleinere Unternehmen analysieren damit ihre Finanzdaten.

Abbildung 1: Mit Abfrageeditoren und Assistenten (links und unten) löst Base typische Programmieraufgaben in einer grafischen Oberfläche.
Relationale Datenbanken
Relationale Datenbanken speichern Daten in Tabellen mit fester Spaltenzahl (“Felder”). Diese starre Struktur erlaubt einen schnellen Zugriff auf die Daten. Allerdings ergibt sich daraus die Notwendigkeit, zusammengehörige Daten auf mehrere Tabellen zu verteilen (“Normalisieren”).
Ein Beispiel: Sie möchten für Ihre Bücher nicht nur bibliografische Daten speichern, wie Autor und Titel, sondern jedes davon auch einer oder mehreren Kategorien zuordnen. Eine einfache, jedoch offensichtlich ineffiziente Lösung wäre, in der Tabelle Bücher die Spalten Kategorie**1, Kategorie**2 und so weiter zu erstellen.
Im Beispiel wäre die Anzahl der möglichen Kategorien pro Buch ohne logischen Grund auf drei begrenzt. Unpraktisch ist auch, dass beim Löschen der Kategorie 1 die Werte aus Kategorie 2 und Kategorie 3 nicht automatisch auf die nun freie höchste Ebene nachrücken.
Um diese Probleme zu lösen, teilen relationale Datenbanksysteme Daten mit starrer Feldzahl und die in wechselnder Anzahl zugeordneten Kategorien auf mehrere Tabellen auf: Die Tabelle Bücher speichert die Pflichtfelder, Kategorien dagegen alle bereits vergebenen Kategorien. Jeder Datensatz beider Tabellen enthält außerdem einen automatisch erzeugten eindeutigen Zahlencode (“Schlüssel”).
Um Bücher einer oder mehreren Kategorien zuzuordnen, fehlt nur noch eine dritte Tabelle BuchKategorien mit den Feldern BuchId und KategorieId, die ein Buch über seinen Schlüssel BuchId mit einem Kategorieschlüssel (KategorieId) korreliert. So lassen sich Verknüpfungen in beliebiger Anzahl hinzufügen und wieder löschen, ohne dass daraus Lücken in einer der Tabellen resultieren.
Datenspeicher
Den Kern der Bilddatenbank bildet die Tabelle Bilder: Sie enthält eine Spalte (“Feld”) für jede Eigenschaft eines Fotos, das Sie speichern möchten. Abbildung 2 schlägt sieben solcher Datenfelder vor.

Bilder speichert beschreibende Daten zu Bildern auf der Festplatte und bildet das Kernstück der Beispieldatenbank.” width=”300″ height=”226″ />
Abbildung 2: Die TabelleBilder speichert beschreibende Daten zu Bildern auf der Festplatte und bildet das Kernstück der Beispieldatenbank.Zum Erstellen der Tabelle wählen Sie in der linken Spalte im Base-Hauptfenster Tabellen und klicken unter Aufgaben auf Tabelle in der Entwurfsansicht erstellen. Beim ersten Feld id handelt es sich nicht um ein Datenfeld im eigentlichen Sinn: Es erscheint nicht im Eingabeformular und bleibt dem Anwender der Datenbank damit verborgen. Sie brauchen es jedoch, um Bilder und Kategorien in Relation zu setzen (siehe Kasten “Relationale Datenbanken”). In Base funktioniert zudem die Eingabe neuer Datensätze in Formularen ohne einen solchen Schlüssel nicht.
Als Feldtyp für die Schlüsselspalte wählen Sie Integer [ INTEGER ]. Setzen Sie außerdem in den Feldeigenschaften die Einstellung Auto-Wert auf Ja. Damit weist die Datenbank neuen Datensätzen automatisch einen bisher noch nicht verwendeten Wert zu. Das kleine Schlüsselsymbol in der Randspalte kennzeichnet das Feld als sogenannten Primärschlüssel. Mit einem Rechtsklick auf den Feldrand und der Anwahl von Primärschlüssel aus dem Kontextmenü erheben Sie das gewählte Feld zu einem solchen. Das signalisiert der Datenbank: Erzeuge einen Index für einen schnellen Zugriff und verbiete das mehrfache Verwenden des gleichen Wertes.
Außer dem Feldtyp Integer kommen in der Tabelle noch die Typen Text und Datum/Zeit vor. Text-Feldern weisen die Feldeigenschaften eine feste Länge zu, gemäß der die Datenbank pro Datensatz Speicherplatz zuordnet. Für Titel, Autor und Dateipfad genügt die Voreinstellung 100, für Notizen wählen Sie sicherheitshalber zwischen 500 und 1000 als Maximalgröße.
Der Datentyp Datum/Zeit bündelt ein Datum und eine Uhrzeit. Weitere oft gebrauchte Typen sind Dezimal (Fixkommazahlen, zum Beispiel für Währungsdaten) und Float (Fließkommazahlen, zum Beispiel für physikalische Größen). Es gibt auch Feldtypen für getrenntes Ablegen von Zeit und Datum. Haben Sie alle Feldnamen und Feldtypen wie in Abbildung 2 (oder Ihren eigenen Vorstellungen entsprechend) eingetragen, dann speichern Sie die Tabelle unter dem Namen Bilder.
Formulare
Ein Doppelklick auf Bilder im Hauptfenster von Base öffnet die Tabelle in einer von Tabellenkalkulationen bekannten Ansicht – ein Eingabeformular (Abbildung 3) sorgt allerdings für mehr Komfort. Der Formularassistent, den Sie mit Formular unter Verwendung des Assistenten erstellen… starten, erzeugt in wenigen Mausklicks eine Eingabemaske für die Tabelle Bilder.

Bilder erzeugt der Base-Assistent weitgehend automatisch.” width=”300″ height=”130″ />
Abbildung 3: Eine Eingabemaske für die TabelleBilder erzeugt der Base-Assistent weitgehend automatisch.Wählen Sie unter Tabellen und Abfragen im ersten Schritt des Assistenten Tabelle: Bilder und alle Verfügbaren Felder bis auf die automatisch erzeugte id (Abbildung 4). Nun überspringen Sie die Schritte zwei bis vier (Erstellen von Unterformularen) und wählen in Schritt fünf für das Ergebnis aus Abbildung 5 unter Anordnung der Datenbankfelder des übergeordneten Formulars die rechte Option In Blöcken — Beschriftung oben.

Abbildung 4: Im Formularassistenten brauchen Sie nur die Felder und die Formatierung zu wählen, in der der Assistent die Felder im automatisch erzeugten Formular anordnet.
Nach Beenden des Assistenten bleibt das Formular in der Bearbeitungsansicht geöffnet. Um den Bearbeitungsmodus der Eingabemaske zu erreichen, wechseln Sie ins Hauptfenster von Base. Darin aktivieren Sie in der linken Spalte Formulare und rechtsklicken im Abschnitt Formulare auf den eben erzeugten Eintrag Bilder. Wählen Sie dann aus dem Kontextmenü bearbeiten.
Abbildung 3 zeigt eine durch Verschieben und Skalieren einiger Felder optimierte Version der Eingabemaske. Das Feld Dateipfad wurde per Rechtsklick und Auswahl der Option Ersetzen durch | Grafisches Steuerelement in ein Feld umgewandelt, das per Doppelklick einen Dateimanager öffnet. Dort wählen Sie das Bild aus, das Sie darin platzieren möchten. Die Größe der so entstandenen Bildvorschau verändern Sie nach Ihrem eigenen Geschmack. Das Tabellenfeld speichert allerdings nur den Pfad zur Bilddatei, dessen relative Lage zur Datenbankdatei dürfen Sie entsprechend später nicht mehr verändern.
Vor dem Skalieren der Felder Dateipfad und Notizen lösen Sie die Gruppierung mit einem Rechtsklick auf die entsprechenden Felder und der Anwahl von Gruppierung | Gruppierung aufheben. Nach einem Doppelklick auf das Label Dateipfad ändern Sie den Titel von Dateipfad in Bild.
Um das vergrößerte Notizen-Feld richtig zu nutzen, doppelklicken Sie auf das Eingabefeld, worauf die Maske Eigenschaften erscheint. Ändern Sie darin den Text-Typ auf mehrzeilig und wählen Sie zwei Zeilen darüber für die Bildlaufleiste die Option senkrecht. Für die beiden Datumsfelder aktivieren Sie in der Eigenschaftspalette die Option aufklappbar für einen praktischen Datumswähler.
Um bei der Dateneingabe unabhängig von eventuell ausgeblendeten Symbolleisten im Programmfenster durch die Datensätze zu navigieren, fügen Sie eine Navigationsleiste ein. Das zugehörige Werkzeug finden Sie in der linken Symbolleiste unter Weitere Steuerelemente (rechts, in Abbildung 3 rot hervorgehoben). Sie blenden diese mithilfe des ebenfalls hervorgehobenen Buttons auf der Hauptsymbolleiste links ein. Ziehen Sie nach dem Aktivieren des Steuerelementwerkzeugs mit der Maus die Navigationsleiste auf eine passende Größe.
Nach dem Speichern des Formulars schließen Sie es. Dann öffnen Sie es per Doppelklick im Hauptfenster wieder, diesmal jedoch im Eingabemodus, statt wie bisher im Entwurfsmodus. Wie Sie sehen, hat das weitgehend automatisch erzeugte Eingabeformular die Tabelle Bilder bereits zu einer einfachen, aber voll funktionsfähigen Bilddatenbank ausgebaut.
Flexibel angebunden
Wie im Kasten “Relationale Datenbanken” angedeutet, benötigen Sie für das Zuordnen einer beliebigen Zahl an Kategorien zu einem Bilddatensatz zwei neue Tabellen: Kategorien enthält ein Textfeld Kategorie für den Kategorienamen und – wie schon die Bilder-Tabelle – eine id-Spalte mit einem Auto-Wert-Schlüssel vom Typ Integer, den Sie als Primärschlüssel kennzeichnen.
Speichern Sie diese Tabelle unter dem Namen Kategorien und schließen Sie sie. Öffnen Sie sie danach in der Dateneingabe-Ansicht. Geben Sie die Kategorien ein, in die Sie Ihre Bildsammlung einteilen möchten (an dieser Stelle sparen wir uns ein gesondertes Eingabeformular).
Die eigentliche Verknüpfung leistet die Brückentabelle (“pivot table”) BilderKategorien mit ihren Feldern BildId und KategorieId, die pro Tabellenzeile einen Datensatz aus Bilder mit einem aus Kategorien über ihre id verknüpft. Um diese Tabelle zu erstellen, brauchen Sie im Werkzeug Tabelle in der Entwurfsansicht erstellen nur die zwei genannten Feldnamen einzutippen und als Feldtyp Integer auszuwählen. Beantworten Sie die Frage, ob Base beim Schließen der Entwurfsansicht für die Tabelle BilderKategorien den noch fehlenden Primärschlüssel automatisch erzeugen soll, mit Ja.
Es wäre sehr unhandlich, die verknüpfenden ids manuell in die Tabelle BilderKategorien einzutragen. Dazu integrieren Sie, wie im nächsten Abschnitt beschrieben, in das Bild-Formular die in Abbildung 6 rot hervorgehobene Tabelle Kategorien.
Diese in ein Unterformular eingebettete Kategorien-Tabelle zeigt alle dem aktuellen Datensatz in BilderKategorien verknüpften Kategorien – plus eine leere Zeile, in der Sie per Auswahl aus einem Dropdown-Menü eine neue Zuordnung einfügen. Bestehende Zuordnungen verändern Sie auf die gleiche Weise.
Unter und Ober
Base ordnet jedem Formular eine Tabelle oder Abfrage als Datenquelle zu. Sie wählen diese nach einem Klick auf den vierten Button von oben (Formular) in der linken Schalterleiste der Formularbearbeitungsansicht im Reiter Daten (Abbildung 7). Für das Formular Bilder erzeugte der Assistent bereits die richtige Zuordnung.

Abbildung 7: Jedes Formular ist an eine Datenquelle (Abfrage oder Tabelle) gebunden. Mithilfe von eingebetteten Unterformularen greift eine Eingabemaske trotzdem auf mehrere Tabellen zu.
Um Daten aus der Tabelle Kategorien in das Eingabeformular einzubinden, benötigen Sie ein sogenanntes Unterformular mit einer vom Hauptformular unabhängigen Datenquellenbindung. Um es zu erstellen, öffnen Sie den Formularnavigator mit dem in Abbildung 8 markierten Schalter in der unteren Leiste der Formularbearbeitungsansicht.

Abbildung 8: Der Formularnavigator zeigt eine Übersicht der Steuerelemente in der Eingabemaske. Per Rechtsklick verändern Sie deren Einstellungen oder fügen Unterformulare ein.
Im Formularnavigator wählen Sie nach einem Rechtsklick auf das vom Assistenten generierte MainForm die Option Neu | Formular und tippen als Name für das Unterformular Kategorien ein. Ein Rechtsklick auf das neue Unterformular öffnet dessen Eigenschaften-Palette, in der Sie im Reiter Daten für Art des InhaltsTabelle und für Inhalt die Brückentabelle BilderKategorien auswählen.
Dank dieser Einstellung greifen nun alle Datenfelder innerhalb des Unterformulars auf die Tabelle BilderKategorien zu, bisher jedoch auf die gesamte Tabelle. Uns interessieren aber nur die Kategorien-Verknüpfungen für den im Hauptformular geöffneten Datensatz. Daher gilt es, in den Daten-Eigenschaften des Unterformulars die Felder Verknüpfen von und Verknüpfen nach auszufüllen.
Ein Klick auf das Ellipsen-Symbol (…) hinter Verknüpfen von öffnet den Dialog Felder Verknüpfen, in dem Sie die extra für die Zuordnung angelegten Felder der Tabellen BilderKategorien und Bilder auswählen, also BilderId und id. Das beschränkt das Unterformular auf die Zeilen aus BilderKategorien, deren BilderId mit der id des geöffneten Datensatzes im Hauptformular übereinstimmt.
Zeilenweise
Anders als im Hauptformular, das nur jeweils einen Datensatz anzeigt, sollen im Kategorien-Unterformular alle verknüpften Kategorien gleichzeitig erscheinen. Statt einfacher Textfelder brauchen Sie dazu ein mehrzeiliges Tabellen-Steuerelement (Abbildung 9), das Sie mithilfe der bereits erwähnten Symbolleiste Weitere Steuerelemente in das bisher noch leere Unterformular einfügen. Achten Sie darauf, dass im bereits erwähnten Formularnavigator das Unterformular Kategorien aktiv ist, denn nur dann landen neue Steuerelemente im Unterformular und haben Zugriff auf dessen Datenquelle.

Abbildung 9: Ein Tabellen-Steuerelement zeigt alle Datensätze eines (Unter-)Formulars als Tabellenzeilen an. Wie gewöhnliche Formulare kennt es unterschiedliche Feldtypen, wie das im Beispiel genutzte Listenfeld.
Schaffen Sie vorher durch Verkleinern des Felds Notizen etwas Platz. Ziehen Sie dann mit dem Tabellen-Steuerelement-Werkzeug die Kategorien-Tabelle auf, wie in Abbildung 6 zu sehen. Den sich nach dem Aufziehen startenden Assistenten brechen Sie ab. Öffnen Sie die Eigenschaftspalette mit einem Rechtsklick auf das Tabellen-Steuerelement und die Option Kontrollfeld, und setzen Sie die Einstellungen Symbolleiste Navigation und Datensatzmarkierer auf nein. Das in der Abbildung gezeigte Tabellensteuerelement ist nun vorhanden, enthält aber noch keine Datenfelder.
Fügen Sie nun mit einem Rechtsklick auf den Tabellenkopf ein Listenfeld ein, das Sie mit einem weiteren Rechtsklick auf die nun entstandene Spalte Listenfeld**1 und Auswahl des Menüpunkts Spalte weiter anpassen: Verändern Sie im Reiter Allgemein den Titel zu Kategorien. Im Reiter Daten koppeln Sie das Datenfeld an die Spalte aus BilderKategorien, die die verknüpfte Kategorie speichert, also KategorieId.
Im Listenfeld soll jedoch nicht der numerische Kategorieschlüssel KategorieId erscheinen. Statt Schlüsselnummern wie 1,2 oder 3 erwarten wir eine Auswahl zwischen Kategorien wie Porträt, Landschaft oder Stillleben. Diese Kategoriennamen stehen allerdings nicht in der an das Unterformular gebundenen Tabelle BilderKategorien, sondern in Kategorien.
Deswegen erzeugt der Feldtyp Listenfeld die sichtbaren Listeneinträge aus einer externen Datenquelle. Die weicht vom Datenfeld ab, in der das Listenfeld seine Daten ablegt, und sollte pro Listeneintrag mindestens zwei Felder enthalten (vergleiche Abbildung 10, Listenfeld Kategorien).
Das erste Feld der Datenquelle erscheint sichtbar in der Liste. Ein anderes gebundenes Feld liefert den Wert, der nach Auswahl einer Option in der Tabelle BilderKategorien landet. Die Einstellung gebundenes Feld entscheidet darüber, um welches davon es sich handelt; die Spaltenzählung beginnt mit null.
Wer nicht fragt, bleibt dumm
Lautete die Reihenfolge der Felder in der Kategorien-Tabelle Kategorie, id, dann könnten Sie die Tabelle direkt als Listeninhalt nutzen. Laut Konvention bildet aber die id das erste Feld. Deswegen benötigen Sie an dieser Stelle eine simple Abfrage, um die Reihenfolge der Felder umzudrehen. Als Bonus sortiert die Abfrage die Kategorienamen alphabetisch.

id in Bild zu BildId in Kategorien alle dem Datensatz zugeordneten Kategorien ein. Ein Listenfeld nimmt intern eine weitere Verknüpfung vor: Es zeigt den zur KategorieId passenden Kategorienamen an.” width=”300″ height=”114″ />
id in Bild zu BildId in Kategorien alle dem Datensatz zugeordneten Kategorien ein. Ein Listenfeld nimmt intern eine weitere Verknüpfung vor: Es zeigt den zur KategorieId passenden Kategorienamen an.Klicken Sie im Base-Hauptfenster in der linken Spalte auf Abfragen und wählen Sie Abfrage in der Entwurfsansicht erstellen…. Auf die Frage nach hinzuzufügenden Tabellen wählen Sie Kategorien, Hinzufügen und dann Schließen. Dann brauchen Sie nur noch die Felder Kategorie und id aus der als Kasten dargestellten Tabelle auf zwei leere Tabellenspalten in der unteren Hälfte des Query Designers zu ziehen. Für die Spalte Kategorie wählen Sie unter Sortierung den Wert aufsteigend und speichern die Abfrage unter dem Namen Kategorienliste.
Nun wählen Sie in den Eigenschaften der eben erstellten Listenfeld-Spalte Abfrage als Art der Abfrage und die Abfrage Kategorienliste als Inhalt. Gebundenes Feld erhält den Wert 1, was bei nullbasierter Zählung der zweiten Spalte der Abfrage entspricht, also der id der Tabelle Kategorien.
Die Abfrage Kategorienliste können Sie sich als virtuelle Tabelle vorstellen, die den Inhalt der Tabelle Kategorien in Echtzeit neu zusammenstellt. Selten fallen Abfragen so schlicht aus; meist kombinieren Sie Felder mehrerer Tabellen oder filtern bestimmte Datensätze anhand der im Abfrageneditor in der Zeile Kriterium eingetragenen Bedingungen. Eine solche Abfrage erklärt der zweite Teil des Workshops in der nächsten Ausgabe, in dem es um das Programmieren einer Suchfunktion geht.
Fazit …
Rekapitulieren wir noch einmal die Funktion des Kategoriesystems anhand von Abbildung 10: Im Hauptformular ist ein Datensatz aus Bilder offen. Passend zu dessen id wählt das Unterformular Datensätze aus der Pivot-Tabelle BilderKategorien gemäß der Verknüpfung Bilder.id = BilderKategorien.BildId.
Das Tabellensteuerelement enthält pro Unterformular-Datensatz eine Listenfeld-Zeile, das den zur KategorieId passenden Kategorienamen aus BilderKategorien anzeigt oder die neue KategorieId in BilderKategorien ablegt.
… und Ausblick
In diesem Teil des Workshops hat Ihnen der Formularassistent viel Arbeit abgenommen hat. In der zweiten Folge wird sich aber zeigen, dass sich in Base (wie auch in Microsoft Access) nicht alle Aufgabenstellungen ohne Kenntnisse der datenbankspezifischen Programmiersprache SQL lösen lassen.
Weitere Anstöße und praktische Beispiele liefert das als PDF und ODF-Datei im Internet verfügbare offizielle Base-Handbuch [2], das weit über die mitgelieferte Onlinehilfe hinausgeht. Sie finden es auch auf der Heft-DVD zu dieser Ausgabe.
Infos
[1] LibreOffice Base: http://de.libreoffice.org/product/libreoffice-base/
[2] Deutsche LibreOffice-Handbücher: http://de.libreoffice.org/hilfe-kontakt/handbuecher/







