tusbasaのブログ

業務や勉強中に調べたことを自分用にメモするブログ

2021-06-01から1ヶ月間の記事一覧

【rails】serviceクラス

複数のクラスにまたがる一連の手続きを定義する。 app以下にserviceディレクトリを作りファイルを置く。

【DB】トリガーについて

特定のテーブルに対する操作(挿入・更新・削除)を契機として、あらかじめ定義された処理を自動的に実行する機能のこと。 トリガーの基本的な目的は複数テーブル間のデータ整合性を確保することにある。 DB側にもロジックを持たせることになるので保守性、…

【rspec】factory has_manyが2重にある複雑なassociation付きのデータを用意する

参考 https://n350071.com/factorybot-trait-has_many-has_many/

【DB設計】EVA エンティティ・アトリビュート・バリュー

複数の目的に利用されるカラム は作るべきではない。 属性名、値のようなカラム を作り属性名にさまざまな種類の項目が入る場合、制約やデータ型を正しく設定できない。

【DB設計】値の一部に意味を持たせてはいけない

カラム の値には複数の意味を持たせてはいけない。 例えば、idカラム には一意を識別するための意味しか持たせてはいけない。 会員テーブルのidカラムに会員の種類を識別するような意味を持たせてはいけない。

【JQuery】dataメソッドとattrメソッドの違い

attrの場合はdata-target属性の値が#modal_other_group_duplicate_deleteに変更されるのに対して、propの場合は変更されない。 propはキャッシュに対して操作が行われる為か属性の値が変更されなかった。 $("#delete_button").attr('data-target', '#modal_o…

【DB設計】フラグについて

delete_flagの欠点 SQLの複雑度が増す(検索時にwhere delete_flagを入れる為) 複合インデックスを使用しなければならなくなる。(検索時にwhere delete_flagを入れる為) UNIQUE制約が使えなくなる。 カーディナリティが低くなる。

【SQL 】TRUNCATE 削除

テーブル内のデータを全て削除する。 テーブルを一旦削除してから再構築するのでdeleteでデータを全て削除するより高速。 TRUNCATE TABLE (表名); 参考 https://www.earthlink.co.jp/engineerblog/intra-mart-engineerblog/2680/

【rspec】factorybot createメソッドの引数の順番

traitを指定する際はfactoryで定義したモデル名の次(第二引数)に渡す。 create(:customer, :with_master, user_id: user.id) 以下のように順番を入れ替えるとエラーになる。 create(:customer, user_id: user.id, :with_master)

【SQL】結合で不等号を使う

inner join の際、結合条件をandで指定できる。 ここで不等号を使うことができる。 その日までの集計を日毎に行う場合などに使える。 参考 https://gotto50105010.hatenablog.com/entry/2019/02/17/140404

【DBMS】木構造モデル

組織図のような入れ子構造をDBで表現する際には入れ子集合モデルが有効。 一つのレコードに左端と右端のカラムを持たせて親レコードの左端と右端の値の中に子レコードの左端と右端の値が入るようにすればこれを表現できる。 データの更新の際に関しては、左…

【DBMS】マテリアライズドビュー

SQLの結果をテーブルとして保持する仕組み。 マテリアライズドビューを利用すると、データベースでSELECTした結果をテーブルとして保持できるため、複雑な集計処理の高速化やデータ整合性の確保を簡単に実現しつつ、SELECT処理を効率的に行うことができる。 …

【Mysql】インデックス再構築

InnoDBの場合、基本的には前回インデックスが更新が行われてから以下の条件で自動的にインデックスの最適化が行われます。 テーブル行数全体の 1/16 が更新される 20億行以上更新される ですので通常はコマンドを実行する必要はありません。 optimize table …

【DBMS】統計情報

オプティマイザは統計情報をもとにアクセスパスを決定している。 この統計情報はデータが更新される度に少しずつ変化していく。 そのため定期的に統計情報を更新しなければならない。 これはDBMSがデフォルトで勝手に実行しているが手動でいつ行うかを決める…