Konsep Baru Pemodelan Database dengan Anchor Modeling

1,200 views
1,072 views

Published on

Teknik Pemodelan Database Agile untuk Struktur dan Konten yang Berubah Seiring Waktu

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,200
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
13
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Konsep Baru Pemodelan Database dengan Anchor Modeling

  1. 1. Konsep Baru Pemodelan Database dengan Anchor Modeling Bowo Prasetyo Teknik Pemodelan Database Agile untuk Struktur dan Konten yang Berubah Seiring Waktu 8 Desember 2011 http://www.scribd.com/prazjp http://www.slideshare.net/bowoprasetyo
  2. 2. Anchor Modeling <ul><li>Teknik pemodelan database agile yang cocok untuk informasi yang berubah seiring waktu baik struktur maupun konten-nya.
  3. 3. Berbasis pada empat konstruksi permodelan: anchor , attribute , tie dan knot .
  4. 4. Hasilnya dapat diterjemahkan ke desain relational database, di mana hampir semua tabelnya akan berada pada bentuk sixth normal form (6NF). </li></ul>
  5. 5. Kelebihan dan Kekurangan <ul><li>Model berevolusi secara non-destructive .
  6. 6. Menghindari nilai null .
  7. 7. Informasi bebas dari redundancy .
  8. 8. Isu performa akibat join berlebih. </li><ul><li>dapat dihindari berkat fitur ' table elimination ' pada database modern. </li><ul><li>Sudah disupport oleh PostgreSQL.
  9. 9. Belum disupport oleh MySQL. </li></ul></ul></ul>
  10. 10. Anchor <ul><li>Anchor adalah model untuk entitas dan event .
  11. 11. Dilambangkan dengan bujur sangkar penuh.
  12. 12. Konvensi penamaan: AD_AnchorDescription </li><ul><li>AD : mnemonic dengan dua huruf besar.
  13. 13. AnchorDescription : deskripsi dengan huruf besar di depan setiap kata. </li></ul></ul>
  14. 14. Attribute <ul><li>Attribute adalah model untuk properti dari anchor .
  15. 15. Dilambangkan dengan lingkaran kosong.
  16. 16. Perubahan informasi atribut dapat dibuatkan sejarah, dilambangkan dengan outline ganda.
  17. 17. Konvensi penamaan: AD_ATD_AnchorDescription_AttributeDescription </li><ul><li>ATD : mnemonic dengan tiga huruf besar.
  18. 18. AttributeDescription : deskripsi dengan huruf besar di depan setiap kata. </li></ul></ul>
  19. 19. Tie <ul><li>Tie adalah model untuk hubungan antar anchor .
  20. 20. Dilambangkan dengan belah ketupat penuh.
  21. 21. Perubahan informasi tie dapat dibuatkan sejarah, dilambangkan dengan outline ganda.
  22. 22. Konvensi penamaan: A1_role1_A2_role2 </li><ul><li>A1/2 : mnemonic anchor 1/2
  23. 23. role1/2 : peran anchor 1/2, kata pertama adalah kata kerja dengan huruf kecil </li></ul></ul>
  24. 24. Knot <ul><li>Knot adalah model untuk properti bersama, mis. gender , state .
  25. 25. Dilambangkan dengan bujur sangkar kosong.
  26. 26. Konvensi penamaan: KND_KnotDescription </li><ul><li>KND : mnemonic dengan tiga huruf besar.
  27. 27. KnotDescription : deskripsi dengan huruf besar di depan setiap kata </li></ul></ul>
  28. 28. Online Resources <ul><li>Official site </li></ul>http://www.anchormodeling.com/ <ul><li>Online tutorial </li></ul>http://www.anchormodeling.com/?page_id=186 <ul><li>Online anchor modeler </li></ul>http://www.anchormodeling.com/modeler/
  29. 29. Contoh Aplikasi Java EE HelloEnterprise
  30. 30. Peringatan <ul><li>Contoh aplikasi HelloEnterprise ini memiliki beberapa aspek yang tidak baik, antara lain: </li><ul><li>Menggunakan database MySQL yang tidak mendukung fitur “ table elimination ”. </li><ul><li>Seharusnya menggunakan database yang mendukung fitur ini, mis. PostgreSQL. </li></ul><li>Mengakses database langsung dari halaman JSP yang seharusnya hanya untuk tampilan. </li><ul><li>Seharusnya mengakses database dari komponen domain atau model pada pola MVC (model-view-controller) atau PM (presentation-model). </li></ul></ul></ul>
  31. 31. Database Pengguna <ul><li>Pengguna aplikasi HelloEnterprise mempunyai dua entitas: </li><ul><li>Entitas user dengan sebuah properti: </li><ul><li>Password </li></ul><li>Entitas group </li></ul><li>Hubungan antara dua entitas tersebut adalah: </li><ul><li>User belongs to group . </li></ul></ul>
  32. 32. Anchor Model <ul><li>Dua anchor : US_User , GR_Group
  33. 33. Satu attribute : US_PWD_User_Password
  34. 34. Satu tie : US_belongs_GR_to </li></ul>
  35. 35. Entity Relationship Model <ul><li>Empat tabel dalam 6NF: </li><ul><li>US_User , GR_Group , US_belongs_GR_to , US_PWD_User_Password </li></ul></ul>
  36. 36. Realm JDBC GlassFish <ul><li>Realm JDBC GlassFish mensyaratkan database pengguna memiliki struktur seperti berikut *) . </li></ul>*) Lihat tutorial “Mengamankan Aplikasi Java EE 6 – Mengamankan Komponen Web dengan Realm Keamanan JDBC dan Otentikasi Berbasis Form”
  37. 37. Penyesuaian Database <ul><li>Database pengguna perlu disesuaikan seperti berikut: </li><ul><li>Usertable -> US_User </li><ul><li>Username -> US_ID
  38. 38. Password -> US_PWD_User_Password </li></ul><li>Grouptable -> US_belongs_GR_to </li><ul><li>Groupname -> GR_ID </li></ul></ul></ul>
  39. 39. Table Creation SQL CREATE TABLE us_user ( US_ID varchar(64) COLLATE utf8_unicode_ci NOT NULL, US_PWD_User_Password varchar(64) COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (US_ID) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; CREATE TABLE gr_group ( GR_ID varchar(64) COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (GR_ID) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
  40. 40. Table Creation SQL CREATE TABLE us_belongs_gr_to ( US_ID varchar(64) COLLATE utf8_unicode_ci NOT NULL, GR_ID varchar(64) COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (US_ID,GR_ID), KEY GR_ID (GR_ID) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; ALTER TABLE `us_belongs_gr_to` ADD CONSTRAINT us_belongs_gr_to_ibfk_2 FOREIGN KEY (GR_ID) REFERENCES gr_group (GR_ID), ADD CONSTRAINT us_belongs_gr_to_ibfk_1 FOREIGN KEY (US_ID) REFERENCES us_user (US_ID);
  41. 41. Hello user! <ul><li>HelloEnterprise akan memberikan salam kepada user yang login. </li></ul>
  42. 42. Perubahan Database 1 Perubahan Struktur
  43. 43. Nama dan Jenis Kelamin <ul><li>HelloEnterprise akan dimodifikasi untuk menampilkan nama lengkap dan jenis kelamin user , seperti berikut: </li></ul>Hello Bapak/Ibu Nama Lengkap Bapak: kalau jenis kelamin lelaki Ibu: kalau jenis kelamin perempuan
  44. 44. Penambahan Properti <ul><li>Entitas user mempunyai dua properti baru: </li><ul><li>Name dan sex.
  45. 45. Berarti anchor US_User mendapat dua attribute baru yang sesuai. </li></ul><li>Properti sex hanya mempunyai dua nilai: </li><ul><li>Male dan female .
  46. 46. Berarti untuk attribute terkait sex dapat dibuatkan knot . </li></ul></ul>
  47. 47. Anchor Model <ul><li>Dua attribute baru: US_NAM_User_Name dan US_SEX_User_Sex
  48. 48. Satu knot : SEX_Sex </li></ul>
  49. 49. Entity Relationship Model <ul><li>Tiga tabel baru dalam 6NF: </li><ul><li>US_NAM_User_Name , US_SEX_User_Sex dan SEX_Sex </li></ul></ul>
  50. 50. Table Creation SQL CREATE TABLE sex_sex ( SEX_ID enum('M','F') COLLATE utf8_unicode_ci NOT NULL, SEX_sex varchar(8) COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (SEX_ID) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; CREATE TABLE us_nam_user_name ( US_ID varchar(64) COLLATE utf8_unicode_ci NOT NULL, US_NAM_User_Name varchar(128) COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (US_ID) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
  51. 51. Table Creation SQL CREATE TABLE us_sex_user_sex ( US_ID varchar(64) COLLATE utf8_unicode_ci NOT NULL, SEX_ID enum('M','F') COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (US_ID), KEY SEX_ID (SEX_ID) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; ALTER TABLE `us_nam_user_name` ADD CONSTRAINT us_nam_user_name_ibfk_1 FOREIGN KEY (US_ID) REFERENCES us_user (US_ID); ALTER TABLE `us_sex_user_sex` ADD CONSTRAINT us_sex_user_sex_ibfk_3 FOREIGN KEY (US_ID) REFERENCES us_user (US_ID);
  52. 52. Mengakses Database <ul><li>Mengakses database dari JSP dapat menggunakan JSTL (JSP Standard Tag Library), dengan cara: </li><ul><li>Membuat referensi ke JDBC resource di deployment descriptor standar ( web.xml ).
  53. 53. Mengakses database dengan taglib JSTL <sql:query>.
  54. 54. Menampilkan hasilnya dengan taglib JSTL <c:out>. </li></ul></ul>
  55. 55. Referensi JDBC <ul><li>Jalankan Netbeans, buka modul web HelloEnterprise-war *) .
  56. 56. Di Projects Explorer, buka node Web Pages -> WEB-INF .
  57. 57. Buka file web.xml , klik tab References .
  58. 58. Buka node Resource References , klik Add.. .
  59. 59. Isi field seperti halaman berikut, klik OK. </li></ul>*) Lihat tutorial “Mengamankan Aplikasi Java EE 6 – Mengamankan Komponen Web dengan Realm Keamanan JDBC dan Otentikasi Berbasis Form”
  60. 60. Field Referensi JDBC <ul><li>Resource Name: jdbc/security *)
  61. 61. Resource Type: javax.sql.DataSource
  62. 62. Authentication: Container
  63. 63. Sharing Scope: Shareable
  64. 64. Description: Connects to hello database </li></ul>*) Nama JDBC resource yang telah dibuat di GlassFish.
  65. 65. Referensi JDBC web.xml <web-app> ... <resource-ref> <description>Connects to hello database</description> <res-ref-name>jdbc/security</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> <res-sharing-scope>Shareable</res-sharing-scope> </resource-ref> ... </web-app>
  66. 66. Mengakses Database dengan <sql:query> <ul><li>Mengimport taglib JSTL prefix SQL yang diperlukan untuk mengakses database.
  67. 67. Mengakses database dengan taglib <sql:query>. </li></ul><%@taglib prefix=&quot;sql&quot; uri=&quot; http://java.sun.com/jsp/jstl/sql &quot;%> <sql:query var=&quot;sex&quot; dataSource=&quot;jdbc/security&quot;> SELECT US_NAM_User_Name FROM us_nam_user_name WHERE US_ID = '<%= username%>' </sql:query>
  68. 68. Menampilkan Hasil dengan <c:out> <ul><li>Mengimport taglib JSTL prefix C yang diperlukan untuk menampilkan data.
  69. 69. Menampilkan hasil dengan <c:out>. </li></ul><%@taglib prefix=&quot;c&quot; uri=&quot; http://java.sun.com/jsp/jstl/core &quot;%> <c:out value=&quot; ${name.rows[0].US_NAM_User_Name}&quot; />
  70. 70. Memilih Opsi dengan <c:choose> <c:choose> <c:when test='${sex.rows[0].SEX_ID == &quot;M&quot;}'> <c:set var=&quot;title&quot; value=&quot;Bapak&quot; scope=&quot;page&quot; /> </c:when> <c:otherwise> <c:set var=&quot;title&quot; value=&quot;Ibu&quot; scope=&quot;page&quot; /> </c:otherwise> </c:choose>
  71. 71. File Lengkap /jdbc/index.jsp <%@taglib prefix=&quot;c&quot; uri=&quot;http://java.sun.com/jsp/jstl/core&quot;%> <%@taglib prefix=&quot;sql&quot; uri=&quot;http://java.sun.com/jsp/jstl/sql&quot;%> <%@page contentType=&quot;text/html&quot; pageEncoding=&quot;UTF-8&quot;%> <% String username = ((HttpServletRequest) pageContext.getRequest()).getUserPrincipal().getName(); %> <!DOCTYPE html>
  72. 72. File Lengkap /jdbc/index.jsp <html> <head> <meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;> <title>Otentikasi Berbasis Form dengan Realm JDBC untuk JSP</title> </head> <body> <sql:query var=&quot;sex&quot; dataSource=&quot;jdbc/security&quot;> SELECT SEX_ID FROM us_sex_user_sex WHERE US_ID = '<%= username%>' </sql:query>
  73. 73. File Lengkap /jdbc/index.jsp <c:choose> <c:when test='${sex.rows[0].SEX_ID == &quot;M&quot;}'> <c:set var=&quot;title&quot; value=&quot;Bapak&quot; scope=&quot;page&quot; /> </c:when> <c:otherwise> <c:set var=&quot;title&quot; value=&quot;Ibu&quot; scope=&quot;page&quot; /> </c:otherwise> </c:choose>
  74. 74. File Lengkap /jdbc/index.jsp <sql:query var=&quot;name&quot; dataSource=&quot;jdbc/security&quot;> SELECT US_NAM_User_Name FROM us_nam_user_name WHERE US_ID = '<%= username%>' </sql:query> <h1>Hello <c:out value=&quot;${title}&quot; /> <c:out value=&quot;${name.rows[0].US_NAM_User_Name}&quot; />!</h1> <a href=&quot;../logout.jsp&quot;>Logout</a> </body> </html>
  75. 75. Hello Bapak/Ibu Nama Lengkap! <ul><li>Menampilkan jenis kelamin dan nama lengkap. </li></ul>
  76. 76. Referensi <ul><li>Tutorial “Mengamankan Aplikasi Java EE 6 – Mengamankan Komponen Web dengan Realm Keamanan JDBC dan Otentikasi Berbasis Form”
  77. 77. Anchor Modeling – Wikipedia, http://en.wikipedia.org/wiki/Anchor_Modeling
  78. 78. Online Anchor Modeler, http://www.anchormodeling.com/modeler/
  79. 79. Anchor Modeling: Naming Convention, http://www.anchormodeling.com/wp-content/uploads/2010/09/AM-Naming.pdf
  80. 80. The NetBeans E-commerce Tutorial - Connecting the Application to the Database, http://netbeans.org/kb/docs/javaee/ecommerce/connect-db.html </li></ul>

×