Το Object-relational mapping (ORM) είναι μία τεχνική με την οποία δίνεται η δυνατότητα να αυτοματοποίησει κάποιος τη διαχείριση δεδομένων μεταξύ μιας σχεσιακής βάσης όπως είναι η ΜySQL ή ενός συστήματος Nonrelational database κατευθείαν στη γλώσσα που έχει δημιουργηθεί το web application.

Η υλοποίηση αυτή της τεχνικής μπορεί να τη βρεί κάποιος σε έτοιμες βιβλιοθήκες που υπάρχουν στο αποθετήριο λογισμικού της php το packagist, έτσι κάθε web developer  μπορεί να τις χρησιμοποιήσει για να αποφύγει τη συγγραφή μεγάλων ερωτηματών SQL καθώς να και να κάνει απευθείας ανάκτηση και ενημερώση δεδομένων με object-oriented τρόπο.

SQL τι ειναι; SQL είναι το ακρωνύμιο Structured Query Language είναι ένα είδος γλώσσας προγραμματισμού εξειδικευμένο να ανακτεί ή να ενημερώνει δεδομένα από βάσεις δεδομένων

Συγκεκριμένα αυτό που επιτυγχάνεται είναι η μετατροπή των δεδομένων μεταξύ ασύμβατων συστημάτων χρησιμοποιώντας τεχνικές OOP. Συγκεκριμένα ο κάθε πίνακα της βάσης αναπαρίσταται σαν μία κλάση με την οποία μπορούν να προκαθοριστούν ειδικές συμπεριφορές για εκείνο το πίνακα.

Στη συνέχεια η διασύνδεση των αντικειμένων μεταξύ τους θα μπορούσε να χαρακτηριστεί ως ένα διασυνδεμένο γράφημα από αντικείμενα όπου το απότέλεσμα που προκύπτει είναι μια εικονική αντικειμενοστραφής βάση δεδομένων, οπότε ORM είναι το layer μεταξύ της βάσης και του application, δηλαδή είναι ένα από τα design pattern αυτού του λογισμικού είναι το Active Record ένα αλλο είναι το data mapper όπου διαχωρίζει τη λογική του domain από το persistent layer, αλλά ας αναλύσουμε το πρώτο.

Τι είναι το Active Record

Είναι ένα software design pattern τo οποίο απεικονίζει μια γραμμή σε έναν Πίνακα ή View στη βάση δεδομένων ως ένα στιγμιότυπο (object) δηλάδη μια κλάση αντιστοιχεί σε ένα πίνακα. Έτσι μπορούμε να έχουμε εύκολη πρόσβαση και διαχείριση των δεδομένων της βάσης ενώ ταυτόχρονα προσθέτει domain logic.

Το αρχιτεκτονικό πρότυπο active record για πρώτη φορά περιγράφεται από τον Martin Flow στο βιβλίο "Patterns of Enterprise Application Architecture" και έγινε implementation στο web framework RoR.

Έτοιμες βιβλιοθήκες λογισμικού για αυτήν την τεχνική μπορείτε προσθέσετε στο project σας, θα αναφέρουμε αναλυτικά παρακάτω. Μερικά web frameworks έχουν δημιουργήσει τα δικά τους πακέτα όπως το Laravel, ένα άλλα όπως το Symfony PHP Framework χρησιμοποιεί εξωτερικές καθιερωμένες βιβλιοθήκες εδώ χρονια όπως το Doctrine. Φυσικά μπορείτε να βρείτε αυτή την τεχνική υλοποιημένη και σε άλλες γλώσσες όπω είναι στη Java το Hibernate, Spring DAO κτλ

Ένα σημαντικό πλεονέκτημα είναι ότι χρήση τους μπορεί να μας σώσει σημαντικό χρονο κατά της διάρκεια του web development, άλλα αν η εφαρμογή  και ο αριθμός των χρηστών μεγαλώσει θα πρέπει να γίνει βελτιστοποίηση σε επίπεδο DΑΟ ή  Structure Query Language

Τι είναι το Object-Relational Mapping

Είναι μια τεχνική με την οποία πολλά αντικείμενα που αντιστοιχούν σε γραμμές δεδομένων από διαφορετικούς πίνακες τη βάσης δεδομένων, και κάνει εύκολη της διασύνδεση και προσβαση αυτών μεταξύ τους

Database Agnostic

Ένα άλλο πλεονέκτηματα από τη χρήση τέτοιου λογισμικού ότι μπορεί να κάνει τo web application database agnostic. Χρησιμοποιώντας ένα τέτοιο εργαλείο ανά πάσα στιγμή μπορούμε να αλλάξουμε αν θέλουμε πολύ εύκολα DBMS δηλαδή αντι mysql να ρυθμίσουμε και το  Microsoft SQL Server χωρίς να αλλάξουμε καθόλου το κωδικα της εφαμογής

PHP ORM

PHP Frameworks όπως είναι το CakePHP έχουν ενσωματωμένο λογισμικό ORM, ενώ το Codeigniter δεν διαθέτει εσωτερική βιβλιοθήκη λογισμικού, οπότε πρέπει να ενσωματωθεί σε αυτό χειροκίνητα ή μεσω το composer package repository ένα πακέτο ORM όπως είναι το Propel.

Επίσης λογισμικό ανοιχτού κώδικα ORM το οποίο είναι γραμμένο σε PHP μπορεί να ενσωματωθεί σε web applications οι οποίες είναι γραμμένες στην PHP με αντικειμενοστραφή τεχνική ή σε framework της PHP. Λογισμικό ORM για την PHP είναι το παρακάτω:

μπορουν να προστεθούν πολύ εύκολα μέσω του packagist αν δεν συμπεριμβάνεται στη default state του php framework. Αυτό το concept είναι διαδεμένο σε όλες τις γλώσσες προγραμματισμού που έχουν αλληλεπίδραση με DBMS systems. Επιπλέον μπορεί να χρησιμοποιηθεί σαν βάση για CRUD operations και την κατασκευή code generators. 

Python ORM

Μερικά δημοφιλή σε άλλες γλώσσες είναι

  • Entity Framework για C#
  • TypeORM για TypeScript και JavaScript
  • Hibernate για Java

Βασικά δομικά στοιχεία

Σε περίπτωση που κάποιος θέλει να φτιάξει το δικό του ORM, αυτού του είδους το λογισμικό αποτελείτε από 3 βασικά δομικά στοιχεία δηλαδή επίπεδα

  1. Database adapter όπου αναλαμβάνει τη διασύνεση σε πολλαπλά RDBMS (PostgreSQL κτλ)
  2. Query Builder όπου η λειτουργία του είναι το χτίσιμο ερωτημάτων SQL
  3. Model Όπου απεικονίζει του πίνακες τα πεδία με αντικειμενοστραφή τρόπο