当前位置: 首页 > news >正文

数据库关系模型的总结

 关系模型的核心概念

(1) 关系(Relation)

定义:关系是一个二维表(Table),由行(记录)和列(属性)组成。

数学表示:关系是元组(Tuple)的集合,每个元组代表一行数据。

示例

StudentIDNameAgeMajor
101Alice20Computer
102Bob22Mathematics

(2) 属性(Attribute)

域 定义:

  • (Domain)是一组具有相同数据类型的值的集合,它定义了某个属性(列)可以取的所有可能值。

  • 在关系模型中,每个属性都必须属于某个域,域限制了该属性的取值范围。

特点

  1. 原子性:域中的值是不可再分的最小单位(如整数、字符串等)。

  2. 唯一性:同一个域不能包含重复的值。

  3. 约束性:域可以定义数据的类型和约束条件(如 Age 必须是正整数)。

(3) 元组(Tuple)

即表的,代表一条具体的数据记录。

示例:(101, "Alice", 20, "Computer") 是一个元组。

(4) 主键(Primary Key)

唯一标识一个元组的属性(或属性组合),不能重复,不能为NULL

示例:StudentID 是主键。

(5) 外键(Foreign Key)

一个表中的属性,引用另一个表的主键,用于维护表之间的关系。

示例:Enrollment 表中的 StudentID 是外键,引用 Student 表的主键。

(6)笛卡尔积:

笛卡尔积(Cartesian Product)是两个集合的所有可能有序对的组合

在关系数据库中,笛卡尔积用于描述多个关系的组合方式,它是关系代数中连接(Join)操作的基础。

数学表示:

给定两个集合 A和 B,它们的笛卡尔积 A×B,A×B 定义为:

A×B={(a,b)∣a∈A,b∈B}A×B={(a,b)∣a∈A,b∈B}

即,A×B,A×B 包含所有可能的 (a,b)(a,b) 组合。

在关系数据库中的应用:

关系数据库中的表可以看作元组的集合,因此两个表的笛卡尔积就是所有可能的行组合

笛卡尔积通常用于多表查询,但如果不加约束(如 WHERE 或 JOIN),会产生大量无意义的数据。

 关系模型的数学基础

(1) 关系代数(Relational Algebra)

关系代数是一组对关系进行操作的运算符,包括:

选择(σ):按条件筛选行,如 σ(Age > 20)(Student)

投影(π):选择特定列,如 π(Name, Major)(Student)

并集(∪)交集(∩)差集(−):集合运算。

连接(⋈)合并两个关系的相关行,如 Student ⋈ Enrollment

笛卡尔积(×):所有可能的组合。

(2):详解:

  (1) 选择(Selection, σ)

作用:按条件筛选

符号:σ<sub>条件</sub>(R)

  • 示例

    • 查询年龄大于20的学生:

      σ<sub> Age>20 </sub>(Students)
      
      StudentIDNameAge
      102Bob22

(2) 投影(Projection, π)

作用:选择指定的

符号:π<sub>属性列表</sub>(R)

  • 示例

    • 查询所有学生的姓名和专业:

      π<sub> Name, Major </sub>(Students)

      结果:

      NameMajor
      AliceComputer
      BobMathematics

(3) 并集(Union, ∪)

作用:合并两个关系(表)的所有元组,去重

要求:两个关系必须具有相同的属性(列结构)。

  • 示例

    • 查询所有学生和教师的姓名:

      π<sub>Name</sub>(Students) ∪ π<sub>Name</sub>(Teachers)

(4) 差集(Set Difference, −)

  • 作用:返回属于第一个关系但不属于第二个关系的元组。

  • 示例

    • 查询没有选修任何课程的学生:

      π<sub>StudentID</sub>(Students) − π<sub>StudentID</sub>(Enrollments)

(5) 笛卡尔积(Cartesian Product, ×)

  • 作用:返回两个关系的所有可能组合。

  • 示例

    • 计算 Students 和 Courses 的所有组合:

      Students × Courses

      结果:

      StudentIDNameCourseIDCourseName
      101Alice1Math
      101Alice2Physics
      102Bob1Math
      102Bob2Physics

3. 扩展关系运算符

(1) 连接(Join, ⋈)

  • 作用:基于条件合并两个关系的元组。

  • 类型

    • 自然连接(Natural Join, ⋈):自动匹配相同属性名的列。

    • θ-连接(Theta Join, ⋈<sub>θ</sub>):自定义连接条件(如 =><)。

  • 示例

    • 查询学生及其选修的课程:

      Students ⋈ Enrollments
      
    • 等价于:
    • σ<sub>Students.StudentID = Enrollments.StudentID</sub>(Students × Enrollments)

(2) 重命名(Rename, ρ)

  • 作用:修改关系或属性的名称。

  • 示例

    • 将 Students 重命名为 S

      ρ<sub>S</sub>(Students)

(3) 除法(Division, ÷)

  • 作用:查询满足“所有”条件的元组(如“选修了所有课程的学生”)。

  • 示例

    • 查询选修了所有课程的学生:

      π<sub>StudentID, CourseID</sub>(Enrollments) ÷ π<sub>CourseID</sub>(Courses)

3. 关系的约束(完整性规则)

(1) 实体完整性(Entity Integrity)

主键不能为NULL,确保每条记录唯一可识别。

(2) 参照完整性(Referential Integrity)

  1. 外键的值必须是另一个表的主键值,或者为 NULL

  2. 如果外键引用被删除(如删除被引用的主键记录),数据库可以采取以下策略:

    • RESTRICT / NO ACTION(默认):阻止删除(报错)。

    • CASCADE:级联删除(删除引用该主键的所有外键记录)。

    • SET NULL:将外键设为 NULL

    • SET DEFAULT:将外键设为默认值

(3) 用户定义的完整性(User-defined Integrity)

定义

由用户(开发者)定义的业务规则,通常通过 CHECKUNIQUENOT NULL 等约束实现。

确保数据符合特定的业务逻辑(如年龄必须大于 0,邮箱必须包含 @ 等)

sako——

相关文章:

  • 5、Rag基础:RAG 专题
  • Golang | 向倒排索引上添加删除文档
  • 【PCL】实现CloudCompare的连通域点云聚类功能
  • 机器学习基础——Seaborn使用
  • AI 数据中心 vs 传统数据中心:从硬件架构到网络设计的全面进化
  • Python教程(二)——控制流工具前半部分
  • 常用的性能提升手段--提纲
  • 关于华为高斯数据库出现Invalid or unsupported by client SCRAM mechanisms定位解决的过程
  • 互斥量函数组
  • 谢飞机的Java面试之旅:从Spring Boot到Kubernetes的挑战
  • rockermq多线程消费者配置
  • 【数据可视化-38】基于Plotly得泰坦尼克号数据集的多维度可视化分析
  • 目标跟踪最新文章阅读列表
  • PlatformIO 入门学习笔记(二):开发环境介绍
  • 国标GB28181视频平台EasyGBS打造生产监控智能体系,推动企业数字化升级
  • 2025蓝桥杯省赛网络安全组wp
  • 【Nova UI】十二、打造组件库之按钮组件(上):迈向功能构建的关键一步
  • 准确--如何在自己windows电脑上安装多个nodejs版本,自由切换
  • ES练习册
  • C++ AVL树的实现
  • 解放日报头版头条:“五个中心”蹄疾步稳谱新篇
  • 油电同智,安全超充!从上海车展看中国汽车产业先发优势
  • 杭州打造商业航天全产业链,请看《浪尖周报》第22期
  • 洛阳原副市长收礼品消费卡,河南通报6起违反八项规定典型问题
  • 大漠孤烟为何“直”?物理学家在唐诗中读出“不一样的美”
  • 巴印在克什米尔发生交火