DBMS - Codd's 12 Rules

Xin chào các bạn yêu thích cơ sở dữ liệu! Hôm nay, chúng ta sẽ cùng khám phá thế giới kỳ diệu của Hệ thống Quản lý Cơ sở Dữ liệu (DBMS) và tìm hiểu về những quy tắc huyền thoại của Codd's 12 Rules. Những quy tắc này, được lập ra bởi người cha của các cơ sở dữ liệu quan hệ, Ts. Edgar F. Codd, giống như Lề Luật trong thế giới cơ sở dữ liệu. Chúng không chỉ là những quy tắc; chúng là những nguyên tắc định hướng cách chúng ta suy nghĩ và thiết kế các cơ sở dữ liệu hiện đại.

DBMS - Codd

Là người giáo viên máy tính gần gũi của bạn, tôi sẽ giải thích những quy tắc này một cách đơn giản để ngay cả những bạn chưa bao giờ viết một dòng mã cũng có thể hiểu được. Vậy hãy cầm một tách cà phê, ngồi thoải mái và cùng bắt đầu hành trình thú vị này nhé!

Quy tắc 1: Quy tắc Thông tin

Hãy tưởng tượng bạn đang sắp xếp kệ sách. Quy tắc Thông tin giống như nói, "Mọi thứ trên kệ này phải là sách." Trong thế giới cơ sở dữ liệu, quy tắc này cho rằng tất cả thông tin trong cơ sở dữ liệu phải được đại diện bằng một và chỉ một cách - như giá trị trong các bảng.

Hãy xem một ví dụ đơn giản:

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

Trong ví dụ này, chúng ta đang tạo một bảng叫做 "Students". Mỗi thông tin về một sinh viên (ID, tên đầu tiên, tên cuối cùng và tuổi) được đại diện như một cột trong bảng này. Đây là essence của Quy tắc Thông tin - tất cả dữ liệu được lưu trữ trong bảng.

Quy tắc 2: Quy tắc Truy cập Đảm bảo

Quy tắc này giống như việc bạn có thẻ thư viện cho phép bạn truy cập bất kỳ sách nào trong thư viện. Trong thuật ngữ cơ sở dữ liệu, nó có nghĩa là mọi piece của dữ liệu nên có thể truy cập được bằng cách biết tên bảng, khóa chính và tên cột.

Ví dụ, nếu chúng ta muốn tìm tuổi của một sinh viên với ID 1, chúng ta có thể sử dụng:

SELECT Age FROM Students WHERE StudentID = 1;

Truy vấn này đảm bảo truy cập đến piece thông tin cụ thể mà chúng ta cần, theo Quy tắc 2.

Quy tắc 3: Quy tắc Xử lý NULL Hệ thống

NULL giá trị giống như những cuốn sách bí ẩn trong thư viện của chúng ta - chúng đại diện cho thông tin chưa biết hoặc không áp dụng. Quy tắc này đảm bảo rằng các giá trị NULL được xử lý nhất quán trong tất cả các thao tác.

Ví dụ, khi chèn một sinh viên mới mà không biết tuổi của họ:

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

Cơ sở dữ liệu xử lý giá trị NULL này một cách hệ thống, cho phép các thao tác như:

SELECT * FROM Students WHERE Age IS NULL;

Quy tắc 4: Quy tắc Catalog Trực tuyến Hoạt động

Hãy tưởng tượng này là hệ thống catalog kỹ thuật số của thư viện. Cơ sở dữ liệu phải có một "catalog"内置 trong đó lưu trữ thông tin về tất cả các bảng, cột, chỉ mục và hơn thế nữa. Trong hầu hết các DBMS hiện đại, điều này thường được gọi là "data dictionary" hoặc "system catalog".

Chúng ta có thể truy vấn catalog này. Ví dụ, trong SQL Server:

SELECT * FROM INFORMATION_SCHEMA.TABLES;

Truy vấn này cung cấp cho chúng ta thông tin về tất cả các bảng trong cơ sở dữ liệu của chúng ta, minh họa quy tắc catalog trực tuyến hoạt động.

Quy tắc 5: Quy tắc Ngôn ngữ Con dữ liệu Toàn diện

Quy tắc này giống như nói rằng thư viện của chúng ta nên có một ngôn ngữ phổ quát để tìm kiếm, đọc và tổ chức sách. Trong thuật ngữ cơ sở dữ liệu, nó có nghĩa là phải có một ngôn ngữ toàn diện cho tất cả các thao tác cơ sở dữ liệu.

SQL (Structured Query Language) là ví dụ phổ biến nhất của điều này. Nó cho phép chúng ta thực hiện mọi thứ từ tạo bảng đến truy vấn dữ liệu:

-- Tạo bảng
CREATE TABLE Books (
BookID INT PRIMARY KEY,
Title VARCHAR(100),
Author VARCHAR(50)
);

-- Chèn dữ liệu
INSERT INTO Books (BookID, Title, Author)
VALUES (1, 'Database Design 101', 'E. F. Codd');

-- Truy vấn dữ liệu
SELECT * FROM Books WHERE Author = 'E. F. Codd';

Quy tắc 6: Quy tắc Cập nhật View

Views giống như các kệ sách tùy chỉnh trong thư viện của chúng ta. Quy tắc này cho rằng nếu bạn có thể thấy một view, bạn nên có thể cập nhật nó (với một số hạn chế).

Dưới đây là ví dụ về việc tạo và cập nhật một view:

-- Tạo một view
CREATE VIEW TeenageStudents AS
SELECT * FROM Students WHERE Age BETWEEN 13 AND 19;

-- Cập nhật qua view
UPDATE TeenageStudents
SET Age = 18
WHERE StudentID = 1;

Quy tắc 7: Quy tắc Chèn, Cập nhật và Xóa Cao cấp

Quy tắc này đảm bảo rằng chúng ta có thể thay đổi các tập hợp dữ liệu trong một lần, thay vì một bản ghi tại một thời điểm. Nó giống như việc có thể di chuyển toàn bộ các kệ sách cùng một lúc, thay vì từng cuốn sách.

Ví dụ:

-- Chèn nhiều bản ghi
INSERT INTO Students (StudentID, FirstName, LastName, Age)
VALUES
(3, 'Alice', 'Johnson', 20),
(4, 'Bob', 'Smith', 22),
(5, 'Charlie', 'Brown', 19);

-- Cập nhật nhiều bản ghi
UPDATE Students
SET Age = Age + 1
WHERE Age < 20;

-- Xóa nhiều bản ghi
DELETE FROM Students
WHERE Age > 25;

Quy tắc 8: Quy tắc Độc lập Dữ liệu Vật lý

Quy tắc này liên quan đến việc tách biệt việc lưu trữ vật lý dữ liệu từ cách chúng ta tương tác với nó. Nó giống như việc bạn không quan tâm một cuốn sách là bìa cứng hay bìa mềm - bạn vẫn có thể đọc nó theo cùng một cách.

Trong thực tế, điều này có nghĩa là việc thay đổi việc lưu trữ vật lý (như di chuyển từ HDD sang SSD) không nên yêu cầu thay đổi mã ứng dụng.

Quy tắc 9: Quy tắc Độc lập Dữ liệu Logic

Giống như Quy tắc 8, nhưng ở cấp độ logic. Nó có nghĩa là chúng ta nên có thể thay đổi cấu trúc logic (như thêm một cột mới) mà không ảnh hưởng đến các ứng dụng hiện có.

Ví dụ, nếu chúng ta thêm một cột mới vào bảng Students:

ALTER TABLE Students
ADD Email VARCHAR(100);

Các ứng dụng hiện có truy vấn bảng Students nên tiếp tục hoạt động mà không cần thay đổi.

Quy tắc 10: Quy tắc Độc lập Toàn vẹn

Quy tắc này đảm bảo rằng các ràng buộc toàn vẹn (như "Tuổi phải là số dương") được định nghĩa trong cơ sở dữ liệu và không phải trong ứng dụng. Nó giống như việc có các quy tắc phân loại sách được thực thi bởi hệ thống thư viện,而不是个别图书管理员.

Ví dụ:

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)
);

Tại đây, các ràng buộc được định nghĩa ở cấp độ cơ sở dữ liệu, đảm bảo độc lập toàn vẹn.

Quy tắc 11: Quy tắc Độc lập Phân phối

Quy tắc này cho rằng cơ sở dữ liệu nên hoạt động theo cùng một cách cho dù nó được phân phối跨越多个位置 hay không. Nó giống như việc bạn có thể truy cập sách từ các chi nhánh thư viện khác nhau mượt mà.

Mặc dù không có ví dụ mã đơn giản cho điều này, các cơ sở dữ liệu phân tán hiện đại thực hiện nguyên tắc này đằng sau hậu trường.

Quy tắc 12: Quy tắc Không Phá hủy

Quy tắc cuối cùng liên quan đến an ninh và nhất quán. Nó cho rằng nếu cơ sở dữ liệu có cách truy cập bản ghi (như SQL), thì không nên có cách nào để bypass điều này và truy cập dữ liệu trực tiếp. Nó giống như việc đảm bảo tất cả các lần mượn sách đều thông qua hệ thống thư viện, không có lối vào sau.

Điều này thường được xử lý ở cấp độ hệ thống cơ sở dữ liệu, không thông qua mã người dùng.

Để tóm tắt tất cả các quy tắc trong bảng handy:

Quy tắc Mô tả
1 Quy tắc Thông tin
2 Quy tắc Truy cập Đảm bảo
3 Quy tắc Xử lý NULL Hệ thống
4 Quy tắc Catalog Trực tuyến Hoạt động
5 Quy tắc Ngôn ngữ Con dữ liệu Toàn diện
6 Quy tắc Cập nhật View
7 Quy tắc Chèn, Cập nhật và Xóa Cao cấp
8 Quy tắc Độc lập Dữ liệu Vật lý
9 Quy tắc Độc lập Dữ liệu Logic
10 Quy tắc Độc lập Toàn vẹn
11 Quy tắc Độc lập Phân phối
12 Quy tắc Không Phá hủy

Và đó là tất cả các quy tắc của Codd's 12 Rules! Nhớ rằng, những quy tắc này được lập ra vào năm 1985, và mặc dù không phải tất cả các cơ sở dữ liệu hiện đại đều tuân thủ chặt chẽ từng quy tắc, chúng vẫn hình thành nền tảng lý thuyết cho các hệ thống cơ sở dữ liệu quan hệ.

Khi chúng ta kết thúc, tôi hy vọng hành trình qua Codd's Rules này đã mang lại cho bạn những kiến thức như mỗi lần tôi dạy nó. Những nguyên tắc này đã định hình thế giới cơ sở dữ liệu mà chúng ta biết ngày nay, và việc hiểu chúng là bước đầu tiên để bạn trở thành một chuyên gia cơ sở dữ liệu. Hãy tiếp tục thực hành, 保持好奇心, và biết đâu một ngày nào đó bạn sẽ lập ra bộ nguyên tắc cơ sở dữ liệu đột phá tiếp theo!

Credits: Image by storyset