Wednesday 3 September 2008

Object Relational Mapping [01]

Akhirnya setelah ngeloyor sana ngeloyor sini dapet juga materi buat TA..namanya ORM kepanjangan dari Object Relational Mapping..Karena saya masih bereksperimen dalam kasus ini saya akan coba sedikit mengambil kutipan-kutipan dari sumber yang lain..

Seperti yang sudah kita kenal, model pemrograman database yang umum digunakan orang adalah model CRUD (Create-Read-Update-Delete). Untuk dapat mengoperasikan data yang ada pada database, tentunya yang pertama kali harus kita lakukan adalah men-create data (disini diasumsikan skema tabel sudah dibuat sebelumnya). Perintah yang umum kita gunakan adalah

INSERT INTO tabel_name(`kolom_name`) VALUES(’value_property’)

Setelah itu jika kita ingin menampilkan data, yang kita lakukan adalah

SELECT * FROM tabel_name

Dan ketika kita ingin mengedit salah satu data, kita harus mengetahui ID/Primary Key dari data yang akan kita edit, kemudian memasukkan nilai baru dengan peintah

UPDATE table_name SET kolom_name = ‘new_value_property’ WHERE Primary_key = ‘key_to_update’

Jika kita sudah bosan sama data tersebut dan ingin menghapusnya, maka kembali kita ambil primary-key-nya lalu menjalankan perintah

DELETE FROM tabel_name where Primary_key = ‘key_to_delete’

Apa yang salah dari konsep tersebut? Tidak ada yang salah. Tapi disini ada sebuah konsep untuk menggabungkan metode pemrograman database dengan konsep Object Oriented Programming (OOP). Pada konsep OOP, kita memodelkan elemen-elemen dari aplikasi kita menjadi objek-objek. Tidak susah kalau kita sudah mengenal database sebelumnya, karena ketika kita mendesain tabel-tabel yang ternormalisasi dalam aplikasi kita, tabel-tabel itu sudah bisa mewakili objek-objek yang ada dalam aplikasi kita. Perlu diperhatikan objek yang dibahas di sini adalah objek yang berfungsi untuk mewakili sebuah elemen (bukan objek bertipe controller atau lainnya).

Konsep ORM adalah melakukan mapping dari tabel menjadi objek. Kolom-kolom yang ada pada tabel nantinya akan menjadi variabel-variabel dalam objek tersebut. Satu objek mewakili satu row. Karena merupakan objek, untuk mengakses beberapa row sekaligus dapat disamakan dengan mengakses array dari objek.

Langsung saja ke contoh, disini saya gunakan contoh kasus blog. Untuk membuat blog sederhana, anggaplah kita perlu 2 objek: blog dan post dengan relasi one-to-many. Satu blog bisa mempunyai banyak post. Maka tabel saya adalah seperti ini:

Blog:
- name (primary key)
- owner (nama pemilik blog)

Post:
- post_id (primary key, auto_number)
- blog_id (blog yang memiliki posting ini)
- tanggal (tanggal posting)
- content (isi posting blog).

Jika menggunakan metode konvensional, menggunakan konsep CRUD, yang harus saya lakukan ketika membuat blog baru adalah: Menjalankan query

INSERT INTO blog(name, owner) VALUES(’sanctuary’, ‘hendrawan’)

Kemudian saya ingin posting, sehingga yang saya lakukan adalah menjalan query

INSERT INTO post(blog_id, tanggal, content) VALUES(’sanctuary’, NOW(), ‘ini postingan pertama saya’)

Jika menggunakan ORM, maka ketika saya ingin membuat blog baru, maka yang harus saya lakukan adalah menjalankan perintah ini (di level aplikasi):

Blog myBlog = new Blog(); // nama class ini diambil dari nama tabel kita sebelumnya
myBlog.name = “sanctuary”;
myBlog.owner = “hendrawan”;
myBlog.save();

Ketika saya menjalankan perintah save(), maka ORM otomatis akan menterjemahkan objek tersebut menjadi syntax-syntax SQL dan menjalankannya di server database.

Kemudian ketika saya ingin menambahkan postingan baru, maka perintah yang saya lakukan kira-kira seperti ini (tergantung bahasa pemrograman yang digunakan, yang saya contohkan disini adalah C#):

Post newPost = new Post();
newPost.blog = myBlog; // myBlog diambil dari code sebelumnya diatas
newPost.tanggal = DateTime.Now();
newPost.content = “ini postingan pertama saya”;
newPost.Save();

Maka kita sudah mempunya objek postingan saya yang pertama yang terhubung ke objek blog bernama ’sanctuary’. Sudah terlihat bedanya? Hehe, jauh lebih mudah dipahami (terutama untuk pemula –yang sudah familiar dengan OOP tentunya) daripada coding yang penuh dengan syntax SQL sebelumnya bukan? Jika sudah pake ORM, memang sebaiknya penamaan-penamaan kolom yang merupakan relasi dirubah, sehingga OOP-nya lebih terlihat. Maksud saya adalah seperti ini:

Post:
- post_id
- blog // cukup blog saja, ndak usah blog_id,
// karena relasi ORM bukan ke primary key dari objek Blog,
// melainkan ke objek Blog secara keseluruhan
- tanggal
- content

Mungkin kalau ndak familiar dengan OOP, ndak terlalu terasa bedanya ya, tapi untuk project dengan tabel yang banyak dan mempunya banyak relasi satu sama lain, maka kita bisa lebih memanfaatkan kelebihan ORM, karena relasi antar tabel sudah di-handle oleh ORM, kita cukup mengakses tabel kita selayaknya kita mengakses sekumpulan objek-objek yang saling berhubungan.

disadur dari : http://bambangeko.wordpress.com/2007/08/27/object-relational-mapping-apa-sih-itu-bagian-pertama/

3 comments:

Anonymous said...

wah mantap nih adi sekarang..... gw juga tau ORM dulu dari .NET (C#) tapi gak sempet implement karena kepepet deadline TA.

Anonymous said...

bagus.
mungkin bisa dikembangkan tentang future dari ORM di .NET, misalnya tentang LINQ (Language Integrated Query).

aDiEnaUkkE said...

@deniar
wah..wah..ini sih cuma mau nyebarin ilmu dari orang..saya mah cuma copy paste..hehehehe..tapi lumayan sih sekarang ga buta2 amat tentang ORM..

@wirawan
semoga masih punya waktu buat mendalami orm :)