Blame | Letzte Änderung | Log anzeigen | RSS feed
<com:TContent ID="Main"><h1>Membuat Database</h1><p>Banyak aplikasi Web menggunakan database untuk memelihara datanya. Sistem blog kita tidak terkecuali. Dalam bagian ini, kami akan menjelaskan bagaimana untuk menulis halaman kendali-database untuk sistem blog kita. Kita akan menggunakan teknik termasuk <a href="http://www.pradosoft.com/demos/quickstart/?page=Database.DAO">database access object (DAO)</a> dan <a href="http://www.pradosoft.com/demos/quickstart/?page=Database.ActiveRecord">Rekaman Aktif</a>.</p><p>Untuk keperluan tutorial, kita menyederhanakan kebutuhan sistem blog kita agar hanya perlu berhadapan dengan pengguna dan data tulisan. Selanjutnya kita membuat dua tabel database, <tt>users</tt> dan <tt>posts</tt>, seperti diperlihatkan dalam duagram hubungan entitas atau entity-relationship (ER) di bawah ini.</p><img src="<%~ ER.gif %>" class="output" /><p>Kita menggunakan SQLite 3 database untuk menyimpan data kita. Pertama kita ubah diagram ER ke dalam pernyataan SQL berikut dan menyimpannya dalam file <tt>protected/schema.sql</tt>.</p><com:TTextHighlighter CssClass="source" Language="sql">/* buat tabel pengguna */CREATE TABLE users (username VARCHAR(128) NOT NULL PRIMARY KEY,email VARCHAR(128) NOT NULL,password VARCHAR(128) NOT NULL, /* dalam teks biasa */role INTEGER NOT NULL, /* 0: pengguna normal, 1: administrator */first_name VARCHAR(128),last_name VARCHAR(128));/* buat tabel tulisan */CREATE TABLE posts (post_id INTEGER NOT NULL PRIMARY KEY,author_id VARCHAR(128) NOT NULLCONSTRAINT fk_author REFERENCES users(username),create_time INTEGER NOT NULL, /* cap waktu UNIX */title VARCHAR(256) NOT NULL, /* judul tulisan */content TEXT, /* badan tulisan */status INTEGER NOT NULL /* 0: diterbitkan; 1: draft; 2: ditunda; 2: ditolak */);/* sisipkan beberapa rekaman data awal untuk pengujian */INSERT INTO users VALUES ('admin', 'admin@example.com', 'demo', 1, 'Qiang', 'Xue');INSERT INTO users VALUES ('demo', 'demo@example.com', 'demo', 0, 'Wei', 'Zhuo');INSERT INTO posts VALUES (NULL, 'admin', 1175708482, 'first post', 'this is my first post', 0);</com:TTextHighlighter><com:NoteBox>Batasan <tt>fk_author</tt> diabaikan oleh SQLite karena tidak mendukung <a href="http://www.sqlite.org/omitted.html">batasan kunci asing</a>. Meskipun demikian, kita masih memelihara batasan di sana untuk kemampuan pemindahan sistem blog kita ke DBMS yang berbeda. Juga, dalam contoh di atas kita mengeksploitasi bukti bahwa field <tt>posts.post_id</tt> adalah <a href="http://www.sqlite.org/autoinc.html">auto-incremental</a> jika kita menempatkan NULL untuk nilainya.</com:NoteBox><p>Kemudian kita menggunakan <a href="http://www.sqlite.org/download.html">piranti baris perintah SQLite</a> untuk membuat SQLite database. Kita membuat sebuah direktori <tt>protected/data</tt> untuk menampung file database SQLite. Sekarang kita menjalankan perintah berikut di bawah direktori <tt>protected/data</tt>:</p><com:TTextHighlighter CssClass="source cli">sqlite3 blog.db < ../schema.sql</com:TTextHighlighter><p>Database sudah dibuat sebagai <tt>protected/data/blog.db</tt> dan kita akan melihat direktori dan file berikut:</p><img src="<%~ directories.gif %>" class="output" /><com:NoteBox>SQLite memerlukan direktori <tt>protected/data</tt> dan file database <tt>protected/data/blog.db</tt> keduanya disetel agar bisa ditulisi oleh proses server Web.</com:NoteBox></com:TContent>