Membuat Database
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 database access object (DAO) dan Rekaman Aktif.
Untuk keperluan tutorial, kita menyederhanakan kebutuhan sistem blog kita agar hanya perlu berhadapan dengan pengguna dan data tulisan. Selanjutnya kita membuat dua tabel database, users dan posts, seperti diperlihatkan dalam duagram hubungan entitas atau entity-relationship (ER) di bawah ini.
 
Kita menggunakan SQLite 3 database untuk menyimpan data kita. Pertama kita ubah diagram ER ke dalam pernyataan SQL berikut dan menyimpannya dalam file protected/schema.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);
Batasan fk_author diabaikan oleh SQLite karena tidak mendukung batasan kunci asing. 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 posts.post_id adalah auto-incremental jika kita menempatkan NULL untuk nilainya.
Kemudian kita menggunakan piranti baris perintah SQLite untuk membuat SQLite database. Kita membuat sebuah direktori protected/data untuk menampung file database SQLite. Sekarang kita menjalankan perintah berikut di bawah direktori protected/data:
sqlite3 blog.db < ../schema.sql
Database sudah dibuat sebagai protected/data/blog.db dan kita akan melihat direktori dan file berikut:
 SQLite memerlukan direktori protected/data dan file database protected/data/blog.db keduanya disetel agar bisa ditulisi oleh proses server Web.
SQLite memerlukan direktori protected/data dan file database protected/data/blog.db keduanya disetel agar bisa ditulisi oleh proses server Web.