こんばんは!
今日はチーム開発でテーブル定義書を話し合ったので、その際に学んだカラムの設定やenumについて載せます!
AUTO INCREMENT
主にPK(主キー)などのデフォルトで、自動的に連番が付与される。(1,2,3…)
メリットとしては自動で一意性を保て、管理がしやすいことが挙げられる。デメリットはセキュリティ面では1から連番にidを決めるとなると情報を簡単に抜かれてしまう可能性がある(URLなども予測しやすい)ので、ユーザー管理では向いていない。
こちらの記事を参考にさせていただきました↓
INDEX
あるテーブルの特定のカラムからデータを取得する際に、そのカラムのデータを複製して検索しやすいようにしたもの。主にPK、FKに用いられ、idの情報などを検索したい際に実行速度が上がる。イメージとしては索引のある辞書をひくようなイメージ。逆にindexがない場合に検索をかけると、辞書を1ページ目から順にみてほしい単語を探すイメージで、カラムの一番初めのデータから順に参照する。
メリットとしては、先述の通り検索時の実行速度が上がることが挙げられるが、デメリットとしては、何でもかんでもindexを使用してしまうと、indexを作る際に時間がかかるためかえって処理速度が落ちてしまう。
基本的にはある程度多くのデータを格納し、頻繁に検索が行われるカラムに使用すると効果的に用いることができる。
こちらの記事がとても分かりやすかったです!↓
DEFAULT制約
(以前にも載せていましたが、少し情報を追加したかったので載せます。)
DEFAULT制約は初期値を決める制約。trueかfalseが値としてある場合、初期値をどちらかに決めておくことや、初期値が決まっていて変動することがない場合、数値で初期値(default)を定めることも可能。
逆に変動することが多いもの(毎回初期値を変えるのはかえって面倒)や初期値という概念がないものには使わない方が良い。
enum
1つのカラムに指定した複数個の定数を保存できるようするためのもの。enumを使うと指定した複数個の定数以外の値は保存できないようにしたり、カラムに指定した定数が入っているレコードを取り出すのが容易になる。
enumは整数か真偽値でDBに保存される。
使用方法としては、migrationファイルにdefault値を記述し、modelファイルに複数個の定数を定義する。
例
# カラム部分のみ記載
t.integer :blood_type, null:false, default: 0
t.boolean :is_active, null: false, default: true
class Xxx < ApplicationRecord
enum blood_type: { A: 0, B: 1, O: 2, AB: 3}
enum is_active: { active: true, inactive: false}
解説:まずblood_typeではdefaultを0としており、モデルの設定で0はAを示しているので、表示上ではA(型)が初期値になる。is_activeでは初期値をtrueにしており、モデルではtrueをactiveとしているので、表示上ではactiveが初期値になる。
こちらの記事を参考にさせていただきました!
今回はすべて英語表記でenumを指定していましたが、日本語設定も可能なので、興味がある方はそちらもぜひやってみてください。