はじめに
自分が今まで現場で必要だったデータベースの基礎知識をまとめました。
例えばこのあたりです。
テーブル設計の基礎と正規化
トランザクションとACID特性
コミットメントとロック
実行計画をみてSQLチューニング
現場で働くSEやプログラマーの方が僕と同じように
データベース周りの対応をする際、
参考になればと思います!!
この記事を書いている僕の8年間の職歴についてはプロフィールにまとめているので、
興味のある方はそちらを参照ください!!
ちなみに、
僕はデータベーススペシャリストの資格を持っているのと、
現場では8年間データベースを触っているので
この記事はある程度信頼して頂いて問題ないかと思います。
現場で役立つデータベースの基礎|データベーススペシャリストの問題でもよく出るやつ
まず、データベーススペシャリストの試験でも出題される
現場でデータベースの基礎について紹介していきます。
テーブル設計の基本である正規化について
正規化はテーブル設計をする際の基本です。
正規化を学ぶ前に、関数従属性や候補キーなどのいろんなキーの概念を
先に押さえておくのがオススメです!!
まずは、こちらの記事を参照ください。
主キー、候補キー、外部キー、スーパーキーなどのいろんなキーについて|データベースの基礎
ここまで理解できたら正規化について
こちらの記事を参考に学習〜正規化の練習をしてみて下さい!!
データベースの正規化の目的とは??|非正規形〜第3正規形の正規化のやり方
データベースの正規化の練習|データベーススペシャリスト過去問を解きながら練習方法解説
正規化が不十分な場合に発生する
更新時異常についても抑えておきましょう!!
こちらの記事を参考にしてください。
テーブルの正規化が不十分な場合に発生する更新時異状の具体的なパターンと対策|データベース基礎
ここまで一通り理解できれば、
テーブル設計をする際の基本である正規化についてはバッチリです!!
トランザクションとACID特性について!!おまけにコミットメントとロックの制御
テーブルを更新する際に1トランザクションでどこまでセットで更新すべきか??
とか、
1トランザクションの途中で失敗したら更新をなかったことにする。
とか、
同時にテーブル更新をしたりテーブル更新中に検索をさらたら??
などなど考慮する必要があります。
まずは
トランザクションとACID特性について
こちらの記事を参考に内容を抑えましょう!!
ACID特性について理解できたら、
次はコミットメントによる制御と
ロックによる排他制御について抑えましょう!!
データベースの基礎【トランザクション管理機能(コミットメント制御)】
共有ロック、占有ロック、デッドロック|データベースの排他制御
この辺りが考慮できずに、
デッドロックやデータが中途半端に更新されるといった
大惨事になった現場をいくつかみたことがあります。
気をつけてください。。。
インデックスやパーティション化とSQLチューニングについて
SQLの基礎とSQLでテーブルのデータを取得する練習
まず、SQLの基礎については、
この本がオススメです(僕はこの本と資格勉強で基礎を学びました)。
この本で、SQLの基礎を抑えましょう!!
SQLの基礎を学んだら、
次は実際にSQLを実行する練習をしましょう!!
こちらの記事を参考にローカル環境でデータベースを立ち上げて、
SQLを投げてみてください。
DBeaverの使い方を解説!!postgreSQLに繋いでSQLを投げたりER図を見たり
(そのうちもう少しSQLの練習のいいお題を考えておきます・・・)
大量データが入ったテーブルにはインデックスを貼って高速に検索できるように
現場では数百万、数億といったデータ量を扱うことがあります。
高速に検索をかけるためにテーブルに対してインデックスを張ります。
インデックスについては、
こちらの記事を参考に内容を抑えてください!!
データベースのインデックスの種類と内部の仕組み|SQL Serverで数億規模のデータ量を扱ってみて
SQL実行時の物理的なオペレーションを実行計画で確認して遅いSQLをチューニングする
SQLを実行した時にどのインデックスを利用していて、
物理的にどういうオペレーションをしているところがスロークエリの原因か??
といったことを調べてSQLをチューニングしていくことがあります。
実行計画の見方と、SQLチューニングの例については
こちらの記事に詳細をまとめています。
SSMSでSQL Serverの実行計画を見てSQLチューニング|ポイントに絞って解説
ここからはおまけですが(ここまで現場でやるところはそこまでないかも)、
テーブルをパーティショニング化することで
1つの大きなテーブルを複数に区切って取り扱うことができます。
パーティショニングテーブルの詳細をこちらにまとめているので、
興味のある方は参考にしてみてください。

と、ここまでが僕の8年間のSE・プログラマーの経験で
現場で必要となったデータベース周りの知識です。
現場で同じように、
データベース周りの対応をされる方の参考になれば幸いです。