Im Hosting-Bereich hat sich MySQL als Datenbank allgemein durchgesetzt. Aber auch ein Blick auf die Alternative PostgreSQL lohnt sich. Diese Datenbank glänzt seit vielen Versionen durch sehr interessante Funktionen, die kürzlich veröffentlichte Version 9.2 bietet gänzlich neue Möglichkeiten der Programmierung. In diesem Beitrag sollen 2 Neuerungen kurz vorgestellt werden.
Der neue Datentyp RANGE DATA TYPES:
Dieser Datentyp kann einen Bereich (RANGE) von Daten abbilden, z.B. feste Zahlen (von 2 bis 7), numerische Daten (von 7.21 bis 8.56) oder Zeitwerte. Prüfen lässt sich damit zum Beispiel, ob ein Wert innerhalb eines bestimmten Bereiches liegt. Eine Indexierung wird ebenfalls unterstützt, damit die Prozesse auch bei großen Datenmengen schnell ablaufen.
Eine Anwendung für RANGE DATA TYPES könnte z.B. die Preisermittlung sein. Dabei werden abhängig von der gekauften Stückzahl (z.B. Rabatte) und vom Kaufdatum (z.B. Hochsaison) unterschiedliche Preise für ein Produkt definiert. Dies kann so erfolgen:
Nun eine Abfrage für Produkt 1/ 3 Stück/ am 5. Februar 2012:
Die Syntax der RANGE-Angaben bedarf einer kurzen Erklärung:
- [eckige Klammern] bedeuten inklusive der Werte
- (runde Klammern) bedeuten exklusive der Werte
Folglich bedeutet [1,5) alle Werte von 1 bis 5, inklusive der 1 und exklusive der 5. Damit speichert eine Spalte vier Parameter: Start und Ende des Bereiches sowie die jeweilige Grenzinformation. Der Operator @> prüft, ob der Wert in der Range liegt bzw. ob die Range diesen Wert enthält. Menge 5 würde also in [5,10) sein, nicht aber in [1,5).
Durch die neuen Möglichkeiten der RANGE-Typen ist die Abfrage deutlich einfacher als dies bisher möglich war. Durch den definierten Index erfolgt die Abfrage auch bei Millionen von Datensätzen sehr schnell.
Mit RANGE-Typen ist aber noch mehr möglich: So wie es UNIQUE-CONSTRAINTS gibt (die verhindern, dass ein und derselbe Wert mehrfach in einer Spalte vorkommt), können auf RANGE-Spalten EXCLUSION-CONSTRAINTS definiert werden. Diese erweitern die Gleichheitsbedingung eines konkreten Wertes auf Überschneidung von Wertebereichen.
Ein Beispiel: Angenommen, Sie vermieten Zimmer. Dabei soll natürlich ein und dasselbe Zimmer nicht doppelt belegt werden. Dies via Datenbank abzusichern war bis jetzt faktisch unmöglich, nun ist das sehr simpel.
Die letzte Anweisung erstellt dabei einen EXCLUSION CONSTRAINT, der prüft, dass Kombinationen von nr (verglichen mit Gleichheit =) und belegt (verglichen mit dem Überlappungsoperator für Ranges &&) nicht doppelt vorkommen.
Jetzt wird versucht, 2 Datensätze zu speichern: Dabei wird ein Zimmer mit einer Überschneidung vom 10. bis zum 20. August doppelt belegt:
Beim 2. Insert bekommen wir, da sich der Zeitraum mit dem ersten Datensatz überschneidet, diese Fehlermeldung:

Damit sagt uns die Datenbank umgehend, wenn ein Zimmer mehrfach belegt ist und wir brauchen dies nicht mehr umständlich in der Anwendung zu prüfen.
JSON
Die nächste Neuerung in 9.2 verlagert ebenfalls eine Aufgabe direkt in die Datenbank: Die Konvertierung einer Ergebnismenge in JSON. Dieser Datentyp wird oft bei der Programmierung von Webseiten verwendet. In PostgreSQL 9.2 können nun direkt JSON-Dokumente gespeichert werden.
Die Datenbank prüft dabei, ob das Dokument valide ist. Man kann das Resultat einer Abfrage aber auch als JSON ausgeben lassen und spart sich damit die Konvertierung in der Anwendung.
Für unsere am Anfang erstellte Preistabelle würde dies so aussehen:
Diese Ausgabe ist ein fertiges JSON-Dokument, welches direkt weiter verwendet werden kann.
Fazit: Wer selber mit SQL programmiert, sollte sich diese Datenbank näher anschauen. Sie bietet Lösungen, die direkt in der Datenbank und damit sehr nah an den Daten arbeiten. Das führt im Ergebnis zu vereinfachter Programmierung und besserer Performance der Anwendung.
Interesse an PostgreSQL geweckt? internet24 unterstützt und nutzt selbst seit Jahren PostgreSQL in aktueller Version. Wir beraten Sie gern.

News





