ルイス森田の備忘録

このブログはアウトプットが死ぬほど苦手な森田の強制&矯正装置としてゆるっとはじまったブログです。

勉強メモーDB関連

 

データベースを構成する要素

・サービスで扱う概念(エンティティ)

・エンティティの属性

・エンティティ同士の関係性(リレーション)

 

概念(エンティティ)

→ユーザーやツイートなど

 

属性

→エンティティが個別にもつ情報

→投稿日、いいね数、投稿日時など

 

関係性(リレーション)

→エンティティとエンティティの間にある関係性

 

データベース設計の手順

1、データベースで管理するデータ(エンティティ)を決定

2、それぞれのデータの持つ属性を決める

3、エンティティ同士の関係性を決める

4、データベースのテーブルとして定義する

 

—————————————

 

テーブルのルール

・行(レコード)はエンティティの具体的なデータ

・列(カラム)はエンティティの属性

 

id

name

mail

1

森田

test@gmail.com

 

属性の中には特殊データがある

=>キー

=>同じテーブルのレコード同士を識別するためのデータ

=>例)id

=>キーは絶対被らないユニークなもの

 

主キー

他のレコードとの区別をつける識別子となるカラム

=>ユニークでなければならない

 

外部キー

異なるテーブルのレコードと関係性を持つ場合に必要なカラム

 

例)以下の場合は「student_id」が外部キーとなる

id

name

mail

2

森田

test@gmail.com

 

id

score

student_id

1

森田

2

 

 

制約

特定のデータの保存を許さないためのバリデーション
例)同じメアド、空のまま登録不可

 

制約の種類/全部で4つ

・NOT NULL制約

・一意性制約

・主キー制約

・外部キー制約

 

NOT NULL制約

空登録を許さない制約

 

一意性制約

同じ値を登録できない制約

一意性=ユニークで他とは違う

 

主キー制約

=NOT NULL制約 + 一意性制約

主キー必須+重複不可を保証するための制約

Railsでは主キーはidカラムとして自動で作成される

 

外部キー制約

外部キーに対応するレコードが必ず存在することを保証する制約

 

インデックス

データベース機能の1つ

データ検索を高速化する

カラムに対して設定することができ、接待したカラムでの検索が高速になる

 

インデックスのデメリット

・データを保存/更新する速度が遅くなる

・データベースの容量を使う

 

1つに対して/複数カラムに対してインデックスできる

 

—————————————

正規化

データ構造をより効率的で重複や無駄の無いシンプルな構造にするための手順

非正規形→第一正規形→第二正規形→第三正規形

 

第一正規形

同一のカラムが存在しない かつ レコード1つに値が1つ入る

id

store

movie_title

movie_mobilization

1

渋谷

君の名は

1,000

2

渋谷

ファンタスティック・ビースト

1,500

3

新宿

ラ・ラ・ランド

1,200

4

新宿

イット

500

5

渋谷

ドラえもん

800

6

渋谷

レ・ミゼラブル

1,300

 

第三正規形(第二は紛らわしいので割愛)

主キーでないもの同士の依存がない状態

 

★映画館の場所属性

id

name

1

渋谷

2

新宿

 

★動員+公開映画の属性

id

number

title

store_id

1

1,000

君の名は

1

2

1,500

ファンタスティック・ビースト

1

3

1,200

ラ・ラ・ランド

2

4

500

イット

2

5

800

ドラえもん

1

6

1,300

レ・ミゼラブル

1

 

正規化のデメリット

手順を進めるほどパフォーマンスが低下する

→第三で終えることが多い

—————————————