Το Object-relational mapping (ORM) είναι μία τεχνική με την οποία δίνεται η δυνατότητα να αυτοματοποιήσει κάποιος τη διαχείριση δεδομένων μεταξύ μιας σχεσιακής βάσης όπως είναι η ΜySQL ή ενός συστήματος NoSQL database κατευθείαν στη γλώσσα που έχει δημιουργηθεί το web application.
Η υλοποίηση αυτή της τεχνικής μπορεί να τη βρει κάποιος σε έτοιμες βιβλιοθήκες που υπάρχουν στο αποθετήριο λογισμικού της php το packagist, έτσι κάθε web developer μπορεί να τις χρησιμοποιήσει για να αποφύγει τη συγγραφή μεγάλων ερωτημάτων SQL καθώς να και να κάνει απευθείας ανάκτηση και ενημέρωση δεδομένων με object-oriented τρόπο.
SQL τι είναι; SQL είναι το ακρωνύμιο Structured Query Language είναι ένα είδος γλώσσας προγραμματισμού εξειδικευμένο να ανακτεί ή να ενημερώνει δεδομένα από βάσεις δεδομένων
Συγκεκριμένα αυτό που επιτυγχάνεται είναι η μετατροπή των δεδομένων μεταξύ ασύμβατων συστημάτων χρησιμοποιώντας τεχνικές OOP. Συγκεκριμένα ο κάθε πίνακα της βάσης αναπαρίσταται σαν μία κλάση με την οποία μπορούν να προκαθοριστούν ειδικές συμπεριφορές για εκείνο το πίνακα.
Τι είναι το Object-Relational Mapping
Είναι μια τεχνική με την οποία πολλά αντικείμενα που αντιστοιχούν σε γραμμές δεδομένων από διαφορετικούς πίνακες τη βάσης δεδομένων, και κάνει εύκολη της διασύνδεση και πρόσβαση αυτών μεταξύ τους
Στη συνέχεια η διασύνδεση των αντικειμένων μεταξύ τους θα μπορούσε να χαρακτηριστεί ως ένα διασυνδεμένο γράφημα από αντικείμενα όπου το αποτέλεσμα που προκύπτει είναι μια εικονική αντικειμενοστραφής βάση δεδομένων, οπότε 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
Το Data mapper
Αυτό το μοτίβο από ένα model που δημιουργείται και στη συνέχεια παραδίδεται σε μια υπηρεσία που διατηρεί το αντικείμενο για εσάς. Η υπηρεσία ονομάζεται συχνά "Repository", με το Repository Pattern.
Database Agnostic
Ένα άλλο πλεονέκτηματα από τη χρήση τέτοιου λογισμικού ότι μπορεί να κάνει τo web application database agnostic. Χρησιμοποιώντας ένα τέτοιο εργαλείο ανά πάσα στιγμή μπορούμε να αλλάξουμε αν θέλουμε πολύ εύκολα DBMS δηλαδή αντί mysql να ρυθμίσουμε και το Microsoft SQL Server χωρίς να αλλάξουμε καθόλου το κώδικα της εφαρμογής
PHP orm frameworks
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 βασικά δομικά στοιχεία δηλαδή επίπεδα
- Database adapter όπου αναλαμβάνει τη διασύνδεση σε πολλαπλά RDBMS (PostgreSQL κτλ.)
- Query Builder όπου η λειτουργία του είναι το χτίσιμο ερωτημάτων SQL
- Model Όπου απεικονίζει του πίνακες τα πεδία με αντικειμενοστραφή τρόπο