はじめに
データベース設計を学んでいく上で、用語等を中心に整理していきます。
データベース設計 基礎用語 1 はこちらをクリック願います。
もうすでにご存知の方、省略の仕方等ご存知でしたら、ご教授願います。
制約とは
- 特定のデータの保存を許さないバリデーション
- 例)同じメールアドレスの登録をできないようにする。
- 例)名前のデータが空のユーザーを保存できないようにする。
制約の種類
- ① NOT NULL制約
- ② 一意性制約
- ③ 主キー制約
- ④ 外部キー制約
① NOT NULL制約
- カラムに設定する制約
- カラムの値にNULLを入れることができなくなる。
- 絶対に値が必要のあるカラムに対して使う制約。
- Rails マイグレファイルへ記述することでNOT NULL制約を設定できる。
- 例) null: false
- Rails マイグレファイルへ記述することでNOT NULL制約を設定できる。
② 一意性制約
- カラムに設定する制約
- 一意性とはユニークで他とは違うという意味
- 一意性制約を設定したカラムには同じ値を設定できなくなる。
- 例)メールアドレス登録で、同じアドレスが登録できないようにする等
- Rails マイグレファイルへ記述することで、一意性制約をかけることができる。
- 例) add_index :テーブル名, :カラム名, unique: true
③ 主キー制約
- レコードが必ず主キーを持っていなくてはいけないことを保証する制約
- 主キー出る属性値が必ず存在してかつ重複していないことを保証する制約
- 主キーに対して、NOT NULL制約と一意性制約の両方を設定すると同じ意味
- Railsでテーブルを作成する時は、主キー制約は元々実装されている。
- また、主キーはidカラムとして自動で作成される。= idカラムの値は重複しないようにできている。
④ 外部キー制約
- 外部キーに対応するレコードが必ず存在することを保証する制約
- 外部キーのカラム(student_id)に値(3)があっても、その値(3)を主キーとして持つ他のテーブル(studentテーブル)のレコードがないとダメ。
- 例)student_idが3のレコードを保存するために、studentテーブルにidが3のレコードが存在しないといけない。
- 外部キーのカラム(student_id)に値(3)があっても、その値(3)を主キーとして持つ他のテーブル(studentテーブル)のレコードがないとダメ。
- Railsではマイグレファイルで外部キーとなるカラムを追加する時に記述ことで外部キー制約を設定する。
- 例) foreign_key: true
インデックスでデータの検索を高速化
インデックスとは
- データ検索を高速化
- カラムに対して設定する、設定したカラムでの検索が高速になる。
- インデックスをカラムに設定することを、[インデックスを貼る]という。
デメリット
- 全てのカラムにインデックスを貼ることはよくない。
- 理由1:データを保存・更新する速度が遅くなる(処理が遅くなる)。
- 理由2:データベースの容量を使う。
インデックスの貼り方
テーブル内の1つのカラムにインデックスを貼る
- Rails マイグレファイルへ記述する。
- 例) add_index :テーブル名, :カラム名
複数のカラムに対してインデックスを貼る
- Rails マイグレファイルへ記述する。
- 例) add_index :テーブル名, [カラム名, :カラム名]
正規化について
正規化とは
- データベースのデータ構造をより効率的で重複や無駄のないシンプルな構造にするための手順
- 正規化を行ったあとのデータベースは、正規形と呼ばれる。
- 正規化を行っていなければ、非正規形と呼ばれる。
- 正規化には順番がある。
① 非正規 → 第一正規形
② 第一正規形 → 第二正規形
③ 第二正規形 → 第三正規形
以降もあるが、パフォーマンス低下の可能性もあるため、多くは第三正規形までのようです。
→ テーブルがどんどんと小さなテーブルが増えていく
→ SQLの検索実行回数が増える。
→ 当初の目的を見失う。
さいごに
日々勉強中ですので、随時更新します。
皆様の復習にご活用頂けますと幸いです。