データベースのスキーマとは?初心者でも理解できる解説

データベースにおける重要な概念であるスキーマを理解するためには、データベースそのものの基礎知識が肝心です。データベースの基礎的な知識を理解し、自分でスキーマの設計ができるようになるための情報を紹介します。

データベースの基礎知識

スキーマについて理解するために、まずはデータベースとは何なのか、定義を押さえておきましょう。

データベースの定義

大量のデータを集め、コンピューター上でデータの追加・削除・検索をしやすい状態に整理したものを『データベース』と呼びます。

データベースは、データを格納する構造やアルゴリズムによって、『階層型データベース』『リレーショナルデータベース』『オブジェクトデータベース』『カード型データベース』など、多数の種類が展開されています。

近年では、重複がなく視認しやすい『リレーショナルデータベース』が主流です。

参考:データベース(DB)とは - IT用語辞典 e-Words

インスタンスとの違い

データベースと混同されがちな『インスタンス』は、データベースとユーザーの間を仲介する役割があります。インスタンス作成後にデータベースを作成します。

データベースを直接操作すると、間違って削除してしまったり、不要な情報を追加したりなど、さまざまなヒューマンエラーを起こしかねません。

インスタンスを介してデータベースを操作することで、データの安全性やパフォーマンスの向上につながります。インスタンスは『データベースにアクセスするための過程』であり、データベースは『データを格納したファイル』という関係性です。

データベースのスキーマとは

データベースにおける『スキーマ』(schema)とは、データベースの構造で、『データベースの設計図』と考えると分かりやすいでしょう。

例えば、料理を作る際に、材料や手順を表す『レシピ』に従って作ることがあるでしょう。データベースも同じように、必要なデータの洗い出しや、そのデータの格納整理のルールを決めます。

データベースでは、そのような作業を『スキーマを定義する』と呼び、『外部スキーマ』『概念スキーマ』『内部スキーマ』の3構造に分けます。

データベースによって位置づけは異なる

スキーマは、データベース全体を理解するために割り当てられた『構造』ですが、それぞれのデータベースによって位置づけが異なる場合があります。

極端な例を挙げれば、データベースによっては、スキーマという概念を持っているデータベースと、持っていないデータベースが存在します。代表的なデータベースにおける『スキーマの定義』をみていきましょう。

Oracleのスキーマ定義

Oracle(オラクル)というデータベースの場合、1ユーザーに対して1つのスキーマが割り当てられます。

1つのスキーマの中に、ユーザーの所有するデータ(オブジェクト)を格納していきます。オラクルにおけるスキーマは、『1人1個しか持てないデータの格納庫』とイメージしておきましょう。

Oracleにはスキーマに属さない『非スキーマ・オブジェクト』も存在し、その場合はオブジェクトの所有者となるユーザーは定義されていません。つまり共有されたオブジェクトということになります。

MySQLのスキーマ定義

データベースの中でも主流の『リレーショナルデータベース』を管理するシステムをRDBMS(Relational Data Base Management System)と呼びます。Oracle社が出している『MySQL』というシステムもRDBMSです。

MySQLでは複数のデータベースを作成可能で、その一つ一つのデータベースを『スキーマ』と定義しています。複数のスキーマが作成できるため、個々のスキーマに同じ名前のテーブルを作ることが可能になります。

1人のユーザーが複数のスキーマを持てるので、実際の運用には、管理権限などをしっかり割り振ったほうが安全といえるでしょう。

3層スキーマ

データベースのスキーマを『外部スキーマ』『概念スキーマ』『内部スキーマ』の3階層に分け、定義する思想を『3層スキーマ』と呼びます。

  • 外部スキーマ:概念スキーマで定義された論理データから、必要なデータを取り出したビューなどに相当する部分
  • 概念スキーマ:データベース上の論理データで、保持するデータの要素や、データ同士の関係を定義するテーブルに相当する部分
  • 内部スキーマ:概念スキーマで定義された論理データを、具体的にどのように格納するかを定義する部分

この3階層を意識して設計することで、変更範囲を局所化でき、最小限の手間での変更が可能です。

スキーマとデータベース用語

データベースを勉強する上で、ハードルが高く感じられるスキーマですが、関連する用語の定義を明確にしておくことで、理解しやすくなるでしょう。スキーマに関係するデータベース用語を紹介し、その意味を解説します。

スキーマとテーブル

テーブルとは、データを表として整理したもので、データベースを構成する基本要素です。一方、スキーマはテーブルよりも大きな枠組みであり、複数のテーブルを整理して格納しておく場所です。

RDBMSで使われるプログラム言語であるSQLでは『テーブル名の前にスキーマ名をつける』のがルールとなっています。

スキーマとディレクトリ

『ディレクトリ』はスキーマと混同されやすい言葉です。

OSで多数のファイルを作成したとき、ファイルの種類・目的・所有者などに応じ、複数のディレクトリ(フォルダ)に分類して保存します。

データベースをOSに置き換えた場合、データベース内に作成したテーブルは、OSでの『ファイル』に相当します。そしてOSにおけるディレクトリに相当し、テーブルの目的や所有者に応じて格納場所を別にするのがスキーマです。

データベースでは格納する場所が『スキーマ』で、OSでは『ディレクトリ』と認識しておきましょう。

スキーマの設計

『スキーマ設計』とは、取り扱うデータをデータベース上に定義していく処理全般を指します。ここでは、スキーマ設計に必要な概念を紹介していきます。

データを定義していく処理

リレーショナルデータベースではデータが表形式に格納されるので、『データをどのように表形式に定義していくか』を考える作業がスキーマ設計です。

データベースの活用は、この『定義』にかかっているといっても過言ではないため、目的に応じた定義の処理を心がける必要があります。

リレーショナルデータベースの場合は、ER図(Entity Relationship Diagram)と呼ばれる、データの関係図を書くことで、スキーマ設計を行います。

スキーマ変更しやすい設計が理想

プロジェクトの成長に応じ、データベースの構造は変化していきます。スキーマを変更する場面も多くあることから、変更しやすい設計にすることが重要です。

データベースは大人数で操作する場面が多いため、変更しやすいスキーマを設計しておくことが、安全性の向上と、作業の効率化につながります。

スキーマを変更・更新する際は、きちんとバージョン管理を行い、関係者全員で共有できるように記録することも重要です。

まとめ

OSのディレクトリと同じように、データベース上のスキーマは、情報を管理するために重要な機能です。目的に応じたデータの定義や、変更しやすいスキーマの設計をして、より安全に、作業を効率化できるデータベースを構築していきましょう。

この記事をシェア

関連記事


副業・フリーランス

プログラミング

インタビュー

デザイン

お金

採用・組織

転職

イベントレポート