0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

制約の種類について

Posted at

#制約の種類について

制約とは特定のデータの保存を許さないためのバリデーションの事。例えば同じメールアドレスのユーザーを登録できないようにする、名前のデータが空のユーザーを保存できないようにするといったことができるようになる。このように安全なデータ保存が実現する。主に下記の4つがある。

  • NOT NULL制約
  • 一意性制約
  • 主キー制約
  • 外部キー制約

NOT NULL制約

NOT NULL制約はテーブルの属性値にNULL(空の値)が入ることを許さない制約。例えば、usersテーブルのnameというカラムにNOT NULL制約を設定すると、nameが空(nil)レコードは保存できなくなる。

_create_users.rb
create_table :users do |t|
      t.string :name, null: false
      t.timestamps null: false
    end

##一意性制約
一意性制約はカラムに設定する制約。一意性とはユニークで他とは違うという意味です。一意性制約を設定したカラムには同じ値を設定できなくなる。例えばAさんのemailが「test@gmail.com」だった場合、他にemailが「test@gmail.com」のレコードを保存できなくなる。

_add_email_to_users.rb
 def change
    add_column :users, :email, :string
    add_index :users, :email, unique: true
  end

##主キー制約
主キー制約は、主キーである属性値が必ず存在してかつ重複していないことを保証する制約。主キーに対してNOT NULL制約と一意性制約を両方設定するのと同義になる。Railsでテーブルを作成する際、主キー制約は元々実装されていて、Railsでは主キーはidカラムとして自動で作成されます。つまりidカラムの値は重複しないようにできている。

##外部キー制約
外部キー制約とは、外部キーに対応するレコードが必ず存在することを保証する制約。例えばstudent_idが3のレコードを保存するためにはstudentsテーブルにidが3のレコードが存在していなくてはいけない。

_create_scores.rb
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

foreign_key: trueとすることで外部キー制約を設定。

以上。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?