yujiroのプログラミング

勉強内容をアウトプットし、サボらないようにする為のブログ

<DAY81>データーベースの構築と関連するメソッドまとめ

\ Follow me!! /

f:id:yujiro0320:20190415152250p:plain

学習状況

●学習日数 81日 

●学習時間(本日) 9時間

●累計学習時間 283.0時間

●一日あたりの平均学習時間 3.49時間 

RDBについて

リレーショナルデーターベースと呼ぶ。 学習しているデーターベースの型である。(カラム、レコードの形) 特徴は、テーブル同士を結合する事で、複雑なデーターが構築できる点。 他には階層型、ネットワーク型と形が異なるデーターベースの設計がある。

DDLとDLM

何をさしているのか把握した。 どちらもSQLの言語の総称である。 DDLがテーブル作成、削除などを指示する言語。 DLMがテーブルにあるカラムやレコードに対して指示する言語。

Railsのモデル操作との関係

DDL CREATE rale:db migrateコマンド

ALTER add_column,drop_table

DROP drop_column、drop_table

●DLM

INSERT :saveメソッド、createメソッド等

UPDATE :updateメソッドやupdate_allメソッド等

DELETE :destroyメソッド等(http://railsdoc.com/references/destroy)

SELECT :whereメソッド、findメソッド等(https://railsguides.jp/active_record_querying.html

SQLの各種メソッド

SQLは書ける必要はないと考える。ただ、読める必要はある。 読む際に、重要ななのが実行順序と、メソッドが何をしているのかを把握する事。

f:id:yujiro0320:20190511172712p:plain

制約について

railsではマイグレーションファイルにて、記載を追加する事で可能となる。

データがないと弾かれる。NOT NULL制約

 def change
    create_table :users do |t|
      t.string :name, null: false
    end

一意制約 重複するデータを禁止する制約。

def change
    add_index :users, :email, unique: true
  end

外部キー制約。 関連する外部キーがないと弾かれる。

def change
    create_table :scores do |t|
      t.references :user, foreign_key: true
    end

インデックスとは

指定したカラムテーブル内のデータ検索を高速化すること。 データーのやり取りが増えるため、やりすぎは禁物。よく検索されるデーターに対して貼り付けよう。

●一つのカラムに対して設定

def change
    add_index :scores,  :name
  end

●複数のカラムに対して設定

 def change
    add_index :users,  [:name, :email]
  end

この方法でインデックスを貼るとき、emailカラム単体で検索する場合には検索速度は向上しないので注意。

正規化とは

データーベースの構造を整理し、シンプルかつ無駄のない構造にする。
まず、テーブル内で繰り返されるカラムをなくす。
属性ごとに分ける。