Apa itu Object-Relational Mapping (ORM)?
Object-relational mapping (ORM) adalah cara untuk menyelaraskan kode pemrograman dengan struktur database. ORM menggunakan metadata sebagai deskriptor untuk membentuk lapisan penghubung antara bahasa pemrograman dengan database relasional. Jadi, ORM menghubungkan kode program berorientasi objek (OOP) dengan database, dan bikin interaksi antara bahasa OOP dan database relasional jadi lebih gampang.
Konsep ORM ini sebenarnya didasarkan pada abstraksi. Dengan adanya mekanisme ORM, kita bisa mengakses, memanipulasi, dan mengelola objek tanpa harus tahu gimana objek-objek itu nyambung ke sumber datanya. ORM bantu programmer menjaga konsistensi tampilan objek dari waktu ke waktu, meskipun sumber data, aplikasi pengguna, atau sistem penyimpanan datanya berubah-ubah.
Developer juga bisa melakukan berbagai operasi CRUD (create, read, update, delete) pada database relasional tanpa harus nulis SQL langsung. Ini ngebantu banget buat developer yang nggak terlalu paham SQL atau yang nggak pengen buang waktu buat nulis kode SQL manual. Dengan ORM, mereka nggak perlu ngerti atau nulis SQL, dan nggak perlu pakai query builder tambahan untuk bikin abstraksi SQL-nya.
Bagaimana cara kerja Object-Relational Mapping
ORM menerjemahkan informasi tentang status dan kode dari program OOP yang biasanya susah dimengerti jadi lebih terstruktur. ORM bikin peta (map) yang menjelaskan hubungan objek dengan berbagai tabel data, tanpa perlu tahu secara spesifik gimana data itu disusun. Intinya, ORM bikin model logis dari program dengan level abstraksi yang tinggi, tanpa harus jelasin detail teknis dari kode dasarnya.
Informasi ini bantu developer paham struktur database di balik layar. Saat aplikasi mengubah data objek, ORM akan secara otomatis menjalankan proses insert, update, create, atau delete di database relasional. Ini bisa terjadi karena ORM mengkonversi data antar tabel dan juga membangkitkan kode SQL yang dibutuhkan database untuk menanggapi perubahan aplikasi.
ORM mengatur detail pemetaan antara sekumpulan objek dan database relasional, repositori XML, atau sumber dan tujuan data lainnya. Di saat yang sama, ORM juga menyembunyikan kompleksitas antarmuka dari developer dan kode yang mereka buat. Dalam banyak kasus, ORM bahkan bisa mengadopsi teknologi dan kemampuan baru tanpa harus ngubah kode aplikasi yang terkait.
Kelebihan dan manfaat Object-Relational Mapping
ORM menyembunyikan dan mengenkapsulasi perubahan di sumber data. Jadi kalau nanti API atau struktur data sumbernya berubah, cukup ORM-nya aja yang perlu diperbarui—aplikasi yang pakai ORM nggak perlu diutak-atik lagi. Ini bikin proses pemeliharaan aplikasi jadi lebih mudah, mempermudah integrasi dengan class-class baru, dan memperluas aplikasi berbasis ORM tanpa repot.
Model programnya juga bisa langsung dipakai buat koneksi ke SQL tanpa harus nulis ulang kode, jadi bisa menghemat waktu buat developer. Karena ORM udah ngatur semua kebutuhan data dari aplikasi, developer nggak perlu nulis kode tingkat rendah tambahan, yang bisa ningkatin produktivitas dan mempercepat proses pengembangan.
ORM juga bikin pemeliharaan aplikasi jadi lebih gampang dan hemat biaya dalam jangka panjang karena konversi objek ke tabel (dan sebaliknya) udah otomatis. Kode yang ditulis juga lebih sedikit dibanding kalau kita nulis SQL manual atau stored procedure. Dalam banyak kasus, ORM juga bisa ningkatin desain aplikasi secara keseluruhan. Terakhir, ORM bisa ningkatin performa sistem dengan mengaktifkan mekanisme caching objek secara transparan di tingkat aplikasi.
Kekurangan dari Object-Relational Mapping
Beberapa kritikus berpendapat bahwa penggunaan ORM bisa menyebabkan penurunan kecepatan dan performa aplikasi karena adanya tambahan kode untuk proses abstraksi. Mereka beranggapan bahwa menggunakan stored procedure adalah solusi yang lebih baik untuk menghindari masalah ini. Dalam beberapa kasus, terlalu bergantung pada ORM justru bisa menghasilkan desain database yang kurang optimal dan bikin proses pemeliharaan aplikasi jadi lebih rumit.
Mapping yang salah antara tabel data dengan objek juga bisa menyebabkan masalah di aplikasi yang kadang susah dideteksi dan berdampak ke performa secara keseluruhan. Terakhir, kalau lapisan ORM-nya sendiri ditulis dengan buruk, maka akan sulit untuk melakukan perbaikan skema data maupun manajemen migrasi database.
Perbandingan ORM dengan SQL
Query native menggunakan SQL punya kelebihan dan kekurangannya sendiri. SQL memungkinkan pembuatan query yang lebih fleksibel dan mendetail dibandingkan abstraksi dari ORM. SQL juga ngasih kontrol penuh ke programmer terhadap bagaimana data diakses dan dimanipulasi. Tapi, di sisi lain, programmer juga harus bertanggung jawab atas keamanan dari kode SQL itu sendiri—dan ini nggak selalu gampang.
Kalau ada celah keamanan dalam kode SQL, aplikasi bisa rentan terhadap serangan seperti SQL injection. Risiko serangan kayak gini biasanya lebih kecil kalau pakai ORM, karena ORM udah dilengkapi fitur untuk melakukan “sanitasi” dan pengamanan otomatis terhadap input yang berisiko.
SQL query builder bisa jadi alternatif. Alat ini menambahkan lapisan abstraksi di atas SQL mentah tanpa menyembunyikan detail di baliknya, dan bantu menyederhanakan integrasi ke aplikasi. Mereka juga dilengkapi template builder, supaya developer bisa lebih paham struktur database. Tapi tetap aja, untuk bisa menggunakannya secara maksimal, developer tetap harus ngerti SQL.
Alat Object-Relational Mapping (ORM) yang Populer
ORM tool adalah perangkat lunak yang dirancang untuk bantu developer OOP supaya bisa berinteraksi dengan database relasional dengan cara yang lebih sederhana. Umumnya, ORM tool menggunakan salah satu dari dua pendekatan berikut:
- Active record pattern. Tool ini memetakan data langsung ke struktur objek dalam kode program dan mengelola data tersebut menggunakan class dan struktur di dalam kode.
- Data mapper pattern. Jenis tool ini memisahkan logika bisnis (yang ada di dalam objek) dari database yang jadi dasarnya. Ini bikin logika pemrograman bisa dipakai ulang, dan perubahan di sisi database jadi lebih gampang dilakukan.
Tool ORM yang bagus akan menghasilkan kode yang berkualitas tinggi tanpa mengorbankan performa aplikasi, mendukung proses migrasi database, serta menyediakan opsi untuk meningkatkan skema data. Tool tersebut juga membantu mempercepat proses pengembangan, mengurangi biaya pengembangan, dan meningkatkan keamanan aplikasi dengan meminimalisir risiko SQL injection dan jenis serangan lainnya.
Tersedia beragam alat ORM untuk berbagai bahasa pemrograman berorientasi objek (OOP), termasuk PHP, Java, dan Python.
Nama Tool | Bahasa OOP | Fitur utama / Keunggulan |
Laravel | PHP |
|
CakePHP | PHP |
|
RedBeanPHP | PHP |
|
Django | Python |
|
Web2py | Python |
|
SQLObject | Python |
|
SQLAlchemy | Python |
|
Hibernate | Java |
|
Apache OpenJPA | Java |
|
EclipseLink | Java |
|
JOOQ (object oriented querying) | Java |
|
Entity Framework | .NET |
|
NHibernate | .NET |
|
Dapper | .NET |
|
Base One Foundation Component Library (BFC) | .NET |
|