前回までの作業で,すべてのフローの画面設計とバリデーション定義が一旦完了となりました。今回から2回に渡って,画面設計によって洗い出された項目に基づいてデータベースのテーブルを作成し,アプリケーションにPiece_ORMを使ったデータアクセスを組み込んでいきます。
データベース設計とテーブル定義
データベースのテーブルを作成するためには,当然ながら作成対象の項目(フィールド)がわかっていなければいけません。今回の開発プロセスでは,すでに各画面のフィールドが洗い出されていますので,それを利用することにしましょう。下記は画面と画面のフィールドの対応表になります。
| 画面 | フィールド1 | フィールド2 |
|---|---|---|
| 新規エントリー入力画面 | タイトル | 内容 |
| 新規エントリー入力確認画面 | タイトル | 内容 |
| エントリー一覧画面 | タイトル | |
| エントリー参照画面 | タイトル | 内容 |
| エントリー編集画面 | タイトル | 内容 |
| エントリー削除確認画面 | タイトル | 内容 |
ごらんの通り,今回は「タイトル」と「内容」の2つのフィールドしかありませんので,これらを「エントリー」テーブルとして表現することにします。また,これらの2つのフィールドでは1つのエントリーを特定できないため,連番型のフィールドも用意し,そのフィールドをプライマリキーに指定します。以上を表現するテーブル作成用のSQLは下記のようになります。
/path/to/pieceblog/data/schemas/entry.ddl
CREATE TABLE entry (
id serial,
title varchar(255) NOT NULL,
content text NOT NULL,
PRIMARY KEY(id)
);
データベース及びユーザの作成
次に,データベースサービスを起動し,PostgreSQLのデータベースとユーザを作成します。なお,今回はデータベース及びユーザ,パスワードのいずれもpieceblogという文字列を使うことにします。下記はpgbashを使った作成例です。
pgbashによるデータベース及びユーザの作成
> connect to template1@localhost user postgres password; # PostgreSQL 8.2.1 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC) 3.4.4 (mingw special) # CONNECT TO template1@localhost:5432 AS template1 USER postgres > create user pieceblog with password 'pieceblog'; CREATE ROLE > ?u [ List of user names ] Username | SupperUser | CreateDB ------------------+------------+---------- postgres | yes | yes pieceblog | no | no (2 rows)
> create database pieceblog owner pieceblog encoding 'UTF8'; CREATE DATABASE > ?l [ List of databases ] Name | Owner | Encoding ------------------+------------------+---------- pieceblog | pieceblog | UTF8 postgres | postgres | EUC_JP template0 | postgres | EUC_JP template1 | postgres | EUC_JP (4 rows)
作成が完了したら,接続のテストをしておきましょう。
pgbashによる接続のテスト
> connect to pieceblog@localhost user pieceblog pieceblog; # PostgreSQL 8.2.1 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC) 3.4.4 (mingw special) # CONNECT TO pieceblog@localhost:5432 AS pieceblog USER pieceblog > ?m # Connected Databases List (C: current database is '*') +---+--------------+-----------+---------------------------+-----------------+ | C | connect_name | user_name | target_name(db@host:port) | client_encoding | +---+--------------+-----------+---------------------------+-----------------+ | | template1 | postgres | template1@localhost:5432 | | | * | pieceblog | pieceblog | pieceblog@localhost:5432 | | +---+--------------+-----------+---------------------------+-----------------+ (2 rows)
テーブルの作成
続いて,先ほどのテーブル作成用のSQLを使ってテーブルを作成します。
pgbashによるテーブルの作成
> CREATE TABLE entry (
> id serial,
> title varchar(255) NOT NULL,
> content text NOT NULL,
> PRIMARY KEY(id)
> );
NOTICE: CREATE TABLE will create implicit sequence "entry_id_seq" for serial column "entry.id"
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "entry_pkey" for table "entry"
CREATE TABLE
> ?d entry
[ "entry" data definitions ]
Attribute | Type | NotNull | Default
-----------+------------------------+----------+-----------------------------------
id | integer | not null | nextval('entry_id_seq'::regclass)
title | character varying(255) | not null |
content | text | not null |
(3 rows)
PrimaryKey: entry_pkey
以上でデータベース側の準備は完了です。

