LoginSignup
2
2

More than 3 years have passed since last update.

DB設計のための基礎

Last updated at Posted at 2020-05-03

1.DBを構成する要素は3つ

  • エンティティ(管理する必要のある情報)...テーブルに相当
  • エンティティの属性(エンティティが個別に持つ情報)...カラムに相当
  • エンティティ同士のリレーション(関係性)

Tweetアプリで考えると、、、
ユーザーやツイートといったエンティティがある。
ツイートのエンティティには、本文やいいね数などのエンティティの属性がある。
また、ツイートは誰のものかわかるようにユーザーとリレーションがされている。

2.テーブルの構成要素

レコード(エンティティの具体的なデータ)とカラム(エンティティの属性)で構成。

3.主キーと外部キー

レコードを識別するため、カラムの中にはキーと呼ばれる特殊なデータが存在する。
主キー:基本的にidカラム
外部キー:リレーションに必要なカラム(user_idなど)

4.制約

制約とは特定のデータの保存を許さないためのバリデーション。主に4つ。
マイグレーションファイルでカラムを追加するときに記述する。
①「NOT NULL制約」:空を防ぐ

②「一意性制約」:重複を防ぐ

③「主キー制約」:主キーである属性値が必ず存在してかつ重複していないことを保証する

④「外部キー制約」:外部キーの対応するレコードが必ず存在しなくてはいけない

t.references :user, foreign_key: true

外部キーとなるカラムを追加するときにforeign_key: trueと記述することで外部キー制約を設定。
マイグレーションを実行すると、"user_id"カラムが作られる。

5.インデックス

テーブル内のデータ検索を高速化することができる。
デメリット:データを保存・更新する速度が遅くなる。データベースの容量を使う。

インデックスはカラムに対して設定する。

migrationファイル.rb
class AddIndexToテーブル名 < ActiveRecord::Migration
  def change
    add_index :テーブル名, :カラム名
  end
end

6.DBを作成する時のポイント

1:エンティティの洗い出し。
 データの登録時に着目する。
2:リレーションを考える(ER図)
 

2
2
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
2
2