当前位置: 首页 > 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——

http://www.xdnf.cn/news/185743.html

相关文章:

  • 软件功能设计视角下的能源管理系统功能清单构建与实践
  • Redis高可用架构全解析:主从复制、哨兵模式与集群实战指南
  • 2025系统架构师---黑板架构风格
  • 风控策略引擎架构设计全解析:构建智能实时决策系统
  • 探索大语言模型(LLM):自监督学习——从数据内在规律中解锁AI的“自学”密码
  • MLLM之Bench:LEGO-Puzzles的简介、安装和使用方法、案例应用之详细攻略
  • OpenSSH 漏洞 CVE-2025-26465 和 CVE-2025-26466 可引发中间人攻击和 DoS 攻击
  • 毫米波振荡器设计知识笔记
  • BeautifulSoup的详细使用说明
  • 迈锐思C1pro插件安装包【附百度网盘链接】
  • 信创系统 sudoers 权限配置实战!从小白到高手
  • Spring 与 ActiveMQ 的深度集成实践(三)
  • ARP协议(地址解析协议)
  • Unreal Niagara制作Scratch随模型发射粒子特效
  • Make学习二:makefile组成要素
  • 基于STM32、HAL库的ADS1115模数转换器ADC驱动程序设计
  • 驱动开发硬核特训 · Day 22(上篇): 电源管理体系完整梳理:I2C、Regulator、PMIC与Power-Domain框架
  • ByeCode,AI无代码开发平台,拖拽式操作构建应用
  • OpenFeign 自定义拦截器
  • 基于javaweb的SpringBoot在线电子书小说阅读系统设计与实现(源码+文档+部署讲解)
  • Java详解LeetCode 热题 100(02):LeetCode 49. 字母异位词分组(Group Anagrams)详解
  • 一、接口测试01
  • 基于Python Flask的深度学习电影评论情感分析可视化系统(2.0升级版,附源码)
  • 简单的 shell 程序
  • 德州仪器(TI)—TDA4VM芯片详解—目录
  • 十七、系统可靠性分析与设计
  • Vue3 + OpenLayers 开发教程 (六)WebGL渲染优化
  • 【Nova UI】十二、打造组件库之按钮组件(上):迈向功能构建的关键一步
  • Linux系统类型及常用操作命令总结
  • Linux一个系统程序——进度条