Monday, April 06, 2009

Kenapa ERD tidak boleh express real world problem

Sebelum ini, lama dahulu semasa zaman muda-muda, sebagai programmer yang bersemangat waja apabila mendapat sahaja tugas untuk develop software/aplikasi tidak kisahlah yang besar atau yang kecil atau mewarisi aplikasi itu untuk dijaga dari senior programmer, maka perkara pertama bermain di benakku ialah bagaimana rupanya database design, berapa banyak table dan lain-lain yang sewaktu dengannya.

Aku cukup suka bila semua relation dalam database lengkap dengan primary key, foreign key, constrains dan aku rasa bila database dah complete baru aku ready untuk buat coding. Dulu memang aku tak dapat nak bayangkan macam nak memulakan coding applikasi yang berkaitan dengan penyimpanan maklumat tanpa perlu memikirkan database design. Bila bercerita dengan customer aku akan bayangkan database design bila bercerita dengan team se unit pun bercakap pasal database design.

Berbalik semula 7 tahun lepas aku kenal mamat H nie, olahan cerita beliau tentang software development approah mengusik akal fikiran ku. Aku terasa ajaran beliau berlainan tidak seperti yang biasa aku dan kawan-kawan aku buat dan fikirkan. Tentang konsep design pattern, pertama kali dengar :) ialah aku budak electrical yang banyak aku dengar semua berkaitan dengan electrical term. Jadi aku terus tumpukan perhatian pada setiap posting beliau dan aku juga kerap kali bertanya soalan. Oleh kerana begitu berminat dangan cara beliau aku pernah ambil beliau naik motor kapchai aku bawak datang ofis minta dan tunjukkan pada beliau apa yang aku buat, dia tegur aku jagan fikirkan pasal database design aku masih lagi tidak boleh lari dari terus terbayang akan si database design nie, penagangan database design aku rasa cukup kuat, dan aku pasti ramai yang ada perasaan tersebut walaupun dah capai umur baligh dalam programming :)

Aku cuba lagi, dan aku diperkenalkan pula dengan Peter Coad teknik - Colour Modeling, selepas mengodek-godek cara tersebut barulah ada sinar FM sikit pada cara aku berfikir. Aku sudah boleh melupakan sedikit si database design. Aku join group color modelling dan banyak soalan bodoh aku tanya dalam group tu.. arghh buat apa aku nak malu, dia orang bukannya nampak muka aku masa aku tanya, dah lah english aku cukup makan nak tanya pasal design level enterprise lak tu.. hahahaha. Yang bagusnya ramai jugak lah response pada pertanyaan aku, aku oleh kerana excited sangat selepas siap je buat design class terus pergi Cyber Cafe dah malam dah masa tu tapi dia orang kan siang so dapatlah jawapan segera bila dia orang review example tersebut.. pergh seronok betul, betul, betul

Selepas tu nie aku tak ingat macam mana aku boleh beli buku Domain Driven Design, sama ada mamat M bagi tahu aku atau pun aku terbaca dalam forum tersebut. Buku nie aku baca lebih dari sekali dan ambil masa untuk aku faham.

Ok aku dan lari jauh dari tajuk yang aku nak cerita. Aku nak bagitahu pada mereka yang masih lagi berfikir tentang database design, cubalah ambil masa fikirkan cara alternatif sikit.

Aku nak bawa contoh yang biasa-biasa aje, Customer membuat Order untuk membeli beberapa barang keperluan. Ok untuk simple case kita akan ada object Customer, Order dan OrderLine

Kalau kita buat database design dia akan jadi macam nie kan



Relation antara Customer kepada Order adalah sama dengan relation antara Order dan OrderLine. Tapi kalau mengikut design sebenar mengikut comman senario ianya bukan begitu.

Customer dan Order ialah unidirectional association, bermakna Customer tidak perlu tahu tentang Order, sebaliknya Order tahu akan Customer.

Manakala untuk Order dan OrderLine relationnya pula bidirectional, bermakna Order mempunyai maklumat tentang OrderLine dan begitu juga sebaliknya OrderLine mempunyai maklumat tentang Order.

Tapi relationnya tiada beza, bagaimana? satu unidirectional dan satu lagi bidirectional, jadi bagaimana. Perkara tersebut hanya boleh di terangkan dengan design domain model menggunakan UML. Berdasarkan design ini kita boleh terangkan OrderLine lifecycle dia dependecy kepada Order, kalau kita listkan semua maklumat OrderLine pun tiada guna kerana maklumat tersebut hanya berguna bila disekalikan dengan maklumat Order. Untuk Customer bukan tugas Customer untuk tahu semua maklumat Order, apa yang Customer perlu tahu jika diberi maklumat Customer sistem perlu bagi maklumat Order kesemua Order yang di lakukan oleh Customer tersebut.




Selamat mencuba dan Vote No to BIJAN

4 comments:

mohdfadhlan at gmail dot com said...

Sbb itu kita perlukan ORM utk bantu dlm melaksanakan design tersebut.

ryzam said...

haha tepat sekali.... nak join sini ke :)

banyak kosong nie...

napi said...

Salam

Bro. ada apa2 perubahan ke pada erd tu. aku pun biasa buat erd dulu utk design sistem.

kene berguru neh. :)

ryzam said...

ERD design straight forward dan bila nka menerangkan situasi sebenar agak susah. Walupun dalam ERD diagram design adalah sama tapi bila dalam domain model sebenarnya maksud yang berlainan