##1.データベース設計
作成するサービスやシステムに必要な情報をどのようにDBで管理するかを決める
DB設計をしっかり行うことで、サービスが複雑になった場合でもより効率的かつ簡易的にデータの操作を行うことができる
DB設計を行うことで、データ同士の関係性を明確にするだけでなく効率の良いデータ操作を可能にする
##2.DBを構成する要素
①サービスで扱う概念(エンティティ)
②エンティティの属性
③エンティティ同士の関係性(リレーション)
##3.エンティティ
サービスの中で管理する必要のある概念(情報)のこと
基本的にエンティティ = テーブルであると考える
##4.リレーション
エンティティとエンティティとの間に存在する関係性のこと
##5.DB設計の手順
①DBで管理するデータ(エンティティ)を決める
②それぞれのデータの持つ属性を決める
③エンティティ同士の関係性を決める(リレーション)
④データを実際にDBのテーブルとして定義
##6.キー
テーブルにおけるキーとはレコードを識別するための特別なカラム
キーは識別子であるので同じテーブル内の他のレコードとは絶対に被らないように設定
##7.主キー(primary_key)
テーブルの中で他のレコードとの区別をつける識別子となるカラム
同じ主キーの値を持つレコードがテーブル内に存在してはいけない
##8.外部キー(foreign_key)
関連する他のテーブルのレコードの主キーを値として持つカラム
他のテーブルのレコードとの関係性を表す
##9.NOT NULL制約(null: false)
テーブルの属性値にNULL(空の値)が入ることを許せない制約
##10.一意性制約(unique: true)
テーブル内で重複するデータを禁止する制約
##11.主キー制約
主キーである属性値が必ず存在してかつ重複していることを保証する制約
主キーに対してNOT NULL制約と一意性制約を両方設定するのと同義になる
##12.外部キー制約(foreign_key: true)
外部キーの対応するレコードが必ず存在しなくてはいけないという制約
##13.インデックス(add_index)
テーブル内のデータ検索を高速にするための仕組み
カラムに対して設定
カラムに設定するとそのカラムで検索をした場合に検索速度が向上
add_index :テーブル名, :カラム名
##14.インデックスのデメリット
①データを保存、更新する速度が遅くなる
②DBの容量を使う
##15.正規化
DBのデータ機能をより効率的で重複や無駄のないシンプルな構造にする
非正規形 → 正規形(第一、 第二、 第三)
##16.多対多
モデルが互いに複数の関連を持つこと
##17.README
マークダウンで記述され、ソフトウェアの仕様、規格、インストール方法などを文章化したもの
##18.マークダウン
文章を記述するための軽量マークアップ言語の一つ
マークダウンで記述されたものは、HTMLに変換される
## membersテーブル
|Column|Type|Options|
|------|----|-------|
|user_id|integer|null: false, foreign_key: true|
|group_id|integer|null: false, foreign_key: true|
### Association
- belongs_to :group
- belongs_to :user