Technik

Das "E-Mail-Verzeichnis Museen" ist als objekt-relationale Datenbank realisiert.
Die Datenbank läuft auf einem Server mit Debian GNU/Linux (anfangs noch
auf einer Sun Sparc-Workstation unter Solaris).
Der Server wird gehostet von WiNShuttle bzw. vom DFN-Verein.
Für die Datenbank wird ausschließlich freie Software eingesetzt. Als Datenbank-Server
läuft PostgreSQL, für die Anbindung der
Datenbankanfragen an die CGI-Schnittstelle, die Formatierung der Ausgaben sowie alle administrativen Aufgaben
werden Perl-Scripte benutzt. Diese werden inzwischen nach und nach durch
PHP-Scripte ersetzt, der Datenbankzugriff erfolgt hier sehr bequem
über den O/R Mapper DB_DataObject.
Die objekt-relationale Struktur der Datenbank macht es prinzipiell möglich, alle Informationen
in einer Tabelle zu speichern, da auch nicht-atomare Werte (die Kategorien) zugelassen
sind. Der sonst bei relationalen Datenbank nötige Aufwand (Join über rechenaufwendige Kreuzprodukte,
Gruppierung und Zusammenführung der Kategorien zur zugehörigen Adresse) entfällt damit -
was die Arbeit (im Prinzip) sehr erleichtern könnte.
Leider lässt aber auch PostgreSQL als freies Datenbankmanagementsystem noch ein paar
Wünsche offen: Die nicht-atomaren Werte werden als 'Array' ('geordnete Menge') und nicht
als 'Set' ('echte, ungeordnete Menge') abgelegt. Deshalb müsste bei einer Suche nach einer bestimmten
Kategorie jede Position des Arrays einzeln abgefragt werden. Über eine entsprechende
Funktion ('UDF') lässt sich das leider nicht lösen, weil Funktionen unter PostgreSQL nur
einzelne Werte und keine Mengen (bzw. einspaltige Tabellen) zurückliefern können.
Über eine Erweiterung ließen sich auch
die Array-Elemente durchsuchen (SELECT ... FROM adresse WHERE kategorie *= '...'),
aber dies ist sehr langsam und ineffizient.
Deshalb wird hier doch der Umweg über eine zweite Tabelle gewählt, in der Kategorien mit zugehörigem
Primärschlüssel einer Adresse gespeichert sind. Über eine verschachtelt Anfrage
(SELECT ... FROM adresse WHERE id IN (SELECT id FROM kategorie WHERE kategorie = '...')
ließe sich nun zwar nach Kategorien suchen - aber ebenfalls sehr langsam und um
den Nachteil der redundanten Speicherung von Daten.
Für die Suche nach Kategorien wird daher nun doch ein "klassischer" Join
über die Datentabelle und die "Hilfs-Tabelle" mit den Kategorien durchgeführt.
Das ist (leider) nach wie vor die schnellste Möglichkeit. Aber irgendwann wird PostgreSQL
hoffentlich auch einen echten Mengenkonstruktor ('Set') einschließlich
effizienter Indexierung der Elemente zur Verfügung stellen! :-)
Eine einfache Statistik über
Einträge und Anfragen
steht zur Verfügung.
Sollten Sie sich aus irgendwelchen Gründen genauer für die technische Umsetzung
interessieren, fragen Sie einfach per Mail!
[nach oben]

|