####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.インデックス
テーブル内のデータ検索を高速化することができる。
デメリット:データを保存・更新する速度が遅くなる。データベースの容量を使う。
インデックスはカラムに対して設定する。
class AddIndexToテーブル名 < ActiveRecord::Migration
def change
add_index :テーブル名, :カラム名
end
end
####6.DBを作成する時のポイント
1:エンティティの洗い出し。
データの登録時に着目する。
2:リレーションを考える(ER図)