研修(テーブル設計)
今まで作成してきた入力フォーム用のデータベースを作ってみる。
入力項目
姓(*):名(*):フリガナ(姓)(*):フリガナ(名)(*):性別(*):
郵便番号(*):都道府県(*):市町村区(*):番地(*):
メールアドレス(*)趣味(*):ご意見:
条件
・useridにINDEX,AUTO_INCREMENTの設定
・登録日時と更新日時を登録
・都道府県データをデータベースから取得できるよう、都道府県ID 都道府県名 というテーブルを作成
・user_infoのカラムで正規化できる箇所を正規化する。
INDEX
テーブルの格納されているデータを高速に取り出すための仕組み。
1つのクエリで1つのテーブルに対し1つのインデックスしか機能しない。
これを回避する方法もある。(複合インデックス)
AUTO_INCREMENT
数字型のフィールドに自動的に増加する数字を挿入する属性。
レコードを挿入するたびに1ずつ増えていく。ID用によく使われる。
正規化
調査中。たぶん別の日記に書くでしょう。
データベース作成、テーブル作成は前回とほぼ同じなので省略。
■useridにindex、auto_increment設定
カラムに対してindex、もしくはprimary_keyが設定されないと、
auto_incrementは設定できない。なので最初にindexを設定する。
mysql> alter table user_info add index(userid); mysql> show fields from user_info; +-------------+-----------+------+-----+-------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+-----------+------+-----+-------------------+----------------+ | userid | int(11) | NO | MUL | NULL | | | lastname | text | YES | | NULL | | | firstname | text | YES | | NULL | | | lastkana | text | YES | | NULL | | | firstkana | text | YES | | NULL | | | sex | text | YES | | NULL | | | zipcode | int(11) | YES | | NULL | | | pref | text | YES | | NULL | | | address | text | YES | | NULL | | | housenumber | text | YES | | NULL | | | email | text | YES | | NULL | | | hobby | text | YES | | NULL | | | opinion | text | YES | | NULL | | | createtime | datetime | YES | | NULL | | | updatetime | timestamp | NO | | CURRENT_TIMESTAMP | | +-------------+-----------+------+-----+-------------------+----------------+
Key:MUL 重複可能なindex
useridに対してindex設定が出来た。
次はuseridにauto_increment設定を行う。
mysql> alter table user_info modify userid int auto_increment; mysql> show fields from user_info; +-------------+-----------+------+-----+-------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+-----------+------+-----+-------------------+----------------+ | userid | int(11) | NO | MUL | NULL | auto_increment | | lastname | text | YES | | NULL | | | firstname | text | YES | | NULL | | | lastkana | text | YES | | NULL | | | firstkana | text | YES | | NULL | | | sex | text | YES | | NULL | | | zipcode | int(11) | YES | | NULL | | | pref | text | YES | | NULL | | | address | text | YES | | NULL | | | housenumber | text | YES | | NULL | | | email | text | YES | | NULL | | | hobby | text | YES | | NULL | | | opinion | text | YES | | NULL | | | createtime | datetime | YES | | NULL | | | updatetime | timestamp | NO | | CURRENT_TIMESTAMP | | +-------------+-----------+------+-----+-------------------+----------------+
Extra:auto_increment
設定完了。
■都道府県データベース作成
少しクエリの書き方に注意して作成してみた。
mysql> insert into pref_data(prefid, prefname) values -> (1, '北海道'), -> (2, '青森県'), -> (3, '岩手県'), -> (4, '宮城県'), -> (5, '秋田県'), -> (6, '山形県'), -> (7, '福島県'), -> (8, '茨城県'), -> (9, '栃木県'), -> (10, '群馬県'), -> (11, '埼玉県'), -> (12, '千葉県'), -> (13, '東京都'), -> (14, '神奈川県'), -> (15, '新潟県'), -> (16, '富山県'), -> (17, '石川県'), -> (18, '福井県'), -> (19, '山梨県'), -> (20, '長野県'), -> (21, '岐阜県'), -> (22, '静岡県'), -> (23, '愛知県'), -> (24, '三重県'), -> (25, '滋賀県'), -> (26, '京都府'), -> (27, '大阪府'), -> (28, '兵庫県'), -> (29, '奈良県'), -> (30, '和歌山県'), -> (31, '鳥取県'), -> (32, '島根県'), -> (33, '岡山県'), -> (34, '広島県'), -> (35, '山口県'), -> (36, '徳島県'), -> (37, '香川県'), -> (38, '愛媛県'), -> (39, '高知県'), -> (40, '福岡県'), -> (41, '佐賀県'), -> (42, '長崎県'), -> (43, '熊本県'), -> (44, '大分県'), -> (45, '宮崎県'), -> (46, '鹿児島県'), -> (47, '沖縄県');
mysqlは最後の行に;が付かない限り、Enter押してもクエリが書ける。
なのでインデントではないけど、実行したクエリが見やすいように書いてみた。
大学院時代に教えてたのに、すっかり抜けてしまっている。。。
正規化に関しては後日まとめる。
3Dでベクトルやら行列の正規化はやってきたけど、
mysqlの正規化とは全く異なる。
同じ言葉でも業界によってこうも違うとは・・・面白い。