■auto_increment(オートインクリメント)
主キーをintにしてオートクリメントにすると、自動で順番が振られる。
AUTO_INCREMENTが設定されたカラムには自動的に連番の値が格納されていきます。初期値は1でデータを追加する時に、対象のカラムの値が NULLまたは0だった場合には、1つ前にデータを追加した後に対象のカラムに格納されている最大の値に1を加えた値が格納されます。
※http://www.dbonline.jp/mysql/table/index7.html より抜粋
■unsigned(アンサインド:属性)
負数をカバーしない。その分扱える正の値が増える。
例えばTINYINT型では通常扱える範囲は-128~127。しかしUNSIGNEDを定義することで0~255になる。
つまり、無駄な範囲をカバーしなくてもよくなる。
■index(索引)
検索を速く行うために、よくselectするキーにindexで索引をつける。
あまりつけすぎては×
■JOIN・・・(cakeはアソシエーション)テーブル結合(複数テーブルの連携)
(レコードに対して、複数のレコード、別テーブル同士。idで情報を特定する。)
1対1 hasOne
1対多 hasMany
多対1 belongsTo
(1個のテーブルに複数のフィールド)多対多 hasAndBelongsToMany・・・検索に使われることが多い
全てのテーブルはプライマリーキーで繋がっている。
■idのつけ方
照合順序(コレート:collate)・・・検索結果に影響。utf8の文字コート番号順に結果が反映。文字化け関係なし。
■テーブルの作り方
はじめに一通り使うデータをテーブルとしてまとめる。
これを複数の表に分ける。これを正規化という。(第一正規化)
例えばssmiyagiのサークルテーブルは、サークルを判別する情報(id、名前、メール、パスワード等)「サークル情報」と、サークルのプロフィール(活動日時、会費なんか)をまとめた「サークルプロフィール情報」に分けられる。
こうすることにより、システム寄りの情報とサイト閲覧者寄りの情報に分けられる。
何の意味があるかというと、テーブルを分けるとログイン認証なんかで全てのデータを検索する必要がないため、ロスが少ない。
ちなみにシステム寄りの情報を「マスタ系」、ユーザ寄りの情報を「レコード系」と言う。
idで繋がり、レコード系は時系列でデータが増えていく。
idで繋がる場合は主キー(マスタ)と外部キー(レコード)で繋がる。主キーの値が決まると、レコードの値が決まる。(第二正規化)
更に主キー以外で同テーブルの列の値が決まらないようにした表を「第三正規化」というのだが、たぶん使わないだろう。
■検索方法
・副問い合わせ
(カッコ)をつかって問い合わせのなかに問い合わせを入れる手法。
・相関副問い合わせ
(カッコ)の外側で指定された表を使うときの手法。select文で取得したデータを内側(カッコ)に渡す。
■仮想テーブル
ユーザーから見たときのみ存在するテーブル。ビュー、テンポラリがある。
create view テーブル名 as “SQL 文”
や
create temporary tableで作る。
テーブルは接続ごとに消去される。