Object Relational Mapping


Was ist das Problem?

Die meisten Webanwendungen speichern ihre Daten in relationalen Datenbanken und sind selbst objektorientiert programmiert. Während des Programmablaufs sind die Daten in Objekten gekapselt, diese serialisiert in der Datenbank zu hinterlegen wäre keine gute Idee, würde man doch die Vorteile einer relationalen Datenbank einbüßen. Ein Objekt hat einen Zustand, Verhalten und eine Identität. Eine relationale Datenbank kennt nur Relationen und dazugehörige Tupel. Das Problem, Objekte in einer relationalen Datenbank zu speichern, nennt sich “Object-relational impedance mismatch“.

Wie kann man das Problem lösen?

Helfen kann man sich mit einer (eineindeutigen) Abbildung zwischen Datenobjekten und Tabellen einer Datenbank. Ein Objekt wird auf eine Tabelle abgebildet und Attribute auf eine Spalte der Tabelle. Der Primärschlüssel eines Tupels stellt die Identität des Objekts dar. Vererbung und Referenzen auf andere Objekte  kann man dann über Fremdschlüssel lösen. Object relational Mapper sind Bibliotheken, die solche Abbildungen implementieren. Anstatt direkt auf die Datenbank zu zugreifen, kann man objektorientiert mit den Datenobjekten arbeiten, welche sich um die Interaktion mit der Datenbank kümmern. Allerdings muss man meistens Einbußen bei der Geschwindigkeit hinnehmen.

Object relational Mapper in PHP:

Die Anzahl von ORMs in PHP nimmt stetig zu. Fast jedes Application Framework ist mittlerweile mit einem ORM ausgestattet, sei es eine Eigenentwicklung oder ein fremdes ORM. Deshalb kann ich hier nur ein paar Beispiele nennen und keinen Anspruch auf Vollständigkeit erheben. Wenn ihr mir weitere Adressen in den Kommentaren schreibt, ergänze ich diese natürlich.

ORM Bibliotheken in PHP:

Fazit:

Schneller und performanter werden Anwendungen durch ORMs nicht, aber das Arbeiten mit einer Datenbank wird durch sie wesentlich vereinfacht.

, , , ,

  1. #1 von David am 20. Januar 2010 - 17:39

    Ich nütze Doctrine mit Symfony. ORM sind eine gute Idee!

  2. #2 von Kevin am 23. Januar 2010 - 16:09

    Ein sehr interressantes Projekt ist auch das ORM für Zend_Db_Table:
    http://code.google.com/p/zend-framework-orm/

  3. #3 von Dr. Azrael Tod am 27. Januar 2010 - 22:09

    mein Hauptproblem mit ORM ist dass die Leute aufhören zu denken und sich überhaupt nicht mehr damit beschäfftigen was die DB machen muss um bestimmte Querys abzuwickeln.

    Ergebnisse sind dann sowas oder gerne auch schlimmer.

    Vlt. bilden ja nonSQL-Datenbanken eine gute Alternative dazu, sie sollten zumindest schnell sein (da kein Query großartig geparst werden muss), sollten auch für Anfänger aus der Sichtweise von Objektorientierten Umgebungen her leichter Verständlich sein und haben auch sonst noch so einige, kleinere Vorteile.
    Eigentlich wollte ich schon lange mal ein kleineres Testprojekt auf CouchDB-Basis (wobei mich dort etwas der HTTP-Unterbau stört) oder so starten, bisher bin ich aber wie immer noch nicht dazu gekommen.

(wird nicht veröffentlicht)