[RDS] DBの制約とインデックスについて再入門してみた
■ 参考
■ 背景
最近DynamoとかFirebaseとかNoSQL系ばっかだったので頭を切り替えるために。
Railsのモデル構造をいじってて、「あれ、index..?? foreign_key…?? references…??」となったので。
再入門。
■ 用語と説明
主キー制約/複合主キー制約
全レコードの中における特定レコードは一意でないといけないという制約。
テーブルの各行を一意に識別する値が格納された単一の列または複数の列の組み合わせ。
外部キー制約
外部キー参照では、1 つのテーブルの主キー値が格納されている列が別のテーブルの 1 つ以上の列によって参照されたときに、2 つのテーブル間にリンクが作成されます。他のテーブルの主キーをカラムに持つこと。
- 制約される項目としては下記二点
- 外部キー: テーブルに格納できるデータを制御
- 主キー: テーブルのデータに対する変更
外部キー制約のインデックス
外部キーにインデックはマストではない。
しかし、結合時にインデックスがあった方が検索が早くなるので、まぁ貼っとけば無難か
連鎖参照整合性
外部制約を貼っている場合の、主キー側テーブルのレコード更新時における設定。
- NO ACTION = エラーになってRollback
- CASCADE = 親に合わせてこのレコードも同じ更新がかかる(ex. 親を削除→子も削除)
- SET NULL = 親の変更の際、子コードの対象カラムにNULLが入る
- SET DEFAULT = 親の変更の際、子レコードの対象カラムに設定している既定値が入る