総論
キー
- 主キー
- 外部キー
制約
- NOT NULL制約
- 一意性制約
- 主キー制約
- 外部キー制約
null制約
migrationファイルでnull制約をかける。
t.string :name, null: false
一意性制約
migrationファイルにadd_indexでuniqueにする。
class AddEmailToUsers < ActiveRecord::Migration
def change
add_column :users, :email, :string
add_index :users, :email, unique: true
end
end
主キー制約
not null制約と一意性制約を同時にかけるのと同義。
もともとid行として設定されている。
外部キー制約
外部キーに対応するレコードが必ず存在することを保証する制約
t.references :user, foreign_key: trueとすることでuser_idがカラムに追加され、外部キーとして設定される。
class CreateScores < ActiveRecord::Migration
def change
create_table :scores do |t|
t.string :name
t.integer :score
t.references :user, foreign_key: true
t.timestamps null: false
end
end
end
インデックス
カラムに対して設定する。検索の高速化を目的に行う。
以下のデメリットがあるため、インデックスを貼るのは必要最低限で。
- データを保存・更新する速度が遅くなる
- データベースの容量を使う
class AddIndexToテーブル名 < ActiveRecord::Migration
def change
add_index :テーブル名, :カラム名
end
end
複数のカラムに貼る場合は
add_index :テーブル名, [:カラム名, :カラム名]
複数のカラムに対してインデックスを貼った場合は、この2種を同時に用いた検索の時に処理が早くなる。言い換えると、カラム単独の検索を行ってもインデックスがないので早くない。
SequelPro
データベースを参照したり、編集したりできる Mac用フリーソフト。
SequelProではクエリにsql文を打っても文末の;を打つ必要はない。
コメント