知识卡片

域到关系的四层形式化定义链条

结构图卡

内容

关系模型的严谨性来自它从纯集合论逐层推导出”表”这个概念,而不是先有表格 再补数学解释。域是一组相同数据类型的取值集合(如{男,女}、8字节字符串 集合);笛卡儿积是多个域按位置组合,产生所有可能的元组(n元组);关系 则是这个笛卡儿积集合的任意子集——这一步是关键跳跃:不是所有组合都真实 存在,关系只保留现实中实际发生的那部分组合,因此关系天然就是二维表, 表的行对应元组、列对应属性。在关系之上还要区分关系模式与关系实例:模式 是对关系逻辑结构的静态描述(记作 R(A1,A2,…,An),相当于编程语言里的 “类型”),实例是某一时刻关系包含的具体元组集合(相当于”变量的值”)—— 同一个模式在不同时刻可以对应完全不同的实例(学生增删都不影响模式本身)。 这个区分能解释一个常见的理解误区:数据库设计阶段处理的是模式(稳定), 数据库运行阶段处理的是实例(不断变化),把这两者混为一谈会导致”为什么 改了一条数据还要重新设计表结构”这类错误期待。

结构图

flowchart TD
    A["域: 相同类型取值的集合<br/>如{男,女}"] --> B["笛卡儿积: 多个域按位置组合<br/>产生全部可能的元组"]
    B --> C["关系: 笛卡儿积的一个子集<br/>只保留现实中真实存在的组合"]
    C --> D["关系模式 R(A1,...,An)<br/>静态逻辑结构,相当于'类型'"]
    C --> E["关系实例<br/>某时刻的元组集合,相当于'变量的值'"]

参考来源

- 位置:《数据库原理(微课版)》第2章《关系数据库》2.1.1-2.1.2节 (源文件:_epub-src/index_split_001.html) - 结论依据:原文依次给出域("一组具有相同数据类型的值的集合")、笛卡儿积 ("D1×D2×…×Dn")、关系("若r⊆D1×D2×…×Dn,则r叫作……上的关系") 的形式化定义,并说明"关系模式是对关系的逻辑结构的描述……关系实例是 关系所包含的元组的集合,是某一个时刻的内容或状态",因此可以推出这条 逐层抽象的定义链条。 - 原始内容:域是一组具有相同数据类型的值的集合……关系是集合笛卡儿积的 子集,因此关系也是一张二维表……关系模式是一种逻辑结构,是静态的、 稳定的。然而,关系实例是关系所包含的元组的集合,是某一个时刻的内容 或状态,是动态的、不断变化的。