<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 NULL CONSTRAINT 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>