データベース

総論

キー

  • 主キー
  • 外部キー

制約

  • 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文を打っても文末の;を打つ必要はない。

SQL
スポンサーリンク
Once and Only

コメント