基礎
スキーマ(schema)
データベース(DB)におけるスキーマとは、データの構造やその定義を表したものです。スキーマには、データベース内でどのようにデータが保存されるのか、テーブルやカラム、データ型、関係性などの情報が含まれます。
スキーマの役割
スキーマは、データベース内でのデータの整合性と一貫性を保つために重要な役割を果たします。データがどのように構造化されるべきかを規定するため、データを保存・管理する際のルールが決まります。
リレーショナルデータベース(RDB)のスキーマ
リレーショナルデータベースでは、スキーマがテーブル構造やカラムのデータ型、制約などを規定しています。たとえば、スキーマに従って以下のような情報が決まります。
- テーブル名とカラム名:テーブル(例:)やカラム(例:
Users
、name
)の名前email
- データ型:カラムのデータ型(例:文字列、整数、日付など)
- 制約:データの一貫性を保つためのルール(例:、
NOT NULL
、UNIQUE
)FOREIGN KEY
スキーマに従ってデータを格納することで、たとえば「ユーザー ID は整数のみ」「メールアドレスは一意であるべき」といったルールをデータベース側で自動的に管理できるようになります。
NoSQL データベースのスキーマ
NoSQL データベース(MongoDB など)の場合、スキーマは固定されていない(スキーマレス)ことが多く、各ドキュメントの構造が異なっても保存可能です。この柔軟性により、データ構造の変更や追加に強くなり、スキーマを厳密に設計しなくても動かすことができます。
ただし、完全にスキーマレスにするとデータの一貫性を保つのが難しくなるため、アプリケーションレベルでスキーマを定義する場合もあります。これにより、ある程度のルールを持たせた設計も可能です。
スキーマのメリット
- データの一貫性:スキーマにより、データが常に正しい形式・制約のもとで保存されることが保証されます。
- 構造の明確化:データの構造があらかじめ定義されているため、アプリケーション開発時にデータベースを扱いやすくなります。
- クエリの最適化:データ構造が明確なので、データ検索や集計の効率が上がり、パフォーマンスが向上します。
例:リレーショナルデータベースのスキーマ
以下の例は、RDB のユーザー情報テーブルのスキーマ例です。
カラム名 | データ型 | 制約 |
---|---|---|
id | INTEGER | PRIMARY KEY, AUTO_INCREMENT |
name | VARCHAR(50) | NOT NULL |
VARCHAR(100) | UNIQUE, NOT NULL | |
created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP |
- id:自動で増加する一意のユーザー ID
- name:必須の名前
- email:一意で、必須のメールアドレス
- created_at:自動で現在の日付と時間が設定される作成日時
このスキーマのように、リレーショナルデータベースではデータ構造が固定されるため、あらかじめ詳細な設計が必要です。
RDB(Relational Database)
データそのものの構造(テーブルで表現されたデータとその関係性)。
RDB は「リレーショナルデータベース」の略で、データをテーブル形式で管理するデータベースです。行と列で構成されたテーブル(関係表)でデータを管理し、テーブル同士の関連を通してデータの関係性を構築します。例えば、ユーザーテーブルと注文テーブルが ID を基に関係性を持ち、データの結合や集計が容易にできます。
- 特徴: テーブル形式でデータを扱い、主キーや外部キーなどで関係を持たせる。
- 例: テーブル、
users
テーブル、orders
テーブルなど。products
RDBMS(Relational Database Management System)
データを管理・操作するシステム。
RDBMS は「リレーショナルデータベース管理システム」の略で、RDB を操作・管理するためのソフトウェアシステムです。RDBMS は、データの保存・取得・更新・削除、トランザクション管理、バックアップ、ユーザーアクセス制御など、データベース管理に必要な機能を提供します。
- 特徴: SQL などの言語を用いてデータの操作や管理を行える。また、セキュリティやトランザクション、バックアップ機能も備える。
- 例: MySQL、PostgreSQL、Oracle Database、SQL Server
MongoDB
JSON と BSON
JSON と BSON の共通点と違いまとめ
特徴 | JSON | BSON |
---|---|---|
表現形式 | テキスト | バイナリ |
型情報 | 含まれない | 各フィールドに型情報を含む |
サポートする型 | 数値、文字列、配列、オブジェクト等 | 日付型、バイナリ、32 ビット整数等も含む |
サイズ | 小さいことが多い | やや大きくなることがある |
利用の効率 | 人間が読みやすい | コンピュータが効率的に処理できる |
水平スケーリング
システムの処理能力を向上させる手法で、複数のサーバーに負荷を分散させること