| 1 |
lars |
1 |
<com:TContent ID="Main">
|
|
|
2 |
|
|
|
3 |
<h1>Membuat Database</h1>
|
|
|
4 |
|
|
|
5 |
<p>
|
|
|
6 |
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>.
|
|
|
7 |
</p>
|
|
|
8 |
|
|
|
9 |
<p>
|
|
|
10 |
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.
|
|
|
11 |
</p>
|
|
|
12 |
|
|
|
13 |
<img src="<%~ ER.gif %>" class="output" />
|
|
|
14 |
|
|
|
15 |
<p>
|
|
|
16 |
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>.
|
|
|
17 |
</p>
|
|
|
18 |
|
|
|
19 |
<com:TTextHighlighter CssClass="source" Language="sql">
|
|
|
20 |
/* buat tabel pengguna */
|
|
|
21 |
CREATE TABLE users (
|
|
|
22 |
username VARCHAR(128) NOT NULL PRIMARY KEY,
|
|
|
23 |
email VARCHAR(128) NOT NULL,
|
|
|
24 |
password VARCHAR(128) NOT NULL, /* dalam teks biasa */
|
|
|
25 |
role INTEGER NOT NULL, /* 0: pengguna normal, 1: administrator */
|
|
|
26 |
first_name VARCHAR(128),
|
|
|
27 |
last_name VARCHAR(128)
|
|
|
28 |
);
|
|
|
29 |
|
|
|
30 |
/* buat tabel tulisan */
|
|
|
31 |
CREATE TABLE posts (
|
|
|
32 |
post_id INTEGER NOT NULL PRIMARY KEY,
|
|
|
33 |
author_id VARCHAR(128) NOT NULL
|
|
|
34 |
CONSTRAINT fk_author REFERENCES users(username),
|
|
|
35 |
create_time INTEGER NOT NULL, /* cap waktu UNIX */
|
|
|
36 |
title VARCHAR(256) NOT NULL, /* judul tulisan */
|
|
|
37 |
content TEXT, /* badan tulisan */
|
|
|
38 |
status INTEGER NOT NULL /* 0: diterbitkan; 1: draft; 2: ditunda; 2: ditolak */
|
|
|
39 |
);
|
|
|
40 |
|
|
|
41 |
/* sisipkan beberapa rekaman data awal untuk pengujian */
|
|
|
42 |
INSERT INTO users VALUES ('admin', 'admin@example.com', 'demo', 1, 'Qiang', 'Xue');
|
|
|
43 |
INSERT INTO users VALUES ('demo', 'demo@example.com', 'demo', 0, 'Wei', 'Zhuo');
|
|
|
44 |
INSERT INTO posts VALUES (NULL, 'admin', 1175708482, 'first post', 'this is my first post', 0);
|
|
|
45 |
</com:TTextHighlighter>
|
|
|
46 |
|
|
|
47 |
<com:NoteBox>
|
|
|
48 |
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.
|
|
|
49 |
</com:NoteBox>
|
|
|
50 |
|
|
|
51 |
<p>
|
|
|
52 |
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>:
|
|
|
53 |
</p>
|
|
|
54 |
|
|
|
55 |
<com:TTextHighlighter CssClass="source cli">
|
|
|
56 |
sqlite3 blog.db < ../schema.sql
|
|
|
57 |
</com:TTextHighlighter>
|
|
|
58 |
|
|
|
59 |
<p>
|
|
|
60 |
Database sudah dibuat sebagai <tt>protected/data/blog.db</tt> dan kita akan melihat direktori dan file berikut:
|
|
|
61 |
</p>
|
|
|
62 |
|
|
|
63 |
<img src="<%~ directories.gif %>" class="output" />
|
|
|
64 |
|
|
|
65 |
<com:NoteBox>
|
|
|
66 |
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.
|
|
|
67 |
</com:NoteBox>
|
|
|
68 |
|
|
|
69 |
</com:TContent>
|