データベースの作成

いろんなやり方があるとは思いますが、まずはデータベースを作っておくのがいいと思います。
今回はMySQLで作りました。

CREATE DATABASE cake_db CHARACTER SET utf8;
GRANT all ON cake_db.* TO cake_user@localhost IDENTIFIED BY 'password';

users は管理側の管理者アカウントです。
管理側はAuthコンポーネントを使って認証するので、テーブル名を users にしておきます。
他の名前でも可能ですが、users が Auth コンポーネントのデフォルトなのでそうしておいた方が面倒がなくてよいです。

CREATE TABLE users (
 id INT(11) AUTO_INCREMENT,
 username VARCHAR(100) NOT NULL,
 password VARCHAR(100) NOT NULL,
 name VARCHAR(100),
 email VARCHAR(100),
 PRIMARY KEY (id)
);

membersは会員の情報を入れるテーブルです。
本当はここにstatusフィールドを入れて、仮登録・本登録の処理を入れたかったのですが、今回は見送りました。

CREATE TABLE members (
 id int(11) AUTO_INCREMENT,
 email VARCHAR(100) NOT NULL,
 password VARCHAR(100) NOT NULL,
 type_id INT(11) NOT NULL,
 birthday DATE,
 img1 VARCHAR(255),
 img2 VARCHAR(255),
 created DATETIME,
 modified DATETIME,
 PRIMARY KEY (id),
 KEY type_id (type_id)
);

typesは会員種別のマスターです。
一般会員、とか特別会員、とかのデータを入れます。

CREATE TABLE types (
 id int(11) AUTO_INCREMENT,
 name VARCHAR(100) NOT NULL,
 PRIMARY KEY (id)
);

favoritesは会員の「好きな物」の選択値を入れます。
「好きな物」でも「趣味」でも何でもいいんですが、要は複数選択の場合の処理を入れたいのです。

CREATE TABLE favorites (
 id int(11) AUTO_INCREMENT,
 name VARCHAR(100) NOT NULL,
 PRIMARY KEY (id)
);

members_favorites は会員情報と好きな物を関連づけるためのテーブルです。
多対多の関係になるのでいわゆる HABTM の連結になります。

CREATE TABLE members_favorites (
 id int(11) AUTO_INCREMENT,
 member_id INT(11) NOT NULL,
 favorite_id INT(11) NOT NULL,
 PRIMARY KEY (id),
 KEY member_id (member_id),
 KEY favorite_id (favorite_id)
);