DBMS - Codd's 12 Rules

안녕하세요, 데이터베이스 열정가 되고자 하는 여러분! 오늘 우리는 Database Management Systems (DBMS)의 fascinaiting한 세상으로 뛰어들어 Codd's 12 Rules을 탐구해보겠습니다. 이 규칙들은 관계형 데이터베이스의 아버지인 Dr. Edgar F. Codd에 의해 제정된 것으로, 데이터베이스 세상의 십계명과도 같습니다. 이들은 단순한 규칙이 아닌, 현대 데이터베이스를 어떻게 생각하고 설계할 것인가에 대한 지침입니다.

DBMS - Codd

네 이웃의 친절한 컴퓨터 교사로서, 저는 이 규칙들을 코드를 한 줄도 작성해본 적 없는 사람들도 이해할 수 있도록 설명해드리겠습니다. 따라서 커피를 한 잔 마시고 편안하게 앉아, 이 흥미로운 여정을 함께 떠나보겠습니다!

Rule 1: Information Rule

책장을 정리하는 것을 상상해보세요. Information Rule은 "이 책장에 있는 모든 것은 책이어야 한다"고 말하는 것과 같습니다. 데이터베이스 세상에서, 이 규칙은 데이터베이스에 있는 모든 정보가 하나의 방식으로만 표현되어야 한다고 규정합니다 - 테이블의 값으로.

간단한 예를 보겠습니다:

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

이 예제에서 우리는 "Students" 테이블을 생성하고 있습니다. 학생에 대한 모든 정보(학생의 ID, 이름, 성, 나이)는 이 테이블의 열로 표현됩니다. 이것이 Information Rule의 핵심입니다 - 모든 데이터는 테이블에 저장됩니다.

Rule 2: Guaranteed Access Rule

이 규칙은 도서관 카드를 가지고 있어서 도서관의 모든 책에 접근할 수 있는 것과 같습니다. 데이터베이스 용어로는, 모든 데이터가 테이블 이름, 주요 키, 열 이름을 알면 접근할 수 있어야 한다는 뜻입니다.

예를 들어, ID가 1인 학생의 나이를 찾고 싶다면 다음과 같이 할 수 있습니다:

SELECT Age FROM Students WHERE StudentID = 1;

이 쿼리는 Rule 2를 따라 특정 정보에 접근할 수 있음을 보장합니다.

Rule 3: Systematic Treatment of NULL Values

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

이 규칙은 도서관이 책을 찾고, 읽고, 정리하는 데 사용할 수 있는 universal 언어를 가져야 한다는 것입니다. 데이터베이스 용어로는, 모든 데이터베이스 연산을 위한 포괄적인 언어가 있어야 한다는 뜻입니다.

SQL(구조화된 질의어)는 이러한 것의 가장 일반적인 예입니다. 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

이 규칙은 데이터베이스가 여러 장소에 분산되어 있든지 아닌지에 상관없이 동일하게 작동해야 한다는 것입니다. 여러 도서관 지점에서 책을 원활하게 접근할 수 있는 것과 같습니다.

이 규칙에 대한 간단한 코드 예제는 없지만, 현대 분산 데이터베이스는 이 원칙을 배후에서 구현합니다.

Rule 12: Non-Subversion Rule

마지막 규칙은 보안과 일관성에 관한 것입니다. 데이터베이스가 레코드에 접근할 수 있는 방법(예: SQL)이 있다면, 이를 우회하여 데이터에 직접 접근할 수 있는 방법이 없어야 한다는 것입니다. 모든 책 대출이 도서관 시스템을 통해 이루어져야 하며, 백도어 접근이 없어야 한다는 것입니다.

이는 일반적으로 데이터베이스 시스템 수준에서 처리됩니다.

모든 규칙을 요약한 표입니다:

규칙 설명
1 Information Rule
2 Guaranteed Access Rule
3 Systematic Treatment of NULL Values
4 Active Online Catalog
5 Comprehensive Data Sub-Language Rule
6 View Updating Rule
7 High-Level Insert, Update, and Delete Rule
8 Physical Data Independence
9 Logical Data Independence
10 Integrity Independence
11 Distribution Independence
12 Non-Subversion Rule

그렇게 Codd's 12 Rules을 요약하면 됩니다. 이 규칙들은 1985년에 제정되었고, 모든 현대 데이터베이스가 이 규칙을 엄격히 따르지는 않지만, 관계형 데이터베이스 시스템의 이론적 기초를 형성합니다.

마무리하며, Codd's Rules을 통해 여러분이 얻은 지식이 여러분을 데이터베이스 거장으로 만드는 첫 걸음이 되기를 바랍니다. 계속 연습하고, 호기심을 유지하면, 어쩌면 앞으로 새로운 혁신적인 데이터베이스 원칙을 제정할지도 모릅니다!

Credits: Image by storyset