Zend Framework入門(7):抽象化レイヤによるデータベースアクセス手法 - Zend_Db(後編) -
Zend Frameworkによる実践的なPHPアプリケーション開発 7
ダウンロード サンプルファイル (8.4 KB)
テーブル作成
まずは、DBMS上で今回使用するテーブルを作成します。前回の記事で作成したデータベースdb_zend_tableに新たなテーブルを作成し、レコードを追加します。プログラムからデータベースにアクセスする際は、前回作成したユーザーzendを使用します。データベースとユーザーの作成を行っていない場合は、前回の記事を参照して先に作成してください。
オフィス内の部屋に入室する権限を管理する例を想定して、4個のテーブルを作成します。作成するテーブルと内容は次のとおりです。テーブル名は複数形で頭文字のみ大文字にしています。
| テーブル名 | 内容 |
| Offices | オフィスの情報を格納します。 |
| Rooms | 管理の対象となる部屋の情報を格納します。 |
| Members | 管理の対象となるメンバーの情報を格納します。 |
| Permissions | メンバーが持っている入室権限と有効期限を格納します。 |
各テーブルの列は次のようになっています。
| 列名 | キー | 内容 |
| office_id | PK | オフィスに割り振ったユニークな番号。 |
| office_name | - | オフィス名の文字列。 |
| 列名 | キー | 内容 |
| room_id | PK | 部屋に割り振った番号。オフィス内ではなく、全体で重複しない値とします。 |
| room_name | - | 部屋名の文字列。 |
| office_id | FK | その部屋があるオフィスのoffice_id。Officeテーブルのoffice_id列を指す外部キーです。 |
| 列名 | キー | 内容 |
| member_id | PK | メンバーに割り振ったユニークな番号。 |
| member_name | - | メンバーの名前の文字列。 |
| 列名 | キー | 内容 |
| member_id | PK,FK | 「誰が」部屋に入る権限を持っているかを示す値。member_idとroom_idの組み合わせがこのテーブルの主キーになります。Membersテーブルのmember_idを指す外部キーです。 |
| room_id | PK,FK | 「どの部屋に」入る権限を持っているかを示す値。member_idとroom_idの組み合わせがこのテーブルの主キーになります。Roomsテーブルのroomr_idを指す外部キーです。 |
| term | - | 入室権限の有効期限をあらわす日付型の値。 |
ER図は次のようになります。

MySQLのコマンドラインツールから次のSQLを実行し、テーブルを作成してレコードを投入します。
-- データベースdb_zend_sampleを使用します use db_zend_sample; -- テーブルを作ります CREATE TABLE Offices( office_id int primary key, office_name varchar(50) ) engine = InnoDB; CREATE TABLE Rooms( room_id int primary key, room_name varchar(50), office_id int, CONSTRAINT rooms_fk foreign key(office_id)REFERENCES offices(office_id) ) engine = InnoDB; CREATE TABLE Members( member_id int primary key, member_name varchar(50) ) engine = InnoDB; CREATE TABLE Permissions( member_id int, room_id int, term date, CONSTRAINT permissions_pk primary key(member_id, room_id),
CONSTRAINT permissions_fk1 foreign key(member_id) REFERENCES members(member_id), CONSTRAINT permissions_fk2 foreign key(room_id)
REFERENCES rooms(room_id) ) engine = InnoDB; -- レコードを追加します INSERT INTO offices VALUES(1, '池袋本社'); INSERT INTO offices VALUES(2, '品川分室'); INSERT INTO rooms VALUES(1, 'サーバ室', 1); INSERT INTO rooms VALUES(2, '資料室', 1); INSERT INTO rooms VALUES(3, 'サーバ室', 2); INSERT INTO members VALUES(1, '織田'); INSERT INTO members VALUES(2, '柴田'); INSERT INTO members VALUES(3, '前田'); INSERT INTO permissions VALUES(1, 1, '2009-03-31'); INSERT INTO permissions VALUES(1, 2, '2009-03-31'); INSERT INTO permissions VALUES(2, 3, '2009-03-31'); INSERT INTO permissions VALUES(3, 1, '2009-03-31'); INSERT INTO permissions VALUES(3, 3, '2008-09-30');
レコードの内容を表にまとめると次のようになります。
| office_id | 1 | 2 | ||
| office_name | 池袋本社 | 品川分室 | ||
| room_id | 1 | 2 | 3 | |
| member_id | room_name member_name | サーバ室 | 資料室 | サーバ室 |
| 1 | 織田 | 2009/03/31 | 2009/03/31 | - |
| 2 | 柴田 | - | - | 2009/03/31 |
| 3 | 前田 | 2009/03/31 | - | 2008/09/30 |
この記事は参考になりましたか?
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト 川北 季(カワキタ ミノル)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
