Konsep Baru Pemodelan Database dengan Anchor Modeling
1. Konsep Baru Pemodelan Database dengan Anchor Modeling Bowo Prasetyo Contoh Kasus Lanjutan Perubahan Struktur dan Konten Database 10 Desember 2011 http://www.scribd.com/prazjp http://www.slideshare.net/bowoprasetyo
2. Anchor Modeling Teknik pemodelan database agile yang cocok untuk informasi yang berubah seiring waktu baik struktur maupun konten-nya.
3. Berbasis pada empat konstruksi permodelan: anchor , attribute , tie dan knot .
4. Hasilnya dapat diterjemahkan ke desain relational database, di mana hampir semua tabelnya akan berada pada bentuk sixth normal form (6NF).
5. Online Resources Official site http://www.anchormodeling.com/ Online tutorial http://www.anchormodeling.com/?page_id=186 Online anchor modeler http://www.anchormodeling.com/modeler/
7. Peringatan Contoh aplikasi HelloEnterprise ini memiliki beberapa aspek yang tidak baik, antara lain: Menggunakan database MySQL yang tidak mendukung fitur “ table elimination ”. Seharusnya menggunakan database yang mendukung fitur ini, mis. PostgreSQL. Mengakses database langsung dari halaman JSP yang seharusnya hanya untuk tampilan. Seharusnya mengakses database dari komponen domain atau model pada pola MVC (model-view-controller) atau PM (presentation-model).
8. Mencatat Lokasi Aplikasi HelloEnterprise dimodifikasi untuk: mencatat lokasi ( IP address ) user saat mengucapkan salam, kalau tidak mengucapkan salam, lokasi tidak usah dicatat. dan menampilkannya bersama tiga salam terakhir.
10. Berarti tambah anchor baru yang sesuai, dengan satu attribute untuk IP address.
11. Dan tie baru yang menghubungkannya dengan anchor US_User dan anchor GE_Greeting . User was at location.
12. Greeting was said at location . Untuk melacak salam apa diucapkan di mana pada waktu tertentu, maka untuk tie greeting – location perlu dibuatkan sejarah.
26. Lokasi pengucapan salam ( attribute LO_IPA_Location_IpAddress ) From clause utama terdiri dari tabel-tabel anchor terkait yang di join tanpa syarat : us_user us JOIN ge_greeting ge JOIN lo_location lo
27. Menampilkan Salam Dilanjutkan join dengan tabel-tabel attribute terkait: JOIN ge_txt_greeting_text ge_txt ON ge_txt.GE_ID = ge.GE_ID
28. JOIN lo_ipa_location_ipaddress lo_ipa ON lo_ipa.LO_ID = lo.LO_ID Dilanjutkan join dengan tabel-tabel tie terkait: JOIN ge_wassaid_us_by ge_us ON ge_us.GE_ID = ge.GE_ID AND ge_us.US_ID = us.US_ID
29. JOIN ge_wassaid_lo_at ge_lo ON ge_lo.GE_ID = ge.GE_ID AND ge_lo.LO_ID = lo.LO_ID AND ge_lo.GE_wasSaid_LO_at_ChangedAt = ge_us.GE_wasSaid_US_by_ChangedAt
30. Menampilkan Salam Where clause dilakukan terhadap anchor : WHERE us.US_ID = '<%= username %>' Diakhiri dengan order dan limit : ORDER BY ge_us.GE_wasSaid_US_by_ChangedAt DESC LIMIT 3
31. Menampilkan Salam Menggunakan <sql:query> untuk meng ambil salam dari database. <sql:query var="result" dataSource="jdbc/security"> SELECT ge_txt.GE_TXT_Greeting_Text, ge_us.GE_wasSaid_US_by_ChangedAt, lo_ipa.LO_IPA_Location_IpAddress FROM us_user us JOIN ge_greeting ge JOIN lo_location lo JOIN ge_txt_greeting_text ge_txt ON ge_txt.GE_ID = ge.GE_ID JOIN lo_ipa_location_ipaddress lo_ipa ON lo_ipa.LO_ID = lo.LO_ID JOIN ge_wassaid_us_by ge_us ON ge_us.GE_ID = ge.GE_ID AND ge_us.US_ID = us.US_ID JOIN ge_wassaid_lo_at ge_lo ON ge_lo.GE_ID = ge.GE_ID AND ge_lo.LO_ID = lo.LO_ID AND ge_lo.GE_wasSaid_LO_at_ChangedAt = ge_us.GE_wasSaid_US_by_ChangedAt WHERE us.US_ID = '<%= username %>' ORDER BY ge_us.GE_wasSaid_US_by_ChangedAt DESC LIMIT 3 </sql:query>
41. Lalu cek lokasi di tabel attribute . Lokasi user bisa didapat dari variabel JSTL ${pageContext.request.remoteAddr} . Kalau tidak ada, insert lokasi di tabel anchor dan attribute .
44. Mengecek Lokasi di Tabel Attribute <sql:transaction dataSource="jdbc/security"> <sql:query var="loId"> SELECT LO_ID FROM lo_ipa_location_ipaddress WHERE LO_IPA_Location_IpAddress = '${pageContext.request.remoteAddr}' </sql:query>
45. Meng insert Lokasi di Tabel Anchor <sql:update var="inserted"> INSERT INTO lo_location (LO_ID) VALUES (NULL) </sql:update>
46. Meng insert Lokasi di Tabel Attribute <sql:query var="loId"> SELECT LAST_INSERT_ID() LO_ID </sql:query> <sql:update var="inserted"> INSERT INTO lo_ipa_location_ipaddress (LO_ID, LO_IPA_Location_IpAddress) VALUES (${loId.rows[0].LO_ID}, '${pageContext.request.remoteAddr}') </sql:update>
47. Meng insert Lokasi dan Waktunya di Tabel Tie <sql:update var="inserted"> INSERT INTO ge_wassaid_lo_at (GE_ID, LO_ID, GE_wasSaid_LO_at_ChangedAt) VALUES (${geId.rows[0].GE_ID}, ${loId.rows[0].LO_ID}, '${now}') </sql:update> </sql:transaction>
64. The NetBeans E-commerce Tutorial - Connecting the Application to the Database, http://netbeans.org/kb/docs/javaee/ecommerce/connect-db.html