前回記事:MySQLの日本語文字化け回避!文字コードを確認&変更する方法では、MySQLの文字化け回避方法についてご紹介しました。今回はMySQLでテーブルを作成する前に、テーブル設計の方法とよく使うデータ型の一覧をご紹介したいと思います。
目次
1.1 テーブル(表)とは?
1.2 テーブル定義の設計
1.3 データ型の決定
1.4 データの大きさの決定
1.5 キーの決定
2.1 数値型(整数型)
2.2 数値型(浮動小数点型)
2.3 文字列型(テキスト型)
2.4 バイナリ型
2.5 日付型/時刻型
2.6 その他の型
3.1 テーブル化したいデータを整理し、必要な項目を決める
3.2 キーを決める
3.3 データの種類を考える
3.4 データの大きさを決める
3.5 データ型を決める
1.テーブル定義作成の基本
1.1 テーブル(表)とは?
MySQLはリレーショナルデータベース(関係データベース)であり、複数のテーブル(表)とそのリレーション(関係)の集まりでデータベースが構成されています。
テーブルは縦の行(レコード)と横の列(カラム)からなる二次元の「表」であり、固定された列に対して、任意の数の行が追加される構造になっています。
1.2 テーブル定義の設計
テーブルの各列に格納できるデータの型やサイズなどの決まりごとを、テーブル定義と呼びます。リレーショナルデータベースを作る際には、このテーブル定義をまず決定する必要があります。このテーブル定義を記載した設計書のことを、「テーブル定義書」と呼びます。
またリレーショナルデータベースには、重複する行(レコード)を複数登録することはできません。そのためにデータを特定するための「キー」を設定します。
1.3 データ型の決定
データ項目の属性には、次のようなものを選択することができます。
・数値型
・文字列型
・バイナリ型
・日付型/時刻型
・その他(列挙型など)
大は小を兼ねると思いがちですが、必要最小限のデータ型を選定することで、余計な容量を取らず、結果としてパフォーマンスを向上することができます。
それぞれの型の詳細は、次項にてご紹介します。
1.4 データの大きさの決定
データのサイズは主にデータ型によって決まりますが、最大サイズが指定可能な型もあります。サイズ指定が可能な型については、事項にて解説します。
1.5 キーの決定
重複データでないことを判定するための、キーとなる項目を設定します。キーには、例えば社員データであれば社員番号、商品データであれば商品コードなど、常に一意に定まるものを使用します。
なおキーは1つだけでなく、複数の項目の組み合わせで指定することも可能です。(例えば、伝票番号+枝番で1つとするなど)
2.MySQLで設定可能なデータ型
データ型 | 値の範囲 | UNSIGNED | ZEROFILL | |
---|---|---|---|---|
TYNYINT(m) | 整数型(1バイト) | -128 ~127 |
0~255 | 000 ~255 |
SMALLINT(m) | 整数型(2バイト) | -32768 ~32767 |
0~65536 | 00000 ~65536 |
MEDIUMINT(m) | 整数型(3バイト)ああ | -8388608 ~8388607 |
0~16777215 | 00000000 ~16777215 |
INT(m) | 整数型(4バイト) | -2147483648 ~2147483647 |
0~4294967295 | 0000000000 ~4294967295 |
BIGINT(m) | 整数型(8バイト) | -9223372036854775808 ~9223372036854775807 |
0~18446744073709551615 | 00000000000000000000 ~18446744073709551615 |
※mは桁数を指定する整数
数値型には大きく分けて、「整数型」と「浮動小数点型」の2種類があります。その名の通り「整数型」には整数しか入力することができず、「浮動小数点型」には小数点以下を持つデータも入力することができます。
■UNSIGNED
デフォルトは正負の符号を持たせることができますが、「UNSIGNED」オプションを付けると符号を禁止することができます。さらに負の数を使用しないことで、正の数は2倍の大きさまで使用することができます。
■ZEROFILL
「ZEROFILL」オプションを付けると、入力した数字に対して最大桁数まで前方を自動的にゼロ埋めして登録されます。例えば「TYNYINT ZEROFILL」を指定した場合、「32」と入力すると「032」と登録されます。ZEROFILLを使用する場合、負の数は使用できない(UNSIGNEDを指定したのと同じ)状態になります。
データ型 | 値の範囲 | |
---|---|---|
FLOAT | 単精度浮動小数点型 | 3.402823466E+38 ~3.402823466E+38 |
DOUBLE | 倍精度浮動小数点型 | -1.7976931348623157E+308 ~1.7976931348623157E+308 |
FLOAT(m,d) | 単精度浮動小数点型 | m:1~255桁 n:0~30桁 まで指定可能 |
DOUBLE(m,d) | 倍精度浮動小数点型 | m:1~255桁 n:0~30桁 まで指定可能 |
※mは全体の桁数、dは小数部の桁数を指定する整数
■UNSIGNED
整数型同様に負の数の入力を禁止することができますが、範囲は2倍にはなりません。なお桁数を指定した場合は自動的にUNSIGNED同然となり、負の数を入力することができなくなります。
■ZEROFILL
こちらも整数型同様に、ゼロ埋めして入力することができます。
データ型 | 値の範囲 | |
---|---|---|
CHAR(m) | 固定長文字型 | m(文字数指定):0~255文字 |
VARCHAR(m) | 可変長文字型 | m(バイト数指定):0~65535バイト |
TYNYTEXT | テキスト型 | 0~255バイト(固定) |
TEXT | テキスト型 | 0~65535バイト(固定) |
MEDIUMTEXT | テキスト型 | 0~16777215バイト(固定) |
LONGTEXT | テキスト型 | 0~4294967295バイト(固定) |
CHAR型とTEXT型はどちらも文字列を格納する型ですが、しいて言うならCHAR型は値の範囲を指定することができ、TEXT型は固定となっています。長大な文字列を格納する必要がある際に、TEXT型を使用する場面が多いようです。
データ型 | 値の範囲 | |
---|---|---|
BINARY(m) | 固定長バイナリ型 | m(文字数指定):0~255文字 |
VARBINARY(m) | 可変長バイナリ型 | m(バイト数指定):0~65535バイト |
バイナリ型を設定した場合、送られてきたデータはバイナリデータとして登録されます。
データ型 | 基本フォーマット | 備考 | |
---|---|---|---|
DATE | 日付型 | 'YYYY-MM-DD' | |
DATETIME | 日付時刻型 | 'YYYY-MM-DD HH:MM:SS' | |
TIMESTAMP | 日付時刻型 | 'YYYY-MM-DD HH:MM:SS' | |
TIME | 時刻型 | 'HH:MM:SS' | |
YEAR[4] | 日付型(4桁年) | 'YYYY' | 1901~2155 または0000が設定可能 |
YEAR[2] | 日付型(2桁年) | 'YY' | 70~69が設定可能 (1970~2069を指す) |
日付型の基本フォーマットは表のように‘YYYY-MM-DD’となっており、西暦年は4桁、各項目は「-(ハイフン)」で区切りを表しますが、次のように省略することもできます。
'YYYYMMDD'
'YY-MM-DD'
'YYMMDD'
日付型の基本フォーマットは’HH:MM:SS’であり、区切り文字は「:」です。
2桁年については、年のみの型と同じく1970年~2069年に置き換えて処理が行われます。さらに区切り文字が使われている場合は1桁の月日や時刻は2桁で表すことも可能であるため、最短では次のように入力することもできます。
'YY-M-D'
'H:M:S'
また、日付の区切り文字には「-」でなく、「/」「.」「@」も使用可能です。
'YYYY/MM/DD'
'YYYY.MM.DD'
'YYYY@MM@DD'
さらに囲み記号の「‘’」については、省略することも可能です。
YYYYMMDD
HHMMSS
日付と時刻の型表記は組み合わせて使用できますが、方式は統一する必要があります。(1桁日の0を省略する場合、1桁時刻の0も省略しなければならない)
'YY-M-D H:M:S' ⇒ '17-2-6 12:1:8'
YYYYMMDDHHMMSS ⇒ 20170206120108
2.6 その他の型
MySQLのデータ型には、これらのほか列挙型(ENUM、SET)や、長大なバイナリデータを格納できるBLOB型などがあります。
3.テーブル定義の作成例
3.1 テーブル化したいデータを整理し、必要な項目を決める
今回は、次のような商品購入データをテーブル化したいと思います。
まず、データを整理していきます。リレーショナルデータベースのテーブルを整理するには、「正規化」という方法があります。このデータに対して第2正規化まで行うと、次のように4つのテーブルに整理できました。
上記正規化の途中経過や変換手順について、詳しくは次の関連記事をご覧下さい。
3.2 キーを決める
次に、各レコードの重複判定を行うためのキーを設定します。各表で、他のレコードと絶対に重複しないデータが入っている項目をキーに設定します。
今回は下図のように、「注文番号」「ユーザID」「商品番号」をキーに設定しました。
3.3 データの種類を考える
各項目に、それぞれどんなデータが格納されるのかを考えます。4つは量が多いので「購入履歴」と「ユーザデータ」の2つを例にすると、図のようになります。
3.4 データの大きさを決める
注文番号やユーザIDなどのコード類について、命名規則が定まっている場合は必要な大きさを決定します。
3.5 テーブル型を決める
データの種類とデータ長について決まったら、最適なデータ型を選択します。
以上で、ごく基本的なテーブル定義が出来上がりました。
4.まとめ
テーブル定義作成の方法とデータ型の種類について、いかがでしたでしょうか。
次回は今回作成したテーブル定義を元に、実際にSQL文を作って実行していきたいと思います。
よければ合わせてご覧下さい。
関連記事:
無料でも使える高機能データベース「MySQL」とは
関連記事:
MySQLのダウンロード&インストールと初期設定方法
関連記事:
MySQLのデータベースに接続する3つの方法と接続手順
関連記事:
便利な公式ツールMySQL Workbenchの使い方と日本語化方法
関連記事:
MySQLでユーザを作成し、権限を設定する方法
関連記事:
MySQLで新規にデータベースを作成・削除する方法
当サイトプロエンジニアのコンサルタントが厳選したおすすめのフリーランス案件特集はこちら
特集ページから案件への応募も可能です!
実際にフリーランスエンジニアとして活躍されている方のインタビューはこちら