Mapping Database Relasional ke MongoDB
Sebagai pegiat IT mungkin kita sudah mengenal atau setidaknya mendengar istilah MySQL. Yaps, Sebuah database relasional populer yang mengusung konsep relasi tradisonal (RDBMS/SQL). Nah, selain RDBMS/SQL juga ada konsep baru yaitu NoSQL. NoSQL merupakan konsep penyimpanan database dinamis yang tidak terikat pada relasi-relasi tabel yang kaku seperti RDBMS. Selain lebih scalable, NoSQL juga memiliki performa pengaksesan yang lebih cepat. Hal-hal itulah yang membuat NoSQL menjadi semakin populer beberapa tahun belakangan.
Salah satu jenis NoSQL yang banyak digunakan dan bersumber terbuka yaitu MongoDB. Dengan sistem penyimpanan dalam format dokumen Binary JSON (BSON) membuat MongoDB sangat cocok untuk dipasangkan dengan Node.js.
Akan menjadi tantangan yang menarik, jika kita selama ini terbiasa dengan konsep SQL dan ingin memahami konsep NoSQL pada MongoDB. Dibutuhkan cara pandang baru, mengingat dua konsep ini memiliki cara berbeda dalam merepresentasikan data.
Mapping Tabel, Kolom dan Baris
Jika pada RDBMS kita mengenal tabel, maka di mongoDB ada istilah collection. Di dalam collection ada bentuk dokumen-dokumen yang sepadan dengan baris pada tabel. Dan nama-nama kolom pada tabel bisa dijumpai sebagai field di MongoDB.
Untuk lebih jelasnya mari kita lihat bentuk perubahan bentuk data dari SQL ke NoSQL.
Dynamic Schema
Yaps, MongoDB memungkinkan kita untuk membuat satu collection yang memiliki struktur yang berbeda antar dokumen. Perbedaan disini bisa terjadi pada nama field, tipe data, maupun jumlah field yang ada (unstructured data). Tentu saja konsep ini berbeda dengan konsep RDBMS yang mengharuskan kita mendefinisikan struktur dan relasi terlebih dahulu, sehingga struktur tiap baris dalam tabel akan sama (structured data).
Untuk lebih jelasnya bisa dilihat contoh pada dua bentuk dokumen pada satu collection dibawah ini.
Dari gambar diatas bisa dilihat bahwa pada dokumen pertama terdapat field gol_darah
yang tidak ada pada dokumen kedua, begitu juga dengan field pekerjaan
yang tidak ditemukan pada dokumen pertama. Bayangkan saja jika data ini disimpan pada RDBMS, akan membutuhkan banyak kolom untuk menampung data yang belum tentu diisi semua (tidak efisien).
Kita mengenal bentuk relasi pada RDBMS menggunakan primary dan foreign key yang terhubung secara langsung. Sedangkan di MongoDB ada dua pendekatan untuk membentuk relasi yaitu Referenced dan Embedded Document.
Referenced Document
Di dalam Referenced Document, satu collection akan menyimpan _id
dari collection lainnya pada sebuah field. Pada contoh gambar dibawah, terlihat collection pemesanan
menyimpan field id_pelanggan
yang merupakan _id
dari collection pelanggan.
Dalam cara ini _id
yang disimpan tidak berhubungan secara langsung dengan collection pelanggan.
Kita bisa menginputkan id_pelanggan
dalam collection pemesanan
walaupun id_pelanggan
tidak ada di pelanggan
. MongoDB tidak akan menampilkn pesan error apapun.
Embedded Document
Daripada kita menggunakan banyak collection terpisah yang berelasi, kita bisa menyisipkan data-data tersebut di dalam satu dokumen. Misalnya saja seperti gambar dibawah, pemesanan
bisa disisipkan pada dokumen pelanggan
. Jika tidak, kita juga bisa menyisipkan pelanggan
ke dalam pemesanan
. Kita bisa banyak berkreasi membentuk struktur yang kita inginkan, namun tentu harus disesusaikan dengan kebutuhan aplikasi kita.
Pendekatan mana yang dipilih?
Tergantung pada banyak kondisi dan kebutuhan. Jika data yang kita sisipkan diprediksi akan tumbuh menjadi besar maka lebih baik untuk menggunakan Referenced Document, seperti data pemesanan diatas. Embedded document digunakan jika data yang disisipkan tidak berpotensi untuk menjadi besar. Perhatikan juga ukuran dari dokumen, karena MongoDB tidak mengijinkan sebuah dokumen berukuran lebih dari 16 MB dan kedalaman dari Embedded Document juga tidak bisa lebih dari 100.
Tambahan
Salah satu aplikasi client cukup membantu mengelola data di MongoDB yaitu Robomongo. Selain bersumber terbuka juga mendukung di sistem operasi GNU/Linux, Mac, dan Windows. Dan jika membutuhkan layanan hosting MongoDB, kita bisa menggunakan layanan di MLab. Tersedia kapasitas 500 MB gratis, lumayan bisa digunakan untuk belajar atau untuk pengembangan aplikasi kita.
Referensi: