DBMS - 科德12规则
你好,有抱负的数据库爱好者们!今天,我们将深入数据库管理系统(DBMS)的迷人世界,探索传奇般的科德12规则。这些规则由关系数据库之父,埃德加·F·科德博士提出,就像是数据库世界的“十诫”。它们不仅仅是规则;它们是指导我们思考和设计现代数据库的指导原则。
作为你友好邻里的计算机老师,我会以即使是那些从未编写过一行代码的人也能理解的方式,来分解这些规则。所以,拿起一杯咖啡,舒服地坐下来,让我们一起开始这段激动人心的旅程!
规则1:信息规则
想象你在整理书架。信息规则就像是在说:“这个架子上的一切必须是书。”在数据库世界,这个规则指出数据库中的所有信息必须以唯一的方式表示 - 作为表中的值。
让我们看一个简单的例子:
CREATE TABLE Students (
StudentID INT PRIMARY KEY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
Age INT
);
在这个例子中,我们创建了一个名为“Students”的表。关于学生的每一条信息(他们的ID、名字、姓氏和年龄)都表示为这个表中的一列。这就是信息规则的精髓 - 所有数据都存储在表中。
规则2:保证访问规则
这个规则就像拥有一张图书馆卡,可以让你访问图书馆中的任何一本书。在数据库术语中,这意味着每个数据都应该可以通过知道表名、主键和列名来访问。
例如,如果我们想找到ID为1的学生的年龄,我们可以使用:
SELECT Age FROM Students WHERE StudentID = 1;
这个查询保证了我们能够访问所需的特定信息,遵循规则2。
规则3:空值的系统性处理
空值就像我们图书馆中的神秘书籍 - 它们代表未知或不适用的信息。这个规则确保空值在所有操作中都被一致处理。
例如,在不知道学生年龄的情况下插入一个新学生:
INSERT INTO Students (StudentID, FirstName, LastName, Age)
VALUES (2, 'Jane', 'Doe', NULL);
数据库会系统地处理这个空值,允许进行如下操作:
SELECT * FROM Students WHERE Age IS NULL;
规则4:活动在线目录
把它想象成图书馆的数字目录系统。数据库必须有一个内置的“目录”,其中存储了所有表、列、索引等信息。在大多数现代数据库管理系统中,这通常被称为“数据字典”或“系统目录”。
我们可以查询这个目录。例如,在SQL Server中:
SELECT * FROM INFORMATION_SCHEMA.TABLES;
这个查询给我们提供了数据库中所有表的信息,展示了活动在线目录的作用。
规则5:全面数据子语言规则
这个规则就像说我们的图书馆应该有一种通用语言来查找、阅读和组织书籍。在数据库术语中,这意味着应该有一种全面的语言来执行所有数据库操作。
SQL(结构化查询语言)是最常见的例子。它允许我们执行从创建表到查询数据的一切操作:
-- 创建表
CREATE TABLE Books (
BookID INT PRIMARY KEY,
Title VARCHAR(100),
Author VARCHAR(50)
);
-- 插入数据
INSERT INTO Books (BookID, Title, Author)
VALUES (1, '数据库设计101', 'E. F. Codd');
-- 查询数据
SELECT * FROM Books WHERE Author = 'E. F. Codd';
规则6:视图更新规则
视图就像我们图书馆中的自定义书架。这个规则指出,如果你能看到一个视图,那么你应该能够更新它(有一些限制)。
以下是一个创建和更新视图的例子:
-- 创建视图
CREATE VIEW TeenageStudents AS
SELECT * FROM Students WHERE Age BETWEEN 13 AND 19;
-- 通过视图更新
UPDATE TeenageStudents
SET Age = 18
WHERE StudentID = 1;
规则7:高级插入、更新和删除规则
这个规则确保我们可以一次修改数据集,而不是一次记录。就像能够一次性移动整架书,而不是一本书一本书地移动。
例如:
-- 批量插入记录
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;
规则8:物理数据独立性
这个规则是关于将数据的物理存储与我们的交互方式分离。就像不关心一本书是硬封面还是平装 - 你仍然可以用同样的方式阅读。
在实践中,这意味着改变物理存储(比如从HDD迁移到SSD)不应该需要更改应用程序代码。
规则9:逻辑数据独立性
与规则8类似,但在逻辑层面上。这意味着我们应该能够更改逻辑结构(比如添加一个新列)而不影响现有应用程序。
例如,如果我们向Students表添加一个新列:
ALTER TABLE Students
ADD Email VARCHAR(100);
查询Students表的原有应用程序应该继续工作,无需修改。
规则10:完整性独立性
这个规则确保完整性约束(如“年龄必须是正数”)定义在数据库中,而不是在应用程序中。就像由图书馆系统而不是个别图书管理员来执行图书分类规则。
示例:
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)
);
在这里,约束在数据库级别定义,确保了完整性独立性。
规则11:分布式独立性
这个规则指出,数据库应该无论是否跨多个位置分布都以相同的方式工作。就像能够无缝地从不同图书馆分部访问书籍。
虽然这个规则没有简单的代码示例,但现代分布式数据库在幕后实现了这个原则。
规则12:非破坏规则
最后一个规则是关于安全和一致性。它指出,如果数据库有访问记录的方式(如SQL),那么不应该有绕过这种方式直接访问数据的方法。就像确保所有图书借阅都通过图书馆系统,没有后门访问。
这通常是在数据库系统级别处理的,而不是通过用户编写的代码。
以下是一个总结所有规则的便捷表格:
规则 | 描述 |
---|---|
1 | 信息规则 |
2 | 保证访问规则 |
3 | 空值的系统性处理 |
4 | 活动在线目录 |
5 | 全面数据子语言规则 |
6 | 视图更新规则 |
7 | 高级插入、更新和删除规则 |
8 | 物理数据独立性 |
9 | 逻辑数据独立性 |
10 | 完整性独立性 |
11 | 分布式独立性 |
12 | 非破坏规则 |
就这样,朋友们!科德12规则的精髓。记住,这些规则是在1985年制定的,虽然现代数据库并非严格遵循每一条规则,但它们仍然是关系数据库系统的理论基础。
在我们结束之前,我希望这次穿越科德规则的旅程对你们来说和我每次教授它时一样富有启发性。这些原则塑造了我们今天所知的数据库世界,理解它们是成为数据库高手的第一个步骤。继续练习,保持好奇心,谁知道呢?也许有一天你会制定下一套划时代的数据库原则!
Credits: Image by storyset