From 16bbf435c8048c3c726de78adc8a670b8a527229 Mon Sep 17 00:00:00 2001 From: xue <> Date: Thu, 5 Apr 2007 19:53:01 +0000 Subject: Added Day2 for blog-tutorial. --- .../protected/pages/Day2/CreateDB.page | 41 +++++++++++++++------- 1 file changed, 29 insertions(+), 12 deletions(-) (limited to 'demos/blog-tutorial/protected/pages/Day2/CreateDB.page') diff --git a/demos/blog-tutorial/protected/pages/Day2/CreateDB.page b/demos/blog-tutorial/protected/pages/Day2/CreateDB.page index 04dd0d90..0d45ba50 100644 --- a/demos/blog-tutorial/protected/pages/Day2/CreateDB.page +++ b/demos/blog-tutorial/protected/pages/Day2/CreateDB.page @@ -3,7 +3,7 @@

Creating Database

-Most Web applications use database to keep data. Our blog system is not an exception. In this section, we will describe how to write database-driven pages for our blog system. We will use techniques including database access object (DAO) and active record. +Most Web applications use database to keep data. Our blog system is not an exception. In this section, we will describe how to write database-driven pages for our blog system. We will use techniques including database access object (DAO) and Active Record.

@@ -13,34 +13,51 @@ For tutorial purpose, we have simplified the requirements of our blog system so

-The corresponding SQL statements for creating the tables are as follows, +We use a SQLite 3 database to keep our data. We first convert the ER diagram into the following SQL statements and save them in the file protected/schema.sql.

+/* create users table */ CREATE TABLE users ( username VARCHAR(128) NOT NULL PRIMARY KEY, email VARCHAR(128) NOT NULL UNIQUE, - password VARCHAR(128) NOT NULL, + password VARCHAR(128) NOT NULL, /* plain text password */ + role INTEGER NOT NULL, /* 0: normal user, 1: administrator */ first_name VARCHAR(128), last_name VARCHAR(128) ); +/* create posts table */ CREATE TABLE posts ( post_id INTEGER NOT NULL PRIMARY KEY, - author VARCHAR(128) NOT NULL, - create_time INTEGER NOT NULL, - title VARCHAR(256) NOT NULL, - content TEXT NOT NULL, - CONSTRAINT "posts_fk" FOREIGN KEY ("author") - REFERENCES users ("username") - ON DELETE CASCADE - ON UPDATE CASCADE + author VARCHAR(128) NOT NULL, /* references users.username */ + create_time INTEGER NOT NULL, /* UNIX timestamp */ + title VARCHAR(256) NOT NULL, /* title of the post */ + content TEXT NOT NULL /* content of the post */ ); + +/* insert some initial data records for testing */ +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'); + + + +SQLite does not support foreign key constraint. Therefore, we will write PHP code to ensure that the posts.author field contains valid data. Also, we are exploiting the fact that the posts.post_id field is auto-incremental if we assign NULL to it. + + +

+We use the SQLite command line tool to create the SQLite database. We first create a directory protected/data to hold the SQLite database file. Per SQLite's requirement, this directory and the database file to be created must be set writable by the Web server process. We now execute the following command under the directory protected/data: +

+ + +sqlite3 blog.db < ../schema.sql

-We use a SQLite 3 database to keep our data. +The database has been created as protected/data/blog.db and we shall see the following directories and files:

+ \ No newline at end of file -- cgit v1.2.3