DBMS - Coddの12の规则

こんにちは、データベースの熱心な愛好家たち!今日は、データベース管理システム(DBMS)の魅力的な世界に飛び込み、伝説的なCoddの12の规则に挑戦します。これらの规则は、関係データベースの父、Edgar F. Codd博士によって策定され、データベースの世界における「十戒」とも言えます。これらはただの规则ではなく、現代データベースの設計を形作る指導原理です。

DBMS - Codd

あなたの近所の親切なコンピュータ教師として、私はこれらの规则を誰もコードを書いたことがない人でも理解できるように説明します。コーヒーを一杯取り、リラックスして、このエキサイティングな旅に一緒に参加しましょう!

Rule 1: Information Rule(情報规则)

本棚を整理していると imagine してみてください。「この棚にあるすべては本でなければならない」と言うようなものです。データベースの世界では、この规则は「データベース内のすべての情報は一つの方法で表現されなければならない」と言っています。那就是、テーブルの値としてです。

簡単な例を見てみましょう:

CREATE TABLE Students (
StudentID INT PRIMARY KEY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
Age INT
);

この例では、「Students」というテーブルを作成しています。学生に関するすべての情報(ID、名前、苗字、年齢)は、このテーブルの列として表現されます。これは情報规则の本質です。すべてのデータはテーブルに保存されます。

Rule 2: Guaranteed Access Rule(確保されたアクセス规则)

これは、図書館のカードを持っていて、図書館のどの本にもアクセスできるようなものです。データベースの言葉では、すべてのデータはテーブル名、主キー、列名を知ることでアクセス可能であることを意味します。

例えば、IDが1の学生の年齢を見つける場合、以下のようにします:

SELECT Age FROM Students WHERE StudentID = 1;

このクエリは、特定の情報へのアクセスを保証します。

Rule 3: Systematic Treatment of NULL Values(NULL値の系統的な取り扱い规则)

NULL値は、図書館のミステリ本のように、未知または適用不可の情報を表します。この规则は、NULL値がすべての操作で一貫して取り扱われることを確保します。

例えば、年齢がわからない新しい学生を追加する場合:

INSERT INTO Students (StudentID, FirstName, LastName, Age)
VALUES (2, 'Jane', 'Doe', NULL);

データベースはこのNULL値を系統的に取り扱い、以下のような操作を可能にします:

SELECT * FROM Students WHERE Age IS NULL;

Rule 4: Active Online Catalog(アクティブなオンラインカタログ)

これは、図書館のデジタルカタログシステムのようです。データベースは、すべてのテーブル、列、インデックスなどの情報を保存する「カタログ」を内蔵していなければなりません。現代のDBMSでは、これが「データ辞書」や「システムカタログ」として知られています。

このカタログをクエリすることができます。例えば、SQL Serverでは:

SELECT * FROM INFORMATION_SCHEMA.TABLES;

このクエリは、データベース内のすべてのテーブル情報を提供し、アクティブなオンラインカタログを実行していることを示します。

Rule 5: Comprehensive Data Sub-Language Rule(包括的なデータサブ言語规则)

これは、図書館が本を見つけ、読み、整理するための普遍的な言語を持つべきだと言うようなものです。データベースの言葉では、すべてのデータ操作のための包括的な言語があることを意味します。

SQL(構造化クエリ言語)は、この最も一般的な例です。テーブルの作成からデータのクエリまで、すべてを行うことができます:

-- テーブルの作成
CREATE TABLE Books (
BookID INT PRIMARY KEY,
Title VARCHAR(100),
Author VARCHAR(50)
);

-- データの挿入
INSERT INTO Books (BookID, Title, Author)
VALUES (1, 'Database Design 101', 'E. F. Codd');

-- データのクエリ
SELECT * FROM Books WHERE Author = 'E. F. Codd';

Rule 6: View Updating Rule(ビュー更新规则)

ビューは、図書館のカスタム本棚のようです。この规则は、ビューが見える場合、それを更新できる(いくつかの制限があります)ことを述べています。

以下にビューの作成と更新の例を示します:

-- ビューの作成
CREATE VIEW TeenageStudents AS
SELECT * FROM Students WHERE Age BETWEEN 13 AND 19;

-- ビューを通じての更新
UPDATE TeenageStudents
SET Age = 18
WHERE StudentID = 1;

Rule 7: High-Level Insert, Update, and Delete Rule(高レベルの挿入、更新、削除规则)

この规则は、データセットを一度に変更できることを確保します。まるで本棚全体を一度に動かすようなものです。

例えば:

-- 複数のレコードの挿入
INSERT INTO Students (StudentID, FirstName, LastName, Age)
VALUES
(3, 'Alice', 'Johnson', 20),
(4, 'Bob', 'Smith', 22),
(5, 'Charlie', 'Brown', 19);

-- 複数のレコードの更新
UPDATE Students
SET Age = Age + 1
WHERE Age < 20;

-- 複数のレコードの削除
DELETE FROM Students
WHERE Age > 25;

Rule 8: Physical Data Independence(物理データ独立性)

この规则は、データの物理的な保存とそれとのインタラクションを分離することについてです。まるで本がハードカバーかペーパーバックであるかにかかわらず、同じように読めるようなものです。

実際には、物理的な保存(HDDからSSDへの移行など)がアプリケーションコードの変更を必要としないことを意味します。

Rule 9: Logical Data Independence(論理データ独立性)

Rule 8と似ていますが、論理的なレベルでのことです。データの論理構造(新しい列の追加など)を変更しても既存のアプリケーションに影響を与えないことを意味します。

例えば、Studentsテーブルに新しい列を追加する場合:

ALTER TABLE Students
ADD Email VARCHAR(100);

既存のアプリケーションがStudentsテーブルをクエリする際に変更なしで動作するはずです。

Rule 10: Integrity Independence(整合性独立性)

この规则は、整合性制約(「年齢は正」など)がデータベース内で定義され、アプリケーション内では定義されないことを確保します。まるで図書館システムが本の分類規則を強制し、個々の司書が行うのではなく、システムが行うようなものです。

例えば:

CREATE TABLE Students (
StudentID INT PRIMARY KEY,
FirstName VARCHAR(50) NOT NULL,
LastName VARCHAR(50) NOT NULL,
Age INT CHECK (Age > 0 AND Age < 120)
);

ここでは、制約がデータベースレベルで定義されています。

Rule 11: Distribution Independence(分散独立性)

この规则は、データベースが複数のロケーションに分散していても、分散していない場合と同じように動作することを述べています。まるで異なる図書館支店から本を seamlessly アクセスできるようなものです。

簡単なコード例はありませんが、現代の分散データベースはこの原則を裏で実装しています。

Rule 12: Non-Subversion Rule(非破壊规则)

最後の规则は、セキュリティと一貫性についてです。データベースがレコードにアクセスする方法(SQLなど)を持つ場合、データに直接アクセスする方法がないことを確保します。まるですべての本の貸出が図書館システムを通じて行われ、バックドアアクセスがないようにします。

これは通常、データベースシステムレベルで処理されます。

これらのすべての规则を以下の表にまとめます:

Rule 説明
1 情報规则
2 確保されたアクセス规则
3 NULL値の系統的な取り扱い规则
4 アクティブなオンラインカタログ
5 包括的なデータサブ言語规则
6 ビュー更新规则
7 高レベルの挿入、更新、削除规则
8 物理データ独立性
9 論理データ独立性
10 整合性独立性
11 分散独立性
12 非破壊规则

そして、ここにCoddの12の规则を簡単にまとめました。これらの规则は1985年に策定され、現代のデータベースがすべての规则に厳格に従っているわけではありませんが、関係データベースシステムの理論的基盤を形成しています。

このCoddの规则の旅があなたにとっても私が教えるたびに一样に啓発的であったことを願っています。これらの原則を理解することは、データベースの達人になるための第一歩です。練習を続け、好奇心を持ち続け、いつかあなたが次の画期的なデータベース原則を策定するかもしれません!

Credits: Image by storyset