Yuki's Tech Blog

仕事で得た知見や勉強した技術を書きます。

【達人に学ぶDB設計 徹底指南書】第1章 データベースを制する者はシステムを制すをざっくりまとめてみた

目次

データベースとは何

データベースとは、データを電子的に保存し、データにアクセスできるような、データの組織的な集合体のことです。論理的概念です。 厳密に言わずにざっくり言うと、データベースとは、データを整合的に保持して(ズレや矛盾がない、前後が揃っている)、いつでも利用可能な状態にするためのシステムです。

データベースは何のために使われる

データベースは永久に保存したいデータを保持するために使います。ユーザーデータや商品データのみならず、購買データや行動履歴等も保持します。それらのデータを保持することで、各ユーザーに対応した画面を表示できたり、経営方針に役立てたり、ユーザーにより良いサービスを提供するための判断材料にすることもできます。 多くのシステムは「データ」を取り扱っているため、多くのシステムでは必然的にデータベースを使っています。

データベースとDBMSの違い

データベースは、データを整合的に保持して(ズレや矛盾がない、前後が揃っている)、いつでも利用可能な状態にするためのシステムです。 DBMSはデータベースを構築、管理、運用するためのソフトウェアです。 そのため、データベースを実現するためにはDBMSを利用する必要があります。 一般的にDBMSは、RDBMSのことを指しています。

主なDBMS

有料(ITベンダーが開発した)

無料(オープンソース)

データとは何

データとは、あるフォーマット(形式)に揃えられた事実のことです。 何かをデータ化しようと思ったら、何の属性が必要かをまずは考えます。そして、それらの属性の値を二次元表のフォーマットに従って並べます。そうすることでデータ化することができます。

データと情報の違い

データとは、あるフォーマットに揃えられた事実です。 情報とは、データを文脈や観点に従って集約や加工したものです。 ある年代の顧客の購買履歴のデータを持っているだけでは意味がなくて、それらのデータから、「頻繁に購入される商品」を特定したり、「次に売れる商品」を特定することができます。それらが情報です。

データベースは何を基準として種類が分類されているのか

データベースは、データを保持するフォーマットが基準となって分類されています。DBの種類が違うと、DBの設計手法なども異なります。例えば、RDBにおける重要な設計技法「正規化」はRDB以外では使いません。

主なDBの種類

個人的に代表的だと感じた2種類のDBについて、以下にまとめます。

種類 特徴 代表的なDBMS メリット デメリット
RDB データを二次元の表で管理 PostgreSQL, MySQL データの取り扱いが直感的で簡単 既存のテーブルにカラムを追加する場合、アプリケーションコードも変更する可能性があり、改修コストがかかる。
キーバリュー型ストア データをキー(識別キー)とValueの組み合わせだけの単純なデータ型で表現する Redis 保存領域にメモリを使うため、処理速度が速い(RDBの場合、保存領域に物理ディスクを使う) データの永続化機能があるとはいえ、基本的にはメモリ上にデータが保存されるため、揮発性がある。データの消失を許さないシステムではRedisは用いることはできない

キーバリュー型ストアのDBを構築、管理、運用するDBMSでは、Redisが有名です。

システム開発の工程について

システム開発はいくつかの工程に分類できます。

  1. 要件定義
    システムが満たすべき機能やサービスの水準(すなわち要件)を決める工程です。
  2. 設計
    定義された要件を満たすシステムを作るための設計を行う工程です。

  3. 開発(実装)
    設計書に従って、システムを実際に作る(実装する)工程です。開発と聞くとコードを書くと思いがちですが、 サーバーやネットワークの調達や構築といった作業も含まれています。

  4. テスト
    本番の負荷に耐えられるか、バグがないかをテストする工程です。

設計工程の種類

設計工程にも種類があります。

  • ソフトウェアの提供する機能を決めるアプリケーション(AP)設計
  • ユーザーが使用する画面などのユーザーインターフェース設計
  • 「データ設計」特に、データベースに保持するデータの設計(データベース設計)

システムにおいて、大半の永続的に使用されるデータは、DB内に保持されます。そのため、データ設計とデータベース設計はほぼ同義です。

データベース設計とは

データベース設計とは、データベースに保持するデータの設計のことです。

DB設計がなぜ重要なのか

DB設計がなぜ重要なのかというと、DB設計(データ設計)はシステムの品質を最も大きく左右するからです。どんなデータをどのようなフォーマットで持つかによって、システムの品質も変わってきます。DB設計にバッドノウハウが適用されたり、適切な設計がされていないと、プログラムのコードをどれだけきれいに書いても、機能を実現するために、無駄にテーブルを結合したり検索する必要が出て、パフォーマンスを悪化させます。また、クエリが冗長化する可能性がある為、クエリを発行するアプリケーション側のコードも冗長になり、アプリケーション側のコードの可読性が落ちる可能性があります。設計が適切ではないことによって、データを冗長に保持してしまい、サーバーのリソースを無駄に消費してしまったり、カラムを気軽に追加できなかったり等、スケール面での問題もあります。

そして、既に運用されているシステムのDB設計を後から変更するのは、かなり大変です。DB設計を変更することでアプリケーション側のコードも変更しないとならない為、高い改修コストがかかります。

そのため、DB設計はシステムの品質を大きく左右するので、とても重要です。

(※) ソフトウェアというのは、言ってみれば「データの流通機構」です。

データ中心アプローチとは(DOA)

DOAとは、システムを作る際に、プログラムよりも前にデータの設計から始める方法論です。 プログラムから先に作り、業務処理単位でデータ設計を行うPOAより、DOAは業務要件の仕様変更に強く、複数のプログラムでデータを共有するのも容易です。

  • DOA:データ ➡ プログラム
  • POA:プログラム ➡ データ

DOAのメリットでも分かる通り、DB設計はとても重要な設計工程です。

スキーマとは

スキーマとは、DBのデータ構造やフォーマットのことです。

3層スキーマモデルとは

データベース設計を考える際は、データベースを外部スキーマ、概念スキーマ、内部スキーマの3層に分けて考えます(DBは3層のスキーマからなる)。

この3つのスキーマに基づいてシステムを記述したモデルを3層スキーマモデルと呼びます。

スキーマ 概要 相当するもの
外部スキーマ 外部スキーマとは、システムの利用者であるユーザーから見て、データベースがどのような機能とインタフェースを持っているかを定義するスキーマです。「ユーザーから見たデータベース」を表します。ビューが相当します。自社の管理画面で見る購買履歴のインターフェースの定義等が外部スキーマです。 ビュー
概念スキーマ データベースに保持するデータの要素および、データ同士の関係を記述するスキーマです。概念スキーマは「開発者から見たデータベース」です。必然的に、データベース設計において重要な位置を占めることになります。概念スキーマの設計を「論理設計」と呼びます。 テーブル定義
内部スキーマ 概念スキーマで定義された論理データモデルを、具体的にどのようにDBMS内部に格納するかを定義するスキーマです。いわば「DBMSから見たデータベース」です。テーブルやインデックス(索引)の物理的定義を含みます。RDBもコンピュータ上で動く以上は、あらゆるデータは最終的に「ファイル」の形で管理されます。内部スキーマの設計を、論理設計との対比で「物理設計」と呼びます。  データの物理的な配置

参考記事

達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ: ミック + 配送料無料

Database - Wikipedia

データベース管理システム - Wikipedia

Redis open source DBMS overview

データベース(DB)の種類や選択時の考え方|MySQLやPostgreSQLとRedisの違い、MemcachedやBigQueryとの違い・メリット・デメリット

Redisの特徴と基本的な使い方をわかりやすく解説!Redisの用途と活用方法・メリットは?使えるコマンド一覧もご紹介| ITフリーランスエンジニア案件ならA-STAR(エースター)

データベースのスキーマとは何か?3層スキーマと関連用語も解説

「達人に学ぶDB設計」3層スキーマ(外部スキーマ、概念スキーマ、内部スキーマ)とは何か? | bbh

https://wa3.i-3-i.info/word13663.html

はじめてのテーブル設計・データベース設計【わかりやすい解説 + 身近なテーマでレッスン】 | Udemy