SlideShare une entreprise Scribd logo
1  sur  37
Konsep Baru Pemodelan Database dengan Anchor Modeling Bowo Prasetyo Contoh Kasus  Perubahan Struktur dan Konten Database 10 Desember 2011 http://www.scribd.com/prazjp   http://www.slideshare.net/bowoprasetyo
Anchor Modeling ,[object Object]
Berbasis pada empat konstruksi permodelan:  anchor ,  attribute ,  tie  dan  knot .
Hasilnya dapat diterjemahkan ke desain relational database, di mana hampir semua tabelnya akan berada pada bentuk  sixth normal form  (6NF).
Online Resources ,[object Object],http://www.anchormodeling.com/   ,[object Object],http://www.anchormodeling.com/?page_id=186   ,[object Object],http://www.anchormodeling.com/modeler/
Perubahan Database 2 Perubahan Struktur dan Konten Mencatat Masukan Salam
Peringatan ,[object Object]
Mencatat Masukan Salam ,[object Object]
mencatatnya di database,
dan menampilkan tiga salam terakhir. *) Lihat tutorial “Konsep Baru Pemodelan Database dengan Anchor Modeling – Teknik Pemodelan Database Agile untuk Struktur dan Konten yang Berubah Seiring Waktu”
Penambahan Entitas ,[object Object]
Berarti ada  anchor  baru yang sesuai, dengan satu  attribute  teks salam.
Dan  tie  baru yang menghubungkannya dengan  anchor   US_User . ,[object Object],[object Object]
Anchor Model ,[object Object]
Tambah satu  attribute :  GE_TXT_Greeting_Text
Tambah satu  tie  bersejarah:   GE_wasSaid_US_by
Entity Relationship Model ,[object Object]
Table Creation SQL CREATE TABLE ge_greeting ( GE_ID int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (GE_ID) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ; CREATE TABLE ge_txt_greeting_text ( GE_ID int(11) NOT NULL, GE_TXT_Greeting_Text varchar(64) COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (GE_ID), UNIQUE KEY GE_TXT_Greeting_Text (GE_TXT_Greeting_Text) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Table Creation SQL CREATE TABLE ge_wassaid_us_by ( US_ID varchar(64) COLLATE utf8_unicode_ci NOT NULL, GE_ID int(11) NOT NULL, GE_wasSaid_US_by_ChangedAta datetime NOT NULL, PRIMARY KEY (US_ID,GE_ID,GE_wasSaid_US_by_ChangedAta), KEY GE_ID (GE_ID) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; ALTER TABLE `ge_txt_greeting_text` ADD CONSTRAINT ge_txt_greeting_text_ibfk_1 FOREIGN KEY (GE_ID) REFERENCES ge_greeting (GE_ID); ALTER TABLE `ge_wassaid_us_by` ADD CONSTRAINT ge_wassaid_us_by_ibfk_2 FOREIGN KEY (GE_ID) REFERENCES ge_greeting (GE_ID), ADD CONSTRAINT ge_wassaid_us_by_ibfk_1 FOREIGN KEY (US_ID) REFERENCES us_user (US_ID);
Masukan Salam ,[object Object],<form method=&quot;POST&quot; action=&quot;greeting.jsp&quot;> <ul> <li>Masukkan salam anda: <input type=&quot;text&quot; name=&quot;greeting&quot; /></li> </ul> <input type=&quot;submit&quot; value=&quot;Kirim&quot; /> </form>
Menampilkan Salam ,[object Object]
Waktu pengucapan salam (di table  tie   ge_wassaid_us_by ) ,[object Object],[object Object],[object Object],[object Object]
Menampilkan Salam ,[object Object]
Menampilkan Salam ,[object Object],<sql:query var=&quot;result&quot; dataSource=&quot;jdbc/security&quot;> SELECT ge_txt.GE_TXT_Greeting_Text, ge_us.GE_wasSaid_US_by_ChangedAt FROM us_user us JOIN ge_greeting ge JOIN ge_txt_greeting_text ge_txt ON ge_txt.GE_ID = ge.GE_ID JOIN ge_wassaid_us_by ge_us ON ge_us.GE_ID = ge.GE_ID AND ge_us.US_ID = us.US_ID WHERE us.US_ID =  '<%= username %>' ORDER BY ge_us.GE_wasSaid_US_by_ChangedAt DESC LIMIT 3 </sql:query>
Menampilkan Salam ,[object Object],<table border=&quot;1&quot;> <!-- column headers --> <tr> <c:forEach var=&quot;columnName&quot; items=&quot;${result.columnNames}&quot;> <th><c:out value=&quot;${columnName}&quot;/></th> </c:forEach> </tr>
Menampilkan Salam <!-- column data --> <c:forEach var=&quot;row&quot; items=&quot;${result.rowsByIndex}&quot;> <tr> <c:forEach var=&quot;column&quot; items=&quot;${row}&quot;> <td><c:out value=&quot;${column}&quot;/></td> </c:forEach> </tr> </c:forEach> </table>
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> <html> <head> <meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;>
File Lengkap  /jdbc/index.jsp <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> <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>
File Lengkap  /jdbc/index.jsp <c:otherwise> <c:set var=&quot;title&quot; value=&quot;Ibu&quot; scope=&quot;page&quot; /> </c:otherwise> </c:choose> <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> <form method=&quot;POST&quot; action=&quot;greeting.jsp&quot;> <ul>
File Lengkap  /jdbc/index.jsp <li>Masukkan salam anda: <input type=&quot;text&quot; name=&quot;greeting&quot; /></li> </ul> <input type=&quot;submit&quot; value=&quot;Kirim&quot; /> </form> <p> <sql:query var=&quot;result&quot; dataSource=&quot;jdbc/security&quot;> SELECT ge_txt.GE_TXT_Greeting_Text, ge_us.GE_wasSaid_US_by_ChangedAt FROM us_user us JOIN ge_greeting ge JOIN ge_txt_greeting_text ge_txt ON ge_txt.GE_ID = ge.GE_ID JOIN ge_wassaid_us_by ge_us ON ge_us.GE_ID = ge.GE_ID AND ge_us.US_ID = us.US_ID WHERE us.US_ID =  '<%= username %>' ORDER BY ge_us.GE_wasSaid_US_by_ChangedAt DESC LIMIT 3 </sql:query>
File Lengkap  /jdbc/index.jsp <table border=&quot;1&quot;> <!-- column headers --> <tr> <c:forEach var=&quot;columnName&quot; items=&quot;${result.columnNames}&quot;> <th><c:out value=&quot;${columnName}&quot;/></th> </c:forEach> </tr> <!-- column data --> <c:forEach var=&quot;row&quot; items=&quot;${result.rowsByIndex}&quot;>
File Lengkap  /jdbc/index.jsp <tr> <c:forEach var=&quot;column&quot; items=&quot;${row}&quot;> <td><c:out value=&quot;${column}&quot;/></td> </c:forEach> </tr> </c:forEach> </table> </p> <a href=&quot;../logout.jsp&quot;>Logout</a> </body> </html>
Meng insert  Salam ,[object Object]
Pertama buka transaksi database.
Lalu cek salam di tabel  attribute . ,[object Object],[object Object]
Insert salam dan waktunya di tabel  tie .
Terakhir tutup transaksi database.

Contenu connexe

En vedette

Mengamankan Aplikasi Java EE 6
Mengamankan Aplikasi Java EE 6Mengamankan Aplikasi Java EE 6
Mengamankan Aplikasi Java EE 6Bowo Prasetyo
 
e-Voting Application using Internal Vtoken
e-Voting Application using Internal Vtokene-Voting Application using Internal Vtoken
e-Voting Application using Internal VtokenBowo Prasetyo
 
Konsep Baru Pemodelan Database dengan Anchor Modeling
Konsep Baru Pemodelan Database dengan Anchor ModelingKonsep Baru Pemodelan Database dengan Anchor Modeling
Konsep Baru Pemodelan Database dengan Anchor ModelingBowo Prasetyo
 
Mengamankan Aplikasi Java EE 6
Mengamankan Aplikasi Java EE 6Mengamankan Aplikasi Java EE 6
Mengamankan Aplikasi Java EE 6Bowo Prasetyo
 
Overview of Data Mining
Overview of Data MiningOverview of Data Mining
Overview of Data MiningBowo Prasetyo
 

En vedette (6)

Mengamankan Aplikasi Java EE 6
Mengamankan Aplikasi Java EE 6Mengamankan Aplikasi Java EE 6
Mengamankan Aplikasi Java EE 6
 
e-Voting Application using Internal Vtoken
e-Voting Application using Internal Vtokene-Voting Application using Internal Vtoken
e-Voting Application using Internal Vtoken
 
Konsep Baru Pemodelan Database dengan Anchor Modeling
Konsep Baru Pemodelan Database dengan Anchor ModelingKonsep Baru Pemodelan Database dengan Anchor Modeling
Konsep Baru Pemodelan Database dengan Anchor Modeling
 
Mengamankan Aplikasi Java EE 6
Mengamankan Aplikasi Java EE 6Mengamankan Aplikasi Java EE 6
Mengamankan Aplikasi Java EE 6
 
Overview of Data Mining
Overview of Data MiningOverview of Data Mining
Overview of Data Mining
 
Nutch dan Solr
Nutch dan SolrNutch dan Solr
Nutch dan Solr
 

Konsep Baru Pemodelan Database dengan Anchor Modeling

  • 1. Konsep Baru Pemodelan Database dengan Anchor Modeling Bowo Prasetyo Contoh Kasus Perubahan Struktur dan Konten Database 10 Desember 2011 http://www.scribd.com/prazjp http://www.slideshare.net/bowoprasetyo
  • 2.
  • 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.
  • 6. Perubahan Database 2 Perubahan Struktur dan Konten Mencatat Masukan Salam
  • 7.
  • 8.
  • 10. dan menampilkan tiga salam terakhir. *) Lihat tutorial “Konsep Baru Pemodelan Database dengan Anchor Modeling – Teknik Pemodelan Database Agile untuk Struktur dan Konten yang Berubah Seiring Waktu”
  • 11.
  • 12. Berarti ada anchor baru yang sesuai, dengan satu attribute teks salam.
  • 13.
  • 14.
  • 15. Tambah satu attribute : GE_TXT_Greeting_Text
  • 16. Tambah satu tie bersejarah: GE_wasSaid_US_by
  • 17.
  • 18. Table Creation SQL CREATE TABLE ge_greeting ( GE_ID int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (GE_ID) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ; CREATE TABLE ge_txt_greeting_text ( GE_ID int(11) NOT NULL, GE_TXT_Greeting_Text varchar(64) COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (GE_ID), UNIQUE KEY GE_TXT_Greeting_Text (GE_TXT_Greeting_Text) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
  • 19. Table Creation SQL CREATE TABLE ge_wassaid_us_by ( US_ID varchar(64) COLLATE utf8_unicode_ci NOT NULL, GE_ID int(11) NOT NULL, GE_wasSaid_US_by_ChangedAta datetime NOT NULL, PRIMARY KEY (US_ID,GE_ID,GE_wasSaid_US_by_ChangedAta), KEY GE_ID (GE_ID) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; ALTER TABLE `ge_txt_greeting_text` ADD CONSTRAINT ge_txt_greeting_text_ibfk_1 FOREIGN KEY (GE_ID) REFERENCES ge_greeting (GE_ID); ALTER TABLE `ge_wassaid_us_by` ADD CONSTRAINT ge_wassaid_us_by_ibfk_2 FOREIGN KEY (GE_ID) REFERENCES ge_greeting (GE_ID), ADD CONSTRAINT ge_wassaid_us_by_ibfk_1 FOREIGN KEY (US_ID) REFERENCES us_user (US_ID);
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26. Menampilkan Salam <!-- column data --> <c:forEach var=&quot;row&quot; items=&quot;${result.rowsByIndex}&quot;> <tr> <c:forEach var=&quot;column&quot; items=&quot;${row}&quot;> <td><c:out value=&quot;${column}&quot;/></td> </c:forEach> </tr> </c:forEach> </table>
  • 27. 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> <html> <head> <meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;>
  • 28. File Lengkap /jdbc/index.jsp <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> <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>
  • 29. File Lengkap /jdbc/index.jsp <c:otherwise> <c:set var=&quot;title&quot; value=&quot;Ibu&quot; scope=&quot;page&quot; /> </c:otherwise> </c:choose> <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> <form method=&quot;POST&quot; action=&quot;greeting.jsp&quot;> <ul>
  • 30. File Lengkap /jdbc/index.jsp <li>Masukkan salam anda: <input type=&quot;text&quot; name=&quot;greeting&quot; /></li> </ul> <input type=&quot;submit&quot; value=&quot;Kirim&quot; /> </form> <p> <sql:query var=&quot;result&quot; dataSource=&quot;jdbc/security&quot;> SELECT ge_txt.GE_TXT_Greeting_Text, ge_us.GE_wasSaid_US_by_ChangedAt FROM us_user us JOIN ge_greeting ge JOIN ge_txt_greeting_text ge_txt ON ge_txt.GE_ID = ge.GE_ID JOIN ge_wassaid_us_by ge_us ON ge_us.GE_ID = ge.GE_ID AND ge_us.US_ID = us.US_ID WHERE us.US_ID = '<%= username %>' ORDER BY ge_us.GE_wasSaid_US_by_ChangedAt DESC LIMIT 3 </sql:query>
  • 31. File Lengkap /jdbc/index.jsp <table border=&quot;1&quot;> <!-- column headers --> <tr> <c:forEach var=&quot;columnName&quot; items=&quot;${result.columnNames}&quot;> <th><c:out value=&quot;${columnName}&quot;/></th> </c:forEach> </tr> <!-- column data --> <c:forEach var=&quot;row&quot; items=&quot;${result.rowsByIndex}&quot;>
  • 32. File Lengkap /jdbc/index.jsp <tr> <c:forEach var=&quot;column&quot; items=&quot;${row}&quot;> <td><c:out value=&quot;${column}&quot;/></td> </c:forEach> </tr> </c:forEach> </table> </p> <a href=&quot;../logout.jsp&quot;>Logout</a> </body> </html>
  • 33.
  • 35.
  • 36. Insert salam dan waktunya di tabel tie .
  • 38. Mengecek Salam di Tabel Attribute <sql:transaction dataSource=&quot;jdbc/security&quot;> <sql:query var=&quot;geId&quot;> SELECT GE_ID FROM ge_txt_greeting_text WHERE GE_TXT_Greeting_Text = '${param.greeting}' </sql:query>
  • 39. Meng insert Salam di Tabel Anchor <sql:update var=&quot;inserted&quot;> INSERT INTO ge_greeting (GE_ID) VALUES (NULL) </sql:update>
  • 40. Meng insert Salam di Tabel Attribute <sql:query var=&quot;geId&quot;> SELECT LAST_INSERT_ID() GE_ID </sql:query> <sql:update var=&quot;inserted&quot;> INSERT INTO ge_txt_greeting_text (GE_ID, GE_TXT_Greeting_Text) VALUES (${geId.rows[0].GE_ID}, '${param.greeting}') </sql:update>
  • 41. Meng insert Salam dan Waktunya di Tabel Tie <sql:update var=&quot;inserted&quot;> INSERT INTO ge_wassaid_us_by (US_ID, GE_ID, GE_wasSaid_US_by_ChangedAt) VALUES ('<%= username%>', ${geId.rows[0].GE_ID}, NOW()) </sql:update> </sql:transaction>
  • 42. File Lengkap /jdbc/greeting.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> <html> <head> <meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;>
  • 43. File Lengkap /jdbc/greeting.jsp <title>Inserting Greeting Page</title> </head> <body> <sql:transaction dataSource=&quot;jdbc/security&quot;> <!-- check if greeting exists in attribute table --> <sql:query var=&quot;geId&quot;> SELECT GE_ID FROM ge_txt_greeting_text WHERE GE_TXT_Greeting_Text = '${param.greeting}' </sql:query> <!-- insert greeting if not exists in attribute table --> <c:if test=&quot;${empty geId.rows[0].GE_ID}&quot;> <!-- first inserts the primary key in anchor table -->
  • 44. File Lengkap /jdbc/greeting.jsp <sql:update var=&quot;inserted&quot;> INSERT INTO ge_greeting (GE_ID) VALUES (NULL) </sql:update> <!-- then inserts text into attribute table if succeeded --> <c:if test=&quot;${inserted > 0}&quot;> <sql:query var=&quot;geId&quot;> SELECT LAST_INSERT_ID() GE_ID </sql:query> <sql:update var=&quot;inserted&quot;>
  • 45. File Lengkap /jdbc/greeting.jsp INSERT INTO ge_txt_greeting_text (GE_ID, GE_TXT_Greeting_Text) VALUES (${geId.rows[0].GE_ID}, '${param.greeting}') </sql:update> <h4>New greeting <c:out value=&quot;${param.greeting}&quot; /> was inserted!</h4> </c:if> </c:if> <!-- insert greeting times into tie otherwise --> <sql:update var=&quot;inserted&quot;>
  • 46. File Lengkap /jdbc/greeting.jsp INSERT INTO ge_wassaid_us_by (US_ID, GE_ID, GE_wasSaid_US_by_ChangedAt) VALUES ('<%= username%>', ${geId.rows[0].GE_ID}, NOW()) </sql:update> </sql:transaction> <h4>Time of <c:out value=&quot;${param.greeting}&quot; /> was recorded!</h4> <a href=&quot;./index.jsp&quot;>Index</a> </body> </html>
  • 47.
  • 48.
  • 49.
  • 50.
  • 51. Anchor Modeling – Wikipedia, http://en.wikipedia.org/wiki/Anchor_Modeling
  • 52. Online Anchor Modeler, http://www.anchormodeling.com/modeler/
  • 53. Anchor Modeling: Naming Convention, http://www.anchormodeling.com/wp-content/uploads/2010/09/AM-Naming.pdf
  • 54. The NetBeans E-commerce Tutorial - Connecting the Application to the Database, http://netbeans.org/kb/docs/javaee/ecommerce/connect-db.html