Die Daten fest im Griff

Aus LinuxUser 12/2001

Die Daten fest im Griff

Open-Source Datenbanksysteme

Spätestens wenn das Adressbuch voll ist und der Karteikasten überquillt, sollten Sie sich nach einem geeigneten Datenbanksystem umsehen.

Bevor Sie sich auf teure, proprietäre Lösungen stürzen, lohnt sich ein Blick auf die oft nicht weniger leistungsstarken Open-Source-Vertreter. In diesem Artikel wollen wir Ihnen die Konzepte freier Datenbanken näherbringen und den praktischen Umgang mit den passenden Hilfswerkzeugen erklären.

Der Einsatz größerer Datenbank-Management-Systeme (DBMS) setzt allerdings voraus, dass Sie eine Vorstellung davon haben, was Sie von so einem System erwarten. Typische Merkmale sind Datensicherheit, Integrität, Performance, Schnittstellen nach außen (z. B. zu Ihrer Internet-Seite oder zu einem Frontend für das eigene Photoalbum) und schließlich die Bedienerschnittstelle zum DBMS selbst. Eine häufig anzutreffende Fehleinschätzung ist, dass eine Tabellenkalkulation wie Excel oder StarCalc und ein DBMS ähnlichen Funktionsumfang bieten.

Bei der Suche nach dem passenden Programm werden Sie hauptsächlich über die Namen folgender etablierter Open-Source-Systeme stolpern: MySQL, mSQL und PostgreSQL. Sie alle haben Anhänger, die auf die eigene Lösung schwören und mit Negativ-Argumenten für die Gegenseite nicht zurückhaltend sind. Tatsächlich sind alle genannten Systeme sehr geeignet, nur ist eben jedes System auf unterschiedlichen Gebieten stärker als das andere. Informationen dazu finden Sie unter [1] und [3].

Qual der Wahl

In diesem Artikel haben wir uns dafür entschieden, PostgreSQL genauer unter die Lupe zu nehmen. Nicht, weil wir es für überlegen halten, sondern weil die grundsätzliche Funktionalität dieselbe wie etwa bei MySQL ist. Deshalb gilt: Wenn Sie sich gut in PostgreSQL auskennen, wird es Ihnen nicht schwer fallen, sich in MySQL oder Oracle einzuarbeiten.

Ursprünglich stammt PostgreSQL von der Universität Berkeley (erst Ingres genannt, später Postgres95), wird seit 1996 aber von einer Gruppe weltweit verstreuter Open-Source-Programmierer weiterentwickelt. Es ist die einzige wirklich freie Datenbank, die schon immer selbst komplizierte Verarbeitungsmechanismen wie zum Beispiel Transaktionen (siehe Kasten “Transaktionen”), unterstützt hat.

Transaktionen

Transaktionen sind ein sinnvolles DBMS-Feature, wenn es darum geht, die Integrität bei Datenbestandsveränderungen zu gewährleisten. Stellen Sie sich vor, Herr Müller möchte an Frau Huber 50000 Mark überweisen. Die Datenbank wird zunächst versuchen, den Betrag vom Kontostand des Herrn Müller zu subtrahieren. Wenn dieser Vorgang erfolgreich abgeschlossen wurde, kann die Datenbank in einem weiteren Schritt die Differenz auf den Kontostand von Frau Huber addieren. Das sind im Wesentlichen zwei getrennte Operationen.

Fällt nun nach dem ersten Schritt der Strom aus, dann ist Herr Müller ärmer, aber Frau Huber wartet noch immer auf das versprochene Geld. Mit einer Transaktion wäre das nicht passiert, denn innerhalb dieser werden beide Operationen erst dann gemeinsam ausgeführt, wenn das DBMS sicher gestellt hat, dass dies möglich ist (Herr Müller hat vielleicht nur 5 Mark auf dem Konto und darf nicht überziehen). Angefangene Teiloperationen würden bei einem Systemausfall oder anderen Problemen einfach rückgängig gemacht (Roll-Back), so dass keine Inkonsitenz entstehen kann.

Transaktionen gibt es natürlich nicht nur bei PostgreSQL; mittlerweile wird dieser Mechanismus (mit marginalen Einschränkungen) auch vom populären MySQL unterstützt.

Programm-Installation

PostgreSQL ist in vielen Linux-Distributionen enthalten. Sie können also auf den gewohnten Installer von CD-ROM zurückgreifen, falls die Pakete noch nicht auf Ihrem System eingerichtet sind. Alternativ besteht die Möglichkeit, entsprechende Dateien in diversen Paketformaten direkt von einer der deutschen Mirror-Seiten zu beziehen [2]. Die Sourcen stehen ebenfalls zur Verfügung, doch das Übersetzen von derart umfangreichen Programmen ist eher eine Angelegenheit für Tüftler und für unsere Zwecke nicht nötig.

PostgreSQL (ebenso wie MySQL oder mSQL) ist ein Server-Prozess, der ständig im Hintergrund läuft. Daher ist es aus Sicherheitsgründen wichtig, dass dieser nicht vom Administrator root gestartet wird. Legen Sie sich also nach der Installation mit

adduser postgres

einen Dummy an (falls dieser User nicht eh schon eingerichtet ist), mit dem Sie in Zukunft den PostgreSQL-Server starten werden.

Datenbank-Erstellung

Jede Datenbank benötigt entweder eine gesamte Partition der Festplatte oder zumindest einen fest definierten Bereich im File-System, in dem sie die Informationen halten kann. Es bietet sich meistens an, die Daten in /usr/local/pgsql/data abzulegen. (Alternativ ist bei manchen RPM-Paketen von PostgreSQL automatisch /var/lib/pgsql/data voreingestellt und bereits angelegt.)

mkdir /usr/local/pgsql/data
 chown postgres /usr/local/pgsql/data

Werden Sie mit su postgres zum User postgres und erstellen Sie das Grundgerüst für Ihre Datenbank:

initdb -D /usr/local/pgsql/data

Sie sind nun soweit, den Server zum ersten Mal zu starten. Bleiben Sie als User postgres angemeldet und setzen Sie das folgende Startkommando auf der Konsole ab:

postmaster -i -D /usr/local/pgsql/data &

Damit ist die Einrichtung abgeschlossen. PostgreSQL ist einsatzbereit und erwartet Ihre Kommandos und Daten.

Das berühmte Adressbuch

Um es nicht zu kompliziert zu machen, wollen wir als Beispiel-Anwendung die altbewährte und einfache Adressverwaltung heranziehen. Als User postgres legen Sie diese mit folgendem Kommando an:

createdb Adressen

Dieser Befehl definiert nur den Namen der Datenbank. Welche Informationen in einer Adressenverwaltung berücksichtigt werden sollen, müssen Sie zunächst noch bestimmen. Dazu haben wir ein selbsterklärendes Datenbankschema ausgearbeitet (siehe Abbildung 1), das sich leicht auf die CD-Kollektion oder Rezeptesammlung übertragen lässt.

Abbildung 1: Das Datenbankschema "Adressenverwaltung"

Abbildung 1: Das Datenbankschema “Adressenverwaltung”

Standardabfragesprache

Leistungsstarke Systeme wie PostgreSQL oder MySQL besitzen mächtige Eingabe- und Abfragemöglichkeiten. Als Standard hierfür hat sich SQL (siehe Kasten “SQL”) etabliert. Kennen Sie sich bereits ein wenig mit dieser Beschreibungssprache aus, können sie Gewohntes auch bei PostgreSQL anwenden. Doch selbst wenn Sie von SQL noch nichts gehört haben, müssen Sie nicht verzweifeln, denn Open-Source-Datenbanksysteme werden von diversen grafischen Frontends unterstützt, die ohne komplizierte Kommandos auskommen.

SQL

SQL, die Structured Query Language, ist eine deskriptive Sprache, das heißt mit den Befehlen werden gezielt Daten (-sätze) beschrieben, die gesucht, gelöscht oder bearbeitet werden sollen. Um beispielsweise in der Datentabelle Personen alle Leute mit Vornamen “Albert” zu finden, würde man dieses Kommando im SQL-Interpreter absetzen:

SELECT Name, Vorname, Strasse, Hausnr FROM Personen WHERE Vorname='Albert';

Statt nach SELECT die interessanten Felder mit anzugeben, kann ein einfacher ‘*’ eingesetzt werden, um alle Felder einer Tabelle zu sehen. Das Suchkriterium steht in der WHERE-Klausel. Hier sind Modifikationen und sogar Verschachtelungen erlaubt. Dazu ein weiteres kurzes Beispiel:

SELECT * FROM Personen WHERE Vorname='Albert' AND Name='Einstein';

Ausführliche Informationen zu SQL finden sich unter anderem in Befehlsübersichten im Internet ([4], [5]) sowie den Handbüchern zu PostgreSQL [1].

Allerdings soll an dieser Stelle nicht verschwiegen werden, dass diese Frontends oftmals weniger ausgereift sind, als Umsteiger es beispielsweise von Microsoft Access oder FileMaker her kennen. Auch wenn solche kommerziellen Produkte einen SQL-fähigen Kern besitzen, kapseln sie die Benutzer (noch) besser davon ab. Im Open-Source-Bereich gibt es zwar vielversprechende Ansätze, doch bleibt einem in vielen Situationen die Handarbeit im SQL-Interpreter nicht erspart.

Der anwenderfreundliche Ansatz

PostgreSQL-Anwender dürfen sich allerdings freuen: Als Ergänzung zum Server gibt es ein kleines Utility, das zu den besseren Datenbank-Frontends zählt. Haben Sie alle Pakete richtig installiert, sollte sich die Tcl/Tk-Anwendung pgaccess auf Ihrer Festplatte befinden.

Starten Sie nun unter Ihrer normalen Kennung pgaccess und öffnen Sie die frisch angelegte, noch leere Datenbank Adressen über das Menü Database/Open (User: postgres). Mit dem Knopf New aus der oberen Funktionsleiste werden neue Datentabellen angelegt.

Abbildung 2: Neue Tabellen und Felder anlegen

Abbildung 2: Neue Tabellen und Felder anlegen

Abbildung 2 zeigt eine neu angelegte Tabelle nach dem vordefinierten Schema. Die Felder mit dem vorangestellten ‘*’ sind Primärschlüssel (im Datenbankschema durch Unterstreichen kenntlich gemacht). Zusammen identifizieren sie einen Datensatz eindeutig, ähnlich einer Serien- oder Ausweisnummer. Als Datentyp dienen hier VARCHAR, eine Zeichenkette, und INT4, eine ganzzahlige Nummer. Die Option NOT NULL sorgt dafür, dass dieses Feld bei der Eingabe neuer Daten nicht versehentlich ausgelassen wird.

Verfahren Sie nun analog mit der Tabelle Orte und halten Sie sich streng an das vorgegebene Schema aus Abbildung 1. Lediglich die Verbindung zwischen den beiden Tabellen erfordert einen etwas anderen Ansatz. Sie müssen eine dritte Tabelle anlegen, etwa WohnenIn, die die Personen den Wohnorten zuordnet. Doch keine Angst, solche Verbindungen werden stets nach dem gleichen Prinzip erstellt: Man nehme die Primärschlüssel der beiden Tabellen und erzeuge daraus eine einzige neue Tabelle.

Abbildung 3: Die Relation "WohnenIn"

Abbildung 3: Die Relation “WohnenIn”

Sie haben nun eine einsatzbereite Datenbank auf Ihrem PostgreSQL-Server erstellt und können darauf arbeiten, neue Daten einfügen, suchen und alte Informationen löschen. Ein Doppelklick auf eine Tabelle öffnet sie und erlaubt die Bearbeitung. Das Schöne daran ist, dass Sie bis jetzt noch kein SQL benötigt haben und für diese Grundfunktionen auch in Zukunft darauf verzichten können. Trotzdem wollen wir Sie an dieser Stelle auch mit der SQL-Vorgehensweise vertraut machen, da diese universell und bei jeder SQL-Datenbank sehr ähnlich ist.

Kommandozeile

Direkter, allerdings weniger einsteigerfreundlich, lässt sich eine Datenbank mit SQL-Befehlen erstellen. Zu diesem Zweck gibt es in PostgreSQL einen Interpreter mit dem Namen psql. Als User postgres können Sie sich mit diesem Kommando beim Datenbank-Server anmelden:

psql Adressen

Das Resultat sieht unspektakulär aus. Doch täuschen Sie sich nicht, denn Sie sind jetzt direkt mit der Datenbank verbunden und können manuell Tabellen erstellen und bearbeiten. Um Ihnen etwas Zeit zu sparen, haben wir drei kurze, selbsterklärende Skripte vorbereitet, die Sie auch auf der beiliegenden CD finden (create_tables.sql, fill_tables.sql, delete_tables.sql). Die Skripte können über die folgenden Kommandos geladen und ausgeführt werden:

\i create_tables.sql
 \i fill_tables.sql

An dieser Stelle wollen wir nicht weiter auf den Inhalt der Skripte eingehen. Es handelt sich um einfache ASCII-Text-Dateien, die Sie mit jedem Editor betrachten können. Die enthaltenen SQL-Befehle ließen sich natürlich genauso gut von Hand eingeben, doch das kostet Zeit und Nerven, besonders wenn Sie mit der Datenbank experimentieren wollen. Sollte dabei etwas schief gehen und Sie wollen den Originalzustand wieder herstellen, dann ist das überhaupt kein Problem: Einfach das Skript delete_tables.sql ausführen und von vorne beginnen.

\i delete_tables.sql

Wie Sie sehen, ist dieser manuelle Ansatz sehr elegant und vor allem portabel. Egal, ob Sie später mit MySQL, mSQL oder Oracle arbeiten müssen, die Befehle aus den drei Skripten werden mit Sicherheit von allen Systemen richtig interpretiert. Das grafische Frontend pgaccess führt schließlich auch nur SQL-Befehle aus, die sich aus Ihren Aktionen in der Oberfläche ergeben.

Nehmen Sie sich an dieser Stelle ruhig etwas Zeit, um mit dem Interpreter zu experimentieren. Fügen Sie Daten mit dem INSERT Kommando ein, oder verwenden sie SELECT, um nach Datensätzen zu suchen. Die Links [4] und [5] sind neben den drei Skripten sicherlich gute Anlaufpunkte für die ersten Gehversuche mit dieser Beschreibungssprache. Verlassen wird psql übrigens mit “\q”.

Abbildung 4: Alle Tabellen im Überblick

Abbildung 4: Alle Tabellen im Überblick

Der praktische Einsatz

Sicherlich kommt niemand auf die bizarre Idee, über einen längeren Zeitraum Daten mittels SQL-Schnittstelle oder pgaccess zu bearbeiten. In der Regel speichert der Datenbank-Server unsere Informationen, und eine spezialisierte Software bietet das passende grafische Bedienelement. Als Anwender kommt man dabei überhaupt nicht mit dem DBMS in Berührung.

Das bedeutet, dass Sie sich überlegen müssen, wie Sie Ihre Daten nach außen hin präsentieren wollen und wer später damit arbeiten muss. Mittlerweile hat sich das

PHP-System [6] etabliert, um mit einfachen Mitteln Web-basierte Datenbankanwendungen zu erstellen. Immerhin reichen die HTML-Formulare in den meisten Fällen zur Dateneingabe und für einfache Suchfunktionen aus.

Im Gegensatz zu kommerziellen Datenbanken bieten Open-Source-Lösungen so gut wie keine Möglichkeiten, mit dem System selbst auch gleich eine passende Anwendung zu erstellen. Allerdings haben Sie bei PostgreSQL den Vorteil, dass Sie darüber entscheiden, mit was Sie Ihre Anwendung kreieren und welche zusätzlichen Systeme und Programme darauf Zugriff haben sollen, denn Open Source heißt nicht nur kostenlos, sondern eben auch “offen nach außen”. So gibt es z. B. freie Treiber für die Sprachen PHP, Java oder Tcl. Aber auch in C und C++ können Sie problemlos auf Ihre Daten zugreifen.

Natürlich gibt es ein paar fertige Beispiele, die wir Ihnen nicht vorenthalten wollen, z. B. den Gnome Photo Collector [7], eine Gnome-Applikation zur Verwaltung des Photoalbums, oder die PHP-Version PhpPgGBox [8], die einen Web-Browser zur Darstellung benötigt. Allgemeinere Frontends zur Manipulation von Daten gibt es natürlich auch. dbMetrix [9] ist eines davon und zudem sehr ähnlich zu pgaccess, hat allerdings den Vorteil, dass es viele unterschiedliche Datenbank-Server (u. a. MySQL) unterstützt.

Fazit

Der Einsatz einer echten Datenbank ist etwas gänzlich anderes als der Umgang mit einer Tabellenkalkulation oder einem elektronischen Terminplaner. Ihre Entscheidung darüber, ob Sie Ihre Daten wirklich in einem so komplexen System verwalten wollen, sollte sich danach richten, wie wichtig es Ihnen ist, die gesicherten Informationen weiterzuverarbeiten bzw. anderen System-Komponenten (Web-Seiten, Programme, Skripte, usw.) zugänglich zu machen. Datenbank-Server wie PostgreSQL bestechen zudem durch Mehrbenutzerfähigkeit, Skalierbarkeit, Robustheit und Offenheit. Doch nicht in jedem Fall werden solche Merkmale auch wirklich benötigt.

Dieser Artikel sollte hauptsächlich den Einstieg in die Thematik vereinfachen und Ihnen vor Augen führen, dass ein Open-Source DBMS durchaus in der Lage ist, auch professionellen Anforderungen gerecht zu werden. Zudem handelt es sich bei einer freien Lösung, die auf SQL basiert, um ein zukunftssicheres System. Vergleichen Sie die verschiedenen freien Datenbank-Server; eventuell lohnt sich auch der Kauf eines einführenden SQL-Buchs.

Glossar

PHP

PHP ist eine in HTML eingebettete Skript-Sprache, ähnlich zu Perl und syntaktisch etwas mit C verwandt. Damit lassen sich auf einfache Weise dynamisch generierte Seiten erstellen, in dem etwa zum Aufbau des Seiteninhalts auf eine Datenbank zurückgegriffen wird.

Der Autor

Andreas Bauer ist Informatik- und Psychologie-Student an der Technischen Universität München. Außerdem hat er an der Australian National University, Canberra, ein Web-basiertes Studenten-Datenbanksystem erstellt, das ausschließlich auf freier Software basiert. Zu erreichen ist er unter mailto:baueran@in.tum.de.

LinuxUser 12/2001 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben