学習効率を上げるためのバックエンドのデータベース基礎知識

データベース

バックエンドにおいて、データベース操作はかかせませんが、
データベースを学習する上で最初に知っておくと学習効率が上がる基礎知識を紹介します。

テーブル設計は重要

テーブル設定がぐちゃぐちゃだと必ずプログラムもぐちゃぐちゃになります。
テーブル設定の仕方、基本的な考え方をまずは学習しましょう。

データベース(DB)の基本

RDBMS(MySQLなど)

RDBMS(Relational Database Management System)は、テーブルごとにデータを分けて
保存・管理するデータベースシステムのことです。
在庫管理するデータベースであれば、
店舗のテーブル、都道府県などの場所のテーブル、在庫のテーブル、商品のテーブルなど分けて管理することができます。
具体的にはMySQL、OracleDB、PostgreSQLなどがRDBMSです。
とてもよく使うデータベースなので、今回こちらのデータベース管理システムであるMySQLに絞って紹介します。

MySQLの構成

MySQLの中にデータベースという箱を用意します。
データベースの中に、テーブルという箱を入れていくといったイメージです。
テーブルというのは、エクセルのようなものを想像するといいです。
テーブルはエンティティとも呼ばれます。

テーブルの横一列のことを、行、またはレコードと呼びます。
テーブルの縦一列のことを、属性、またはカラムと呼びます。
個々の値は、値、またはフィールドと呼びます。

主キーについて(PK: primary key)

データベースでは、必ずレコードごとに識別できなければなりません。
重複したデータが登録されるのを防ぐため、レコードを一意に特定することができる主キーというものを設定します。

主キーは、たとえば商品IDなど、潜在的に必ず被ることのないIDを付与して、一意にレコードを特定できるようにします。
主キーは、

  • 重複しない
  • 変更しない

という特徴があります。
Primary KeyなのでPKと書かれたりもします。

複合(主)キーについて

テーブルを複数作成して、複数の属性でレコードを一意に特定することができます。
それを複合(主)キーといいます。

外部キーについて(FK: foreign key)

外部キーは、他のテーブルと結合するために使用するキーのことです。
foreign keyとも呼ばれます。

主キー、複合(主)キー、外部キーの作成方法は、【MySQL】SQLの書き方まとめを参考にしてみてください。

正規化

効率的なテーブル設計の基本的な手法が正規化です。
正規化については、Web開発者が知っておくべきテーブル設計の正規化手順を参考にしてみてください。

ER図

テーブルを可視化するための記法でER図があります。
ER図については、ER図とIE記法の書き方を参考にしてみてください。

SQLステートメント

SQLは、データベースを操作するために使用する言語です。
SQLステートメントとはといった基礎知識については、SQLステートメント(クエリ)やSQLの種類などの基礎知識を参考にしてみてください。
SQLのテーブル定義に関しては、SQLのデータ定義(DDL)の書き方まとめを参考にしてみてください。
SQLのデータ操作に関しては、SQLのデータ操作(DML)の書き方まとめを参考にしてみてください。

実践的なテーブル構成方法

実践的なテーブル構成方法については、データベース作成のときの実践的なテーブル構成方法を参考にしてみてください。

トランザクションとACID特性

トランザクション(transaction)とは、一連のSQL処理のまとまりのことです。
ACID特性とは、トランザクション処理で担保される要素の頭文字です。
トランザクションとACID特性の詳しい説明は、【MySQL】トランザクションとACID特性を参考にしてみてください。

【MySQL】ロックとデッドロック

ロックとは、データを更新する前に行やテーブルを他のセッションから更新されないようにすることです。
デッドロックは、複数セッションがそれぞれロック解除待ちをしてしまって処理が完了しない状態です。
ロックとデッドロックの詳しい説明は、ロックとデッドロックを参考にしてみてください。

truncateとdeleteの違い

truncateは、テーブルの切り捨てを意味しますが、しばしばdeleteと混同されます。
truncateとdeleteの違いについては、truncateとdeleteの違いを参考にしてみてください。

システム変数とユーザー定義変数

システム変数とは、データベース上で設定されている設定値のことです。
ユーザー定義変数とは、ユーザー定義したシステム変数です。
システム変数とユーザー定義変数の詳しい説明は、システム変数とユーザー定義変数を参考にしてみてください。

TIMESTAMPとDATETIMEの違い

TIMESTAMPとDATETIMEは、どちらも日時を扱うデータ型です。
TIMESTAMPとDATETIMEの違いについては、TIMESTAMPとDATETIMEの違いを参考にしてみてください。

ユーザーと権限の付与方法

ユーザーの確認、作成方法、権限の付与方法の詳しい説明は、ユーザーの確認、作成方法、権限の付与方法を参考にしてみてください。

CHARSET:文字コードの意味・使い分け

CHARSET:文字コードの意味・使い分けは、CHARSET:文字コードの意味・使い分け(utf8, utf8mb4)を参考にしてみてください。

COLLATION(照合順序)

COLLATION(照合順序)は文字列をどのように比較するかに影響します。
COLLATION(照合順序)の詳しい説明は、COLLATION(照合順序)の意味を参考にしてみてください。