Penjelasan tentang ORM (Object-Relational Mapping)
ORM adalah sebuah teknik dalam pemrograman yang digunakan untuk menjembatani antara objek dalam bahasa pemrograman dan tabel dalam database relasional. Hal ini berfungsi untuk memudahkan developer untuk mengirimkan object ke database tanpa harus menulis SQL secara langsung.
ORM memudahkan developer untuk bekerja dengan database tanpa harus menulis SQL secara langsung. Sebaliknya, mereka bisa berinteraksi dengan database menggunakan objek dan class di bahasa pemrograman mereka.
Class
yang dibuat adalah wakil dari tabel, dan object
mencerminkan kolom (field) di tabel database.
Contoh penggunaan tanpa ORM di php
// Ambil data user
$sql = "SELECT * FROM users WHERE id = ". $id;
$result = mysqli_query($conn, $sql);
// Edit Data
$sql = "UPDATE users SET nama = 'Budi', email = 'budi@example.com' WHERE id = ". $id;
$result = mysqli_query($conn, $sql);
Contoh penggunaan dengan ORM di php
// Ambil data user
$user = User::find($id);
// Edit
$user->name = "Budi";
$user->save();
Dengan menggunakan ORM, developer akan jauh lebih mudah dalam menulis code dibanding SQL mentah. Dalam maintenance-nya pun, misal saja tabel user perlu di ganti namanya, perubahan cukup dengan mengganti object table di class User tanpa harus merubah code users
di setiap query yang dibuat.
Namun memang dalam beberapa query yang kompleks penggunaan ORM dapat menghambat, karena ada beberapa ORM menjalankan where condition
dengan antrian / prioritas yang berbeda, sehingga hasil akhir dari query tersebut tidak sesuai ekspektasi. Misal query join dengan beberapa where condition, secara ORM akan menjalankan join terlebih dahulu kemudian where condition. Namun di ekspektasikan join lalu where, lalu di join lagi. Hal ini bisa di solving dengan menggunakan rawQuery dengan bantuan sub query.
Sehingga memang penggunaan ORM kurang optimal untuk query kompleks, terkadang lebih baik ditulis dengan SQL langsung. Namun, terlalu banyak / sering menjalankan query kompleks bisa memperlambat performa.
Dalam kasus pengembangan aplikasi saat ini, sudah sangat wajar setiap aplikasi pasti menggunakan sistem ORM, namun tidak menutup kemungkinan untuk tetap menggunakan RawQuery, untuk mendukung beberapa query yang kompleks atau sangat spesifik.
Biasanya ORM digunakan untuk operasi umum seperti insert, update, delete, select sederhana, sedangkan RawQuery digunakan untuk Query kompleks yang sulit atau tidak efisien ditulis dengan ORM. Misalnya query dengan JOIN
rumit, GROUP BY
, HAVING
, subquery bersarang.
Contoh :
// Menggunakan ORM
$users = User::where('active', true)->get();
// Mengunakan rawQuery
use Illuminate\Support\Facades\DB;
$results = DB::select("
SELECT users.id, users.name, COUNT(orders.id) AS order_count
FROM users
JOIN orders ON orders.user_id = users.id
WHERE users.active = 1
GROUP BY users.id, users.name
HAVING COUNT(orders.id) > 10
");
// atau DB::raw
$users = DB::table('users')
->select('id', 'name', DB::raw('COUNT(orders.id) as order_count'))
->join('orders', 'orders.user_id', '=', 'users.id')
->where('users.active', 1)
->groupBy('users.id', 'users.name')
->havingRaw('COUNT(orders.id) > 10')
->get();
Penggunaan RawQuery yang cukup panjang / kompleks biasanya harus dibantu dengan menggunakan indexing pada kolom yang digunakan untuk pencarian sehingga dapat mengurangi overload performance.
Contoh ORM Populer
- Python: SQLAlchemy, Django ORM, Peewee
- Java: Hibernate
- PHP: Eloquent (Laravel)
- JavaScript: Sequelize (Node.js)