全国対応のテーブル設計
全国対応のテーブル設計
さて、ではMysqlに、テーブル設計を始めていきましょうか。
ちょっとCakephpの技術的な部分からはそれてしまうかもしれませんが 全国に対応したようなサイトを作る際のテーブル設計の方法を学びたいと思います。
データベースはMysql、文字コードはutf-8generalciをご用意下さい。
なお、この記事の内容のSQLはこの記事の一番下から、Mysqlのdumpファイルがダウンロードできます。地区、都道府県などよろしければ使って下さい。
全国対応のデータベーステーブル設計
全国版に対応したようなサイトを作る際、テーブル設計は大きく3つに分けることが出来ます。
・都道府県に分けるテーブル
・さらに都道府県から市や区に分けるテーブル
さらにここから町や番地まで分けて行くならもう一つテーブルがあるとよいでしょう。
ではMysqlにテーブルを作って行きます。
全国対応のテーブルをMysql内に作成
Cakephpのテーブルの命名規則についてはご存じですか?命名規則の通りに作っていくと後が楽ですよ。逆に命名規則に反して作ると後のModel内でけっこう面倒なことをしなければならないのです。
地区を大きく分けるテーブルについてはそれほど悩まなくて大丈夫だと思います。
地区を大きく分けるテーブル
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(25) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=’地区名の設定’;
都道府県
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(25) CHARACTER SET utf8 NOT NULL,
`district_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `district_id` (`district_id`)
) ENGINE=InnoDB DEFAULT CHARSET=armscii8 COMMENT=’都道府県’;
市や区
市や区などは、最初は最低限から始まり、後で増えていく可能性が高いので、件数が増えた時に自由に表示順位を変えられるように『sort』というフィールドも用意しました。(初期なのでデータはNULLですが。)
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(25) NOT NULL,
`prefecture_id` int(11) NOT NULL,
`sort` int(11) default NULL,
PRIMARY KEY (`id`),
KEY `prefecture_id` (`prefecture_id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=’エリア’ ;
複数テーブル連携予定の命名規則
ちょっとおさらいなのですが、基本的な命名規則では
・連番のフィールド名は必ずidとする
英単語で複数系ですが、英単語2つを組み合わせてテーブル名としたい場合はhoge_areasとしてアンダーバーデ区切り、2語目を必ず複数系にしてあげます。(テーブルが増えたときとか、よく使います)
さて、複数テーブルを連携する場合はもう一つ命名規則があります。
複数テーブルの命名規則
では、都道府県を管理するprefecturesテーブルを見てみましょう。
foreignKeyのイメージ
おまけ:ストレージエンジンはMysql5.5からInnoDBがデフォ
ENGINE(ストレージエンジン)は私は何でもInnoDB(イーノデービー)を使います。5.5からだいぶ速度が向上し、もともとInnoDBはトランザクション機能がついているが、MyISAM(マイアイサム)に比べると検索スピードが劣るから、検索を考えた場合はMyISAMを選んだほうがよい、というのがありましたがMysql5.5からはInnoDBがデフォルトのストレージエンジンになり、InnoDBの速度もだいぶ向上したので 特別理由がなければMysqlのテーブルのストレージエンジンはInnoDBをオススメします。ただし、古いMysql5.0とかを利用している場合はMysqlを使ったほうがいいっちゃいいかもしれません。そこは臨機応変にお願いします。
Mysqlのdumpファイル
都道府県を一つ一つデータを入れていくのは大変なので、地区と、都道府県、小エリア3つのテーブルのdumpファイルを用意しました。
以下のファイルをダウンロードして、phpmyadminよりインポートを行えばITかあさんと同じ全国対応のテーブルの構築は完了します。
(小エリアのareasテーブルのデータは各自追加するなり減らすなりしてください。)
Mysqlのdumpファイルインポート方法
念のためにインポート方法を動画にて解説。さくらのレンタルサーバーで行いました。
さくらのレンタルサーバーはMysqlが5.5がデフォルト。
まとめ
複数テーブルの連携において、foreignKeyは『テーブル名+id』にする。
次回からCakephpを使ってがしがし掲示板を作っていきますよ!