中堅SEの技術メモ

検索して出会ったサイトのリンク集です。

データベース

【ゴール】

 ・データベース(RDB)の役割、設計ポイントを押さえる

 

[DBMS]
○データベース,DBMS とは何か?
https://pyteyon.hatenablog.com/entry/2019/09/05/193000

○【DB概論】データベースシステムに求められる要件
https://atmarkit.itmedia.co.jp/ait/articles/1105/30/news130.html
DBMSとは決められた役割(複数ユーザーからの共有利用、一元管理、信頼性(耐障害性、高度なセキュリティ)、性能(処理速度))を満たし、SQL(データベース言語)を用いてデータ管理ができるシステムのことをさす。

 

[データベースシステムの運用・保守]
○データベースシステムの監視 ~監視の概要~
https://www.fujitsu.com/jp/products/software/resources/feature-stories/postgres/article-index/monitoring-overview/
(1. データベースシステムの監視とは~3. データベースシステムの監視方法を参照)
→データベースの正常稼働を確認するための要素は「サーバーリソースの監視」、「DBMSの監視」

 

[データモデル]
○DB設計におけるデータモデル
https://rennnosukesann.hatenablog.com/entry/2018/02/10/203029

○3分でわかるデータマネジメント【データモデリング
https://jp.drinet.co.jp/blog/datamanagement/data_modeling_3minutes
→データモデリングとは、データに関する要件の明確化や、実装範囲の決定を目的に、データモデルを作成する。
 作成したデータモデルを可視化して、設計・開発フェーズに繋げていく。

 

[正規化]
〇正規化の要点を理解する
https://qiita.com/mochichoco/items/2904384b2856db2bf46c
→正規化のメリットは「重複を排除することでデータの不整合が起きるリスクを減らせること」。ただし、テーブル分割を行うと、参照時のレスポンスが低下する。正規化は性能要件と天秤にかけて、テーブル設計を行う必要がある。

 

 

[SQLチューニング]

○今更SQL これでスッキリ!テーブル結合方式!~手続き型言語で表現してみた~
https://qiita.com/bubu_suke/items/1f393c624f00cbc0a4bc

→処理時間はデータベースがアクセスしたデータ数に比例する。抽出、結合、ソートを行う際は「最低限のデータに絞り込んでから実施」が鉄則。

〇適切なインデックスを張るために
https://qiita.com/kodai-saito/items/541e4fe46c2d3edc9634

→インデックスは「少ない情報で取得したいデータに最短の道のりでたどり着くための目次」と知るべし。

〇ORDER BYの仕組み
http://www.code-magagine.com/?p=14632

→インデックスはソート済みのデータなので、ソート処理をなくすこともできる。

SQLで高速化を考えた時にできるテクニック・コツをまとめて紹介!
https://style.potepan.com/articles/26070.html

SQLが重いときに見るお気軽チューニング方法
https://zenn.dev/seyama/articles/81f54a4ddedf11
→性能問題の大半はSQL、テーブル設計にある。SQL設計時に本番データ分布をイメージして、インデックス、SQL(時には、テーブル設計も見直す)を開発することがポイント

結合テストが終わってからのテーブル設計の見直しはコスト、リスクが共に高くなる。) 

 

まとめ

・データベースの役割は『データの保持(永続化)』、『データ整合性の担保』

・データベースの監視は、『サーバーリソース(CPU、メモリ、接続コネクション)』、『DBMSの監視』を行う

・データベースの性能は、『データモデル(テーブル設計)』、『本番データ分布を意識したSQL設計』で決まる