4
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.

データベース設計 README 制約 編

Last updated at Posted at 2021-02-10

制約とは?

制約はDBにおいて、保存するデータに制限をかけるために
カラムに設定できるもののこと。
バリデーションに似ている、DBに直接設定しているため
後になって変更すると、手間がかなりかかるっぽい、、、

そのため、設計の際にしっかり考えて置く必要がある

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

の順に紹介

NOT NULL制約

データ保存の際に、空の状態で保存できないようにするための制約。
難しく言うと、テーブルの属性値にNULL(空の値)が入らないように制限する制約。
記述例

READMEファイル

| Column             | Type       | Options                        |
| ------------------ | ---------- | ------------------------------ |
| user               | references | null: false, foreign_key: true |
| name               | string     | null: false                    |
| info               | text       | null: false                    |

一意性制約/UNIQUE制約

テーブル内に、同じ情報のレコードの保存を制限するための制約。
emailアドレスやユーザー名など、被らせないように実装したいときに使う
__unique: true__と記述する。

主キー制約

notnull制約と一意性制約の合体のような制約。
空の状態、かつ重複しない情報のみを保存できる。
railsでは、idカラムに元々設定されているため、
あんまり使うことないのかなって感じ、、、まあそのうち使いそう(笑)

外部キー制約

外部キーの対応するデータが必ず存在しなくてはいけないという制約。
外部のテーブルを紐付けたいときに、references型と一緒に使うことが多いのかな。
マイグレーションファイルには
t.references :user, foreign_key: true
のように記述する。
このように記述すると勝手にカラム名はuser_idになる。

マイグレーションファイル記述例

マイグレーションファイル
class CreateMessages < ActiveRecord::Migration[6.0]
  def change
    create_table :messages do |t|
      t.string :content
      t.references :room, foreign_key: true
      t.references :user, foreign_key: true
      t.timestamps
    end
  end
end
4
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
4
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?