【データベースのデータ型】何を選んだらいい?インデックスやA_Iって何?

type Webエンジニア

前回の記事「データベースを利用したwebアプリを作る【PHPからMySQLを使う方法】」でwebアプリで利用するデータベースを作成しました。

そこではデータベースのデータ型やインデックスやA_I(オートインクリメント)などについて解説できなかったので、この記事で詳細を解説させていただきます。

データ型とは?

データベースには複数のテーブルが含まれます。テーブルには複数の項目(カラム)が含まれ、それぞれの項目にはデータ型を指定する必要があります。

例えばユーザーの名前やニックネームなど、文字列を入れる項目の場合は文字列型を指定します。

ユーザーIDや番号など数字を入れる場合には数字型を指定するといった感じです。

文字列型

一口に文字列型と言ってもいくつか種類があります。主に使うのは以下の型かと思います。

  • VARCHAR:長さ255文字まで
  • TEXT:それ以上の長い文章

他にもTINYTEXTやMEDIUMTEXTなんかがありますが、見ての通り同じ文字列型でも色々と別れているのは文字列の長さによって最適な型を選択する為となっています。

プログラムの変数なんかでも入れる予定のデータによって変数の型は最適なものを選ぶ必要がありますがそんな感じですね。

数字型

数字型もいくつかの型に分かれています。文字列と同様入れる数字の最大値や小数点以下を含むか整数かなどによって変わってきます。

  • INT:整数、最大値2147483647、最小値2147483648
  • DOUBLE:少数

こちらもTINYINTなど許容できる範囲によっていくつか他の型もあります。フラグなど1か0かしか入れる予定がない場合は最小の型でも良いでしょう。

ただし目測を誤るともっと大きな型にしておけばよかったと後悔することになるので、微妙な場合は大きいほうの型を選ぶと安全かと思います。

日付型

もう一つ日付型という型があります、主な型は以下の通りです。

  • DATE:日付
  • DATETIME:日付と時刻

日付の場合は「2019-09-30」といった感じ、日付と時刻の場合は「2019-09-30 08:55:10」といった感じのデータが入ります。

入力された各レコードで作成日時を記録しておくのが一般的です、あとは最終更新日時なんかも記録しておくと後々役立ちます。

そういったカラムに使うことが多い型です。

インデックスとは?

テーブルに項目を作成する際に、型の他にインデックスというものがあったかと思います。

こちらもいくつか選べるのですが、それぞれ一体何のことなのやらって感じですよね。

  • PRIMARY
  • UNIQUE
  • INDEX

PRIMARYとは主キーのことで、1テーブルにつき1つ、そのレコード固有の値を格納するものになります。

例えばusersテーブルならuser_idです、これは1から連番がふられ、同じ値が別の複数のユーザーにふられることはなく、かならず各データで固有の値となります。

はじめはとにかくテーブル名_idの主キー項目を先頭に作っておけばOKかと思います。

UNIQUEも各レコードで固有の値で、他のレコードで重複することを許さないものとなります。ただ主キーと違い1テーブルの複数の項目に設定することも可能です。

他のレコードと重複することを許さないというとツイッターIDとかユーザーが指定するけど他のユーザーが使っていたら使えないものとかが代表例かと思います。

INDEXは貼って検索を高速化させるといったメリットがあるのですが、ちょっと複雑なので今はまだ様子見で良いでしょう。

A_I(オートインクリメント)とは?

1から順に連番が振られPRIMARY(主キー)となります。

これを主キーに指定しておくと、データを登録する際にいちいちデータ内の連番の最大値を調べなくても勝手に次々連番が振られていきます。

ひとまず主キーにA_I(オートインクリメント)を指定しておけば随時理解できてくるはずです。

なぜ主キーに連番?

なぜ1から始まる連番の数字を主キーにするか?ですが、WHERE句で指定がしやすいですし、そのレコードの特定もしやすいからです。

たとえばIDが9のレコードを削除する、このユーザーはIDが32だからID32のレコードの内容をチェックしてみようといった具合です。

ここに文字列型なんて指定すると後々大変です。基本的に文字列はプログラムで扱うにはくせものだと思っておいた方がいいです、特に日本語は文字化けもあるし大変です。

まとめ

以上、データベースの型について解説してきました。

とはいえ基本的によく使う方は上記ぐらいで覚えておけば大体何とかなります。

あとは実際に指定して、プログラムで使っていくことで身につくので、ぜひ実践してみてください。