Datenbank an Office
PostgreSQL als Datenbank für Star- und OpenOffice
Eine Tabelle für Adressen
Eine Tabelle besteht aus Feldern, die einen ihren späteren Inhalt beschreibenden Namen bekommen und lediglich Daten eines bestimmten Typs (z. B. Text, Fließkomma-Zahl oder Datum) aufnehmen. Damit sich ein Datenbankeintrag überhaupt eindeutig ansprechen lässt, braucht man einen Primärschlüssel: Leider kann es mehrere Müllers in einer Adressdatenbank geben, sogar mehrere Peter Müllers, so dass sich die naheliegenden Namen nicht als solcher eignen. Der Ausweg ist eine "laufende Nummer".
Daher bekommt der erste Eintrag in der Tabellenentwurfstabelle den Feldnamen Nr, für den wir den Feldtyp Integer [int4] festlegen. Damit beschränkt sich die Größe der Adressdatenbank auf eine Milliarde Einträge, wie die Länge 10 bei den Feldeigenschaften zeigt. Zum Primärschlüssel wird diese zukünftige Tabellenspalte über das Kontextmenü, das man per rechtem Mausklick auf das kleine Dreieck in der Randspalte links neben dem Feldnamen erhält – ein kleines Schlüsselsymbol markiert sie anschließend als solchen (Abbildung 7).
Zudem fügen wir weitere Felder wie Name, Vorname und Wohnort ein. Will man sicherstellen, dass ein Feld, etwa der Name, unbedingt ausgefüllt wird, wählt man bei der Feldeigenschaft Eingabe erforderlich den Wert Ja aus. Als Feldtyp bietet sich meist Text variabler Länge (Text [ varchar ]) an – sogar für Postleitzahl- und Hausnummernfelder, damit es bei britischen Postleitzahlen, die Buchstaben enthalten, und der Hausnummer 2a keine Probleme gibt.
Beim Geburtstag empfiehlt sich hingegen der Datentyp Datum [ date ]. Diesen formatieren wir noch etwas spezieller über den Knopf mit den drei Punkten neben Format-Beispiel. Da das gewünschte Datumsformat a la 01.02.2003 nicht zur Auswahl steht, tragen wir in der unteren Zeile des Dialogs unter Format-Code TT.MM.JJJJ ein und betätigen mit OK. Wichtig dabei ist, dass der Punkt Sprache auf Deutsch steht (Abbildung 7).
Ein Klick auf das Diskettensymbol speichert die neue Tabelle unter einem passenden Namen wie adressen. Im Explorer lässt sie sich nun mit Daten füllen (Abbildung 8). Mit dem Fernglas-Symbol durchsuchen Sie die im Client dargestellten Datensätze, das Trichter-Symbol führt Abfragen auf SQL-Basis aus.
Kasten 2: ODBC-Konfiguration auf Windows-SQL-Clients
Der ODBC-PostgreSQL-Zugriff von Star- und OpenOffice auf einem Windows-Client lässt sich genau wie auf den Linux-Clients einrichten. Vorher muss lediglich der PostgreSQL-ODBC-Treiber für Windows von ftp://ftp.postgresql.org/pub/odbc eingespielt werden. Die zu Redaktionsschluss aktuelle Version heißt psqsqlodbc-07_02_0001.zip. Anschließend finden Sie ein ODBC-Icon in der Systemsteuerung; ein Klick darauf ruft den ODBC Data Source Administrator auf.
Beim ersten Zugriff auf die PostgreSQL-Datenbank haben die Windows-User zunächst erstmal nur Leserechte. Um dieses Manko zu beheben, entfernen Sie im Reiter System DNS bei der ODBC-Konfiguration unter Options (Advanced) die beiden "Read Only"-Häkchen sowohl bei Driver als auch bei Data Source (Abbildung 9). (Jörn Eisenkrätzer)
Wem die Datenbankdarstellung in Tabellenform nicht gefällt, kann – sobald die Tabellenstruktur angelegt ist – über Datei / AutoPilot / Formular ... eine Datenbankmaske bauen. Der AutoPilot führt über einen Dialog mit Auswahlkriterien durch den Formular-Design-Prozess; nachträgliche Änderungen am Formular sind im Nachhinein immer möglich.
Her mit den alten Access-Daten!
Um Daten von anderen Systemen auf das neue PostgreSQL-Client-Server-System zu migrieren, muss zunächst deren Tabellenstruktur mit der exakten Spaltenanzahl und den richtigen Datentypen nachgebaut werden. Anschließend füllt man sie mit einer als CSV-Tabelle gespeicherten Datenkopie.
Die Daten einer Access-Datenbank lassen sich beispielsweise in der Tabellenansicht in die Zwischenablage kopieren, in eine leere Excel-Tabelle einfügen und im .xls-Format speichern. Diese Datei laden Sie in OpenOffice und wählen Datei / Speichern unter aus. Unter Dateityp entscheiden Sie sich für Text CSV, vergeben einen Dateinamen und drücken den Speichern-Knopf. Eine Maske (Abbildung 10) fragt nun nach dem Ziel-Zeichensatz, dem Feldtrenner und dem Texttrenner. Als Trennzeichen zwischen Feldern legen Sie zum Beispiel das Pipe-Zeichen fest. Zeichenketten sollen nicht wie vorgeschlagen in doppelte Anführungszeichen gesetzt werden, weshalb Sie ins Texttrenner-Feld ein Leerzeichen schreiben.
Diese so aufbereitete Datei kopieren Sie nun mit psql in die zuvor angelegte PostgreSQL-Tabelle:
> psql Datenbankname […]Datenbankname =# COPY Tabellenname FROM '/Pfad/Datenkopie .csv' DELIMITERS '|';
Der Pfad und der Dateiname sowie das Trennzeichen werden in einfache Hochkommas gesetzt. Geht alles glatt, quittiert PostgreSQL dies mit der Meldung COPY. Im Fehlerfall macht sich das DBMS entsprechend bemerkbar, indem es auf die Zeilennummer der Import-Datei hinweist, in der der Konflikt auftrat.
So gibt es Probleme, wenn die Länge eines Datenfelds in der neuen Tabelle kürzer definiert ist als die eines importierten Zelleninhalts oder gar die Datentypen nicht übereinstimmen. Oft enthält die neue Tabelle aus Versehen auch mehr oder weniger Spalten als die alte. Eine weitere Fehlerquelle sind leere Feldeinträge in der CSV-Datei, die in der neuen Tabelle nicht erlaubt sind, z. B. bei einer "NOT NULL"-Deklaration im Tabellenentwurf oder bei einem Datum.
Glossar
Fremdschlüssel
Eine Datenbank besteht aus Tabellen. Jede Tabelle hat einen Primärschlüssel, das ist eine Spalte oder eine Spaltenkombination, über die sich ein Datensatz eindeutig ansprechen lässt (z. B. die Kunden-, Artikel- oder Bestellnummer). Wenn der Primärschlüssel einer Tabelle gleichzeitig als Primärschlüssel einer anderen Tabelle fungiert, haben wir es mit einem Fremdschlüssel zu tun: Angenommen, ein Kunde aus der Tabelle "Kunden" bestellt einen Artikel aus der Tabelle "Artikel". Dient die Kombination der Primärschlüssel von "Kunden" und "Artikel" als Primär- (und somit Fremd-) Schlüssel für die Tabelle "Bestellung", so kann man vom Bestellungsdatensatz sowohl auf die Daten des Kunden als auch auf die Eigenschaften des Artikels zurückgreifen, ohne dass in "Bestellung" alle Kunden- und Artikeldaten mehrfach aufgeführt werden müssen.
Transaktionen
Eine Gruppe logisch zusammenhängender SQL-Anweisungen, die nur gemeinsam ausgeführt werden können. Wenn aus dieser Gruppe eine einzige Anweisung nicht korrekt abgewickelt werden kann, muss das DBMS auch alle anderen verwerfen. Ein Beispiel: Ein Mitarbeiter wechselt von einer Kostenstelle zu einer anderen. In Tabelle "Kostenstelle_A" wird er gelöscht und soll in Tabelle "Kostenstelle_B" eingefügt werden. Passiert nach dem Löschen und vor dem Wiedereinfügen eine Havarie, die zu zwei Tagen Rechnerausfall führt, bekommt der arme Mitarbeiter bei einer Datenbank, der der Transaktionsmechanismus fehlt, für zwei Tage weniger Geld, weil er keiner Kostenstelle zuzuordnen ist.
Link
Ein symbolischer Link ist eine Verknüpfung auf eine Datei, die, wenn er angesprochen wird, alle Dateibefehle an die verlinkte Zieldatei weiterleitet.
Netzwerkmaske
Gibt an, welche Stellen einer IP-Adresse das Netzwerk und welche den Rechner spezifizieren. Zu diesem Zweck rechnet man die vier Stellen der IP-Nummer und der Netzwerkmaske ins binäre Zahlensystem um: 255=2^7+2^6+2^5+2^4+2^3+2^2+2^1+2^0=11111111 (binär); 255.255.255.0 entspricht daher 11111111.11111111.11111111.00000000. Alle Stellen, an denen die binäre Netmask eine 1 zeigt, bilden in einer zum Netz gehörenden IP-Adresse die Netzwerkkennung, die mit Nullen aufgefüllten Stellen rechts daneben die Rechnerkennung. Damit ist 192.168.1. im Beispiel der Netzwerkanteil an der IP-Adresse und die Adressen 192.168.1.1 bis 192.168.1.254 können an Rechner des Netzes vergeben werden. (192.168.1.0 dient per Default als Netzwerkadresse, 192.168.1.255 als sogenannte Broadcast-Adresse; beide stehen daher nicht zum Verteilen zur Verfügung.)
192.168.x.x
Die IP-Adressen 192.168.0.0 bis 192.168.255.255 (und damit auch das Netz 192.168.1.0 mit der Netzwerkmaske 255.255.255.0) sind für private Netze reserviert, deren Datenverkehr nicht ins Internet geroutet werden darf. (Da viele LANs diese Adressen verwenden, wäre nicht mehr klar, zu welchem privaten Netz die Pakete gehören.) Sollen solche Netze Zugang zum Internet bekommen, geht das nur über IP-Masquerading.
CSV
"Comma" oder "character separated values", ein Datenformat, bei dem der Inhalt von Tabellen als ASCII-Text abgespeichert wird. Als Trennzeichen ("Delimiter") zwischen Spalteneinträgen ("Feldtrenner") dienen Kommata oder andere dedizierte Zeichen.
Infos
[1] Jens Hartwig: "PostgreSQL", Addison-Wesley, ISBN 3-8273-1860-2
[2] Marc André Selig: "Von init an", LinuxUser 12/2002, S. 26 ff.
[3] Andreas Bauer: "Daten fest im Griff", LinuxUser 12/2001, S. 68 ff., http://www.linux-user.de/ausgabe/2001/12/068-datenbank/datenbank.html



