実務でデータベース設計に関わる機会があったため、個人的な忘備録としてのまとめです。
データベース設計の基礎について何回かでまとめていけたらと思ってます。
わかりにくい部分などあるかと思いますが、何卒大目に見て頂ければ幸いです。
学習した教材
データベースとは
__データを入れておく箱__みたいなものです。
もう少し詳細に説明すると、データベースには大きく2つの役割があります。
1. データの保存
2. データの使用
です。データベースは、
大量の情報を保存することができる →__(データの保存)__
保存された情報に効率よくアクセスできる仕組みがある → (データの使用)
といった役割があります。
ECサイトやSNSなど、
データを扱うWebサービスの裏側には、ほとんどの場合データベースが存在しています。
データベースの種類
データベースは下記のような種類があります。
- リレーショナルデータベース(RDB)
- グラフ型データベース
- キー・バリュー型データストア
- ドキュメント指向データベース
一般的にデータベースと言われているものは、
大抵の場合__リレーショナルデータベース(RDB)__を指していることが多いです。
なぜデータベースに効率よくアクセスできるのか?
保存された情報に効率よくアクセスできる仕組みがある
と記載しましたが、
「なぜ効率よくアクセスできるのか?」というと、
__データベースマネジメントシステム(DBMS)__があるからです。
リレーショナルデータベース(RDB)の場合は、
リレーショナルデータベースマネジメントシステム(RDBMS)
と呼ばれるものになり、図で表すと下記のような感じです。
私たちがデータベースへアクセスする際は、
- RDBMSへSQLを発行する
- RDBMSがRDBへアクセスし、データの操作や取得を行う
- 操作の結果や取得したデータを、ビューとして表示する
といった仕組みになっています。
代表的なRDBMSとして、
- Oracle
- MySQL
- PostgreSQL
- SQL Server
- SQL Lite
などがあります。
データベース設計とは
では、データベース設計とはなにか?
WEBサービスやシステム開発のひとつのプロセスで、
データベースに保持するデータに関する設計
を行うことです。そのまんまですね。
データベース設計は、
__システムの拡張性やパフォーマンスに影響が大きいため、開発において極めて重要なプロセス__です。
WEBサービスやシステム開発のプロセスは以下のような流れになっており、
- 要件定義(何を作るか)
- 設計(どう作るか)
- 開発(実装)
- テスト(期待通りに動くか)
データベース設計は「2. 設計(どう作るか)」に該当します。
参考までに設計のプロセスの中にも以下のようなものがあります。
- データベース設計(データを保持について考える)
- アプリケーション設計(提供機能を決める)
- インターフェース設計(使用画面などを決める)
など
またDBの種類ごとに、DB設計のやり方は異なりますが、
この記事では、主に__リレーショナルデータベース(RDB)__の設計について記載しています。
- リレーショナルデータベース(RDB)
- グラフ型データベース
- キー・バリュー型データストア
- ドキュメント指向データベース
3層スキーマ
データベース設計を行う上で、__3層スキーマ__についても理解しておく必要があります。
スキーマとは、「構造」や「枠組み」といった意味です。わかりづらいですね。
データベースは、
- 外部スキーマ(ユーザーから見たデータベース、ビュー)
- 概念スキーマ(開発者から見たデータベース、テーブル)
- 内部スキーマ(DBMSから見たデータベース、データの物理的配置)
の3層のスキーマから構成されています。
3層のスキーマのイメージは下記のような感じです。
ここで押させておきたいのは、
__外部スキーマと内部スキーマが直接関連していない__ということです。
外部スキーマと概念スキーマ
より理解を深めるために、外部スキーマと概念スキーマを関連性について考えてみます。
SQL(SELECT文)によってテーブルからビューを取り出すことができます。
概念スキーマと内部スキーマ
次に概念スキーマと内部スキーマの関連性について考えてみます。
データファイルを__テーブル__という人間が扱いやすい形に変換しています。
データベースにアクセスする際は内部スキーマのデータから情報を取得する必要があります。
その際内部では、
概念スキーマと内部スキーマ__の関連性においては、
→ データファイルに入っているデータを人間が扱いやすい形(テーブル)__に変換
__外部スキーマと概念スキーマ__関連性においては、
→ 変換されたテーブルからSQLによってデータを取得
といったことが内部で行われているということですね。
なんとなく理解できたようで、理解できてない感じがしてますが笑
今回の記事では一旦ここまでです。
また別の記事で、
- 論理設計と物理設計
- 3層スキーマとデータ独立性
などについてまとめていきたいなーと思います。