Blow Up by Black Swan

MySQLカラムのKey属性の整理と判断ポイント

今回、最近勉強しているMySQLで、特に迷いながら理解が進んだカラムのkey属性についてまとめようと思います。最後の判断ポイントの部分については、熟練した人にとっては当たり前かつ甘い判断ポイントに見えると思いますが、私のような初学者やシンプルなテーブルを作成する方には参考になるものじゃないかと思います。

1. MySQLのkey属性

MySQLでは、カラムに様々属性を設定し管理することができます。これが、カラムのkey属性です。このkey属性には下記になります。

  • AUTO_INCREMENT -> 自動で前のカラムの値の連番となる値を格納。値の指定も可能
  • PRIMARY KEY -> NULLも含め重複する値を格納できない
  • UNIQUE -> 重複した値は格納できないが、NULLは重複含め格納可能
  • FOREIGN KEY -> 他のテーブルの値が格納される
  • Index -> 検索のスピードを高める。SELECT文のWHERE句で指定するものに付加すると相性が良い

AUTO_INCREMENTは厳密にはkey属性とは言わないかもしれませんが、keyに設定するものであり、index属性との関係もあるため、入れています。カラムには、この他に基本となるデータ型とNULLを含まない場合のオプションであるNOT NULLを設定することができます。逆に言えば、この上記のリストとデータ型、NULLを許容するかどうかの7つのポイントだけ考慮すれば良いとも言えます。そこで私が考えたのが、下記の判断ポイントとカラムの属性を指定する表です。

2. カラム作成の判断ポイント

私が自作したカラムさ作成の判断フローとそれを可視化する表は以下になります。

  1. データ型は何か
  2. NULLは許すか
  3. key属性はどうするか
    • primary key
      • Q. このテーブルを管理するためのkeyにしたいのはどれか(重複を許さず、NULLを許容しない、運用中の変更をしない)
      • 備考: 一つのカラムしか選べない
    • unique key
      • Q. 他のレコードと重複する値を格納したくないか
      • 備考: 基本はNULLも容認されるが、容認したくないなら「NOT NULL」を設定する
    • foreign key
      • Q. 他のテーブルのカラムのレコードとリンクさせるか
    • index
      • Q. SELECT文での検索時に軸となるカラムか
      • 備考: AUTO_INCREMENTを指定したカラムは自動で設定される
    • AUTO_INCREMENT
      • Q. その前のレコードから値が連番になってほしいか
      • 備考: データ型で設定できるのはint型のみ

primary keyについては、全体で1つの選択になりますが、各カラムごとに上記のフローを実行し、下記表に結果を記入し、テーブル作成時のカラム定義時に書き込んでいくことで、簡単に作れると思います。

|column |data-type|null|primary key|unique key|foreign key|index|AUTO_INCREMENT|
|-------|---------|----|-----------|----------|-----------|-----|--------------|
|column1|    -    | -  |     -     |    -     |     -     |  -  |      -       |
|column2|    -    | -  |     -     |    -     |     -     |  -  |      -       |
|column3|    -    | -  |     -     |    -     |     -     |  -  |      -       |
|column4|    -    | -  |     -     |    -     |     -     |  -  |      -       |

3. まとめ

以上が今回の記事になります。自分でコードを書いていくと、どうしてもPCにへばりついて、PCと自身の頭で全てを完結させようとしてしまいすが、そこが混乱の元になることも多々あると思います。そういったときには案外、紙とペンでざっとしたフローズやテーブルを書いてみたりするだけで、簡単に整理できたりすることもあると思います。

今回、私もカラム作成時にPCと頭で整理しようとして混乱してしまった経験から、上記のフローズとテーブルを作成しました。以外に使えるのではないかと心の中でひっそりと思っていますので、どなたかにも同じように参考になれば、幸いです。

読んで頂き、どうもありがとうございました。

4. 参考サイト

今回の主要参考サイトは以下になります。