Subversion-Projekte lars-tiefland.prado

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
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>