1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【超基礎】データベース設計について①

Last updated at Posted at 2021-04-11

実務でデータベース設計に関わる機会があったため、個人的な忘備録としてのまとめです。

データベース設計の基礎について何回かでまとめていけたらと思ってます。
わかりにくい部分などあるかと思いますが、何卒大目に見て頂ければ幸いです。

学習した教材

データベースとは

__データを入れておく箱__みたいなものです。

もう少し詳細に説明すると、データベースには大きく2つの役割があります。

1. データの保存
2. データの使用

です。データベースは、

大量の情報を保存することができる →__(データの保存)__
保存された情報に効率よくアクセスできる仕組みがある → (データの使用)

といった役割があります。

ECサイトやSNSなど、
データを扱うWebサービスの裏側には、ほとんどの場合データベースが存在しています。

データベースの種類

データベースは下記のような種類があります。

  • リレーショナルデータベース(RDB)
  • グラフ型データベース
  • キー・バリュー型データストア
  • ドキュメント指向データベース

一般的にデータベースと言われているものは、
大抵の場合__リレーショナルデータベース(RDB)__を指していることが多いです。

なぜデータベースに効率よくアクセスできるのか?

保存された情報に効率よくアクセスできる仕組みがある

と記載しましたが、
「なぜ効率よくアクセスできるのか?」というと、

__データベースマネジメントシステム(DBMS)__があるからです。

リレーショナルデータベース(RDB)の場合は、

リレーショナルデータベースマネジメントシステム(RDBMS)

と呼ばれるものになり、図で表すと下記のような感じです。

image.png

私たちがデータベースへアクセスする際は、

  1. RDBMSへSQLを発行する
  2. RDBMSがRDBへアクセスし、データの操作や取得を行う
  3. 操作の結果や取得したデータを、ビューとして表示する

といった仕組みになっています。

代表的なRDBMSとして、

  • Oracle
  • MySQL
  • PostgreSQL
  • SQL Server
  • SQL Lite

などがあります。

データベース設計とは

では、データベース設計とはなにか?

WEBサービスやシステム開発のひとつのプロセスで、

データベースに保持するデータに関する設計

を行うことです。そのまんまですね。

データベース設計は、

__システムの拡張性やパフォーマンスに影響が大きいため、開発において極めて重要なプロセス__です。

WEBサービスやシステム開発のプロセスは以下のような流れになっており、

  1. 要件定義(何を作るか)
  2. 設計(どう作るか)
  3. 開発(実装)
  4. テスト(期待通りに動くか)

データベース設計は「2. 設計(どう作るか)」に該当します。
参考までに設計のプロセスの中にも以下のようなものがあります。

  • データベース設計(データを保持について考える)
  • アプリケーション設計(提供機能を決める)
  • インターフェース設計(使用画面などを決める)

    など

またDBの種類ごとに、DB設計のやり方は異なりますが、
この記事では、主に__リレーショナルデータベース(RDB)__の設計について記載しています。

  • リレーショナルデータベース(RDB)
  • グラフ型データベース
  • キー・バリュー型データストア
  • ドキュメント指向データベース

3層スキーマ

データベース設計を行う上で、__3層スキーマ__についても理解しておく必要があります。

スキーマとは、「構造」や「枠組み」といった意味です。わかりづらいですね。

データベースは、

  1. 外部スキーマ(ユーザーから見たデータベース、ビュー)
  2. 概念スキーマ(開発者から見たデータベース、テーブル)
  3. 内部スキーマ(DBMSから見たデータベース、データの物理的配置)

の3層のスキーマから構成されています。
3層のスキーマのイメージは下記のような感じです。

image.png

ここで押させておきたいのは、
__外部スキーマと内部スキーマが直接関連していない__ということです。

外部スキーマと概念スキーマ

より理解を深めるために、外部スキーマと概念スキーマを関連性について考えてみます。
SQL(SELECT文)によってテーブルからビューを取り出すことができます。
image.png

概念スキーマと内部スキーマ

次に概念スキーマと内部スキーマの関連性について考えてみます。
image.png
データファイルを__テーブル__という人間が扱いやすい形に変換しています。

データベースにアクセスする際は内部スキーマのデータから情報を取得する必要があります。
その際内部では、

概念スキーマと内部スキーマ__の関連性においては、
→ データファイルに入っているデータを人間が扱いやすい形
(テーブル)__に変換

__外部スキーマと概念スキーマ__関連性においては、
→ 変換されたテーブルからSQLによってデータを取得

といったことが内部で行われているということですね。
なんとなく理解できたようで、理解できてない感じがしてますが笑

今回の記事では一旦ここまでです。

また別の記事で、

  • 論理設計と物理設計
  • 3層スキーマとデータ独立性

などについてまとめていきたいなーと思います。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?