1. Armstrong 公理的三条规则
Armstrong 公理系统包括以下三条规则:
(1)自反律(Reflexivity)
-
定义:如果 Y⊆XY⊆X,则 X→YX→Y。
-
比喻:就像“你拥有一个完整的蛋糕,那么你自然拥有蛋糕的每一块”。
-
例子:
-
如果 X={A,B}X={A,B},Y={A}Y={A},那么 {A,B}→{A}{A,B}→{A}。
-
因为 YY 是 XX 的子集,所以 XX 可以决定 YY。
-
(2)增广律(Augmentation)
-
定义:如果 X→YX→Y,则 XZ→YZXZ→YZ。
-
比喻:就像“如果你有一把钥匙可以打开一扇门,那么你再多拿一把钥匙,仍然可以打开那扇门”。
-
例子:
-
如果 {A}→{B}{A}→{B},那么 {A,C}→{B,C}{A,C}→{B,C}。
-
因为 AA 决定 BB,所以即使加上 CC,AA 和 CC 仍然可以决定 BB 和 CC。
-
(3)传递律(Transitivity)
-
定义:如果 X→YX→Y 且 Y→ZY→Z,则 X→ZX→Z。
-
比喻:就像“如果你知道如何从家到学校,又知道如何从学校到图书馆,那么你自然知道如何从家到图书馆”。
-
例子:
-
如果 {A}→{B}{A}→{B} 且 {B}→{C}{B}→{C},那么 {A}→{C}{A}→{C}。
-
因为 AA 决定 BB,而 BB 决定 CC,所以 AA 可以决定 CC。
-
2. Armstrong 公理的推论
除了三条基本公理,Armstrong 公理系统还有一些重要的推论,这些推论可以帮助我们更方便地推导函数依赖。
(1)合并规则(Union Rule)
-
定义:如果 X→YX→Y 且 X→ZX→Z,则 X→YZX→YZ。
-
比喻:就像“如果你有一把钥匙可以打开门 A,又有一把钥匙可以打开门 B,那么你自然可以同时打开门 A 和门 B”。
-
例子:
-
如果 {A}→{B}{A}→{B} 且 {A}→{C}{A}→{C},那么 {A}→{B,C}{A}→{B,C}。
-
(2)分解规则(Decomposition Rule)
-
定义:如果 X→YZX→YZ,则 X→YX→Y 且 X→ZX→Z。
-
比喻:就像“如果你有一把钥匙可以同时打开门 A 和门 B,那么你自然可以分别打开门 A 和门 B”。
-
例子:
-
如果 {A}→{B,C}{A}→{B,C},那么 {A}→{B}{A}→{B} 且 {A}→{C}{A}→{C}。
-
(3)伪传递规则(Pseudo-Transitivity Rule)
-
定义:如果 X→YX→Y 且 YZ→WYZ→W,则 XZ→WXZ→W。
-
比喻:就像“如果你知道如何从家到学校,又知道如何从学校和地铁站到图书馆,那么你自然知道如何从家和地铁站到图书馆”。
-
例子:
-
如果 {A}→{B}{A}→{B} 且 {B,C}→{D}{B,C}→{D},那么 {A,C}→{D}{A,C}→{D}。
-
3. 形象化的例子
场景:学生选课系统
假设有一个关系模式 R(StudentID,CourseID,Grade,Name)R(StudentID,CourseID,Grade,Name),其中:
-
StudentIDStudentID 是学生学号。
-
CourseIDCourseID 是课程编号。
-
GradeGrade 是成绩。
-
NameName 是学生姓名。
已知函数依赖:
-
{StudentID}→{Name}{StudentID}→{Name}(学号决定姓名)。
-
{StudentID,CourseID}→{Grade}{StudentID,CourseID}→{Grade}(学号和课程编号决定成绩)。
推导过程
-
自反律:
-
{StudentID,CourseID}→{StudentID}{StudentID,CourseID}→{StudentID}。
-
因为 {StudentID}{StudentID} 是 {StudentID,CourseID}{StudentID,CourseID} 的子集。
-
-
增广律:
-
从 {StudentID}→{Name}{StudentID}→{Name},可以推导出 {StudentID,CourseID}→{Name,CourseID}{StudentID,CourseID}→{Name,CourseID}。
-
-
传递律:
-
如果 {StudentID}→{Name}{StudentID}→{Name} 且 {Name}→{Age}{Name}→{Age}(假设姓名决定年龄),那么 {StudentID}→{Age}{StudentID}→{Age}。
-
-
合并规则:
-
如果 {StudentID}→{Name}{StudentID}→{Name} 且 {StudentID}→{Age}{StudentID}→{Age},那么 {StudentID}→{Name,Age}{StudentID}→{Name,Age}。
-
-
分解规则:
-
如果 {StudentID}→{Name,Age}{StudentID}→{Name,Age},那么 {StudentID}→{Name}{StudentID}→{Name} 且 {StudentID}→{Age}{StudentID}→{Age}。
-
-
伪传递规则:
-
如果 {StudentID}→{Name}{StudentID}→{Name} 且 {Name,CourseID}→{Grade}{Name,CourseID}→{Grade},那么 {StudentID,CourseID}→{Grade}{StudentID,CourseID}→{Grade}。
-