首页 > 数据库 >数据库系统笔记 - chap2 - 关系模型

数据库系统笔记 - chap2 - 关系模型

时间:2023-10-16 18:46:56浏览次数:33  
标签:Sno 笔记 CHAR 完整性 chap2 KEY 数据库系统 NULL 属性

关系数据结构

5.png

关系代数

A set of fundamental operations to retrieve and manipulate tuples in a relation.

These operations take one or some relations as inputs, and outputs a new relation.

并、交、差、笛卡尔积与集合运算相似。

选择(Select)

行视角,选择出符合条件的若干元祖集合。

2023-10-04-21.47.03.png

符号: \(\sigma_F(R)\)
举例: \(\sigma_{Name = 'qaq'}(R)\)
SQL写法: SELECT * FROM R WHERE Name = 'qaq'

投影(Projection)

列视角,选择出若干属性列组成新的关系。

2023-10-04-21.47.14.png

符号: \(\Pi_{A_1, A_2, ..., A_m}(R)\)
举例: \(\Pi_{Name, id}(\sigma_{Name = 'qaq'}(R))\)
SQL写法: SELECT Name, id FROM R WHERE Name = 'qaq'

投影运算会把新关系中的重复行删去(集合的不可重原则)。

连接(Join)

18.png

2023-10-04-21.54.21.png

符号: \(R \Join S _{A \theta B}\)
其中 \(A, B\) 是 \(R\) 与 \(S\) 上的度数相等且可比较的属性组,\(\theta\) 是比较运算符。
SQL: SELECT * FROM R JOIN S USING (ATTRIBUTE1, ATTRIBUTE2, ...)

若 \(\theta\) 为 \(=\),则叫做等值连接
自然连接是一种特殊的等值连接,只不过是在等值连接的基础上去掉结果中重复的属性列。

关系的完整性

关系的完整性约束是对关系正确性的限定。关系的完整性分为实体完整性参照完整性用户定义完整性

实体完整性

由于主码 Primary Key 是区分实体的唯一性标识,所以关系 \(R\) 的主码不能取空值 NULL (若主码由多个属性构成,则所有这些属性都不能取空值)。

CREATE TABLE Student (
    Sno CHAR(9) PRIMARY KEY,    // 列级
    Sname CHAR(8),
    Ssex CHAR(2) CHECK(Ssex IN ('男', '女')),
);

CREATE TABLE Student (
    Sno CHAR(9),
    Sname CHAR(8),
    Ssex CHAR(2) CHECK(Ssex IN ('男', '女')),
    PRIMARY KEY (Sno)           // 表级
);

CREATE TABLE SC (
    Sno CHAR(5),
    Cno CHAR(3),
    Grade int,
    PRIMARY KEY (Sno, Cno)      // 表级,且只能是表级
);

参照完整性

参照完整性定义了外码 Foreign Key 与主码之间的引用规则,即外码的取值要么是 NULL (若外码包含多个属性,则这些属性的值均取 NULL ;但假如外码中的属性是主属性,则不能取 NULL ),要么是被参照关系中某元组在该属性的取值。(“你从别人那里引用到的任何值,别人得有才能给你引用”)

CREATE TABLE SC (
    Sno CHAR(5),
    Cno CHAR(3),
    Grade int,
    PRIMARY KEY (Sno, Cno),    // 表级定义实体完整性
    FOREIGN KEY (Sno) REFERENCES S(Sno),  //表级定义参照完整性
    FOREIGN KEY (Cno) REFERENCES C(Cno)   //表级定义参照完整性
);

用户定义完整性

用户规定数据必须满足的一系列要求,包括属性上的约束与元组上的约束。

属性上的约束
CREATE TABLE SC (
    Sno CHAR(5) NOT NULL    // 约束 Sno 非空
    Cno CHAR(9) UNIQUE NOT NULL,    // 约束 Cno 唯一且非空
    Age SMALLINT CHECK (Age >= 18 AND Age <= 23),   // 约束 Age 的范围在 [18, 23] 之间
    PRIMARY KEY (Sno, Cno),
);
元组上的约束

可以在元组层面上限制不同属性之间的取值以及相互约束关系。

CREATE TABLE Student(
    Sno CHAR(9), 
    Sname CHAR(8) NOT NULL, 
    Ssex CHAR(2),  
    Sage SMALLINT, 
    Sdept CHAR(20),  
    PRIMARY KEY (Sno), 
    CHECK (Ssex='女' OR Sname NOT LIKE 'Ms.%') // 约束了学生性别为男时,其名字不能以 Ms. 开头
);

完整性约束命名子句

CONSTRAINT <完整性约束条件名> <完整性约束条件>

<完整性约束条件> 包括 NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK 短语等。

CREATE TABLE Student(
    Sno NUMERIC(6) 
    CONSTRAINT C1 CHECK (Sno BETWEEN 90000 AND 99999),
    Sname CHAR(20)
    CONSTRAINT C2 NOT NULL,
    Sage NUMERIC(3)
    CONSTRAINT C3 CHECK (Sage < 30),
    Ssex CHAR(2)
    CONSTRAINT C4 CHECK (Ssex IN ('男','女')),
    CONSTRAINT StudentKey PRIMARY KEY(Sno),
    CONSTRAINT SnameKey FOREIGN KEY(Sname) REFERENCES C(Sname)
);

标签:Sno,笔记,CHAR,完整性,chap2,KEY,数据库系统,NULL,属性
From: https://www.cnblogs.com/BeyondLimits/p/17768075.html

相关文章

  • 数据库系统笔记 - chap3 - SQL
    IntroductiontoSQLSQL(StructuredQueryLanguage),是关系数据库的标准查询语言。SQL的特点:综合统一SQL集数据定义语言(DDL),数据操纵语言(DML),数据控制语言(DCL)功能于一体。高度非过程化SQL只要提出“做什么”,而无须指明“怎么做”,因此无须了解存取路径。存取路径的选择......
  • 微机原理笔记 - chap1 - 绪论
    Intel微处理器的发展1978年:8086/8088微处理器出现,首枚16位微处理器。微型计算机概述计算机加电以后,首先运行BIOS(BasicInputOutputSystem)系统,进行硬件的检查、初始化(加电时寄存器的内容是随机的)、给操作系统提供编程接口等。通过硬件驱动程序、BIOS/UEFI提供的编程......
  • 微机原理笔记 - chap2 - Intel单核/多核处理器
    单核处理器(8086/8088)8086/8088功能特性第一次将流水线思想引进微处理器:指令级流水。存储器分段管理机制引入处理器,扩大寻址能力。内存地址分段:寄存器最多存16位,故有些寄存器用来当段寄存器,代表着地址的高16位(低4位默认为0)。再加上段内偏移寄存器的值(低16位),就可以......
  • 微机原理笔记 - chap3 - Intel处理器指令系统及汇编语言
    汇编语言基础数据定义:数据传送、算术运算、跳转指令MOV指令“先目的操作数,再源操作数。”MOV指令需要遵循的规则:两个操作数的尺寸必须一致。两个操作数不能同时为内存操作数。movreg,regmovmem,regmovreg,memmovmem,immmovreg,immmovvar2,var1......
  • 数据库系统笔记 - chap1 - 绪论
    数据库发展史人工管理阶段(1950)\(\Rightarrow\)文件系统阶段(1950-1960)\(\Rightarrow\)数据库系统阶段(1960-)数据库管理系统(DBMS)的出现,使得数据存储、数据管理和数据应用分离。数据库管理系统采用外模式-模式-内模式的三级模式,外模式/模式和模式/内模式的两级映象结构。数......
  • 《Mastering the FreeRTOS Real Time Kernel》读书笔记(7)事件组
    8.事件组之前已经介绍了多任务之间的交流桥梁,包括了队列和信号量。与队列和信号量不同:事件组允许任务在“阻塞”状态下等待一个或多个事件的组合发生。事件组在事件发生时,取消等待同一事件或事件组合的所有任务的阻塞状态。事件组的这些独特属性可用于同步多个任务、向多个任务......
  • 《Mastering the FreeRTOS Real Time Kernel》读书笔记(6)资源管理
    7.资源管理(互斥量)在多任务系统中,如果一个任务开始访问资源,但在从运行状态转换出来之前没有完成访问,则可能会出现错误。如果任务使资源处于不一致状态,则任何其他任务或中断对同一资源的访问都可能导致数据损坏或其他类似问题。这里的资源管理,应该是指计算机的外设资源,比如LCD显示......
  • Java常见集合类学习笔记
    List1.ArrayListVectorLinkedList区别​ ArrayList和Vector底层实现基本相同,都是基于数组实现的,只是Vector的方法用synchronized修饰;所以ArrayList是线程不安全的,Vector是线程安全的。​ LinkedList底层基于双向链表实现,方法没有用synchronized修饰,线程不安全。2.数组和......
  • Shell脚本学习笔记
    导航目录导航Shell脚本入门脚本格式第一个Shell脚本helloworldShell中的变量系统变量常用系统变量案例实操自定义变量基本语法变量定义规则案例实操特殊变量$n基本语法案例实操特殊变量$#基本语法案例实操特殊变量$*、$@基本语法案例实操特殊变量$?基本语法案例实操运算符基本语......
  • LCA学习笔记
    定义最近公共祖先简称LCA(LowestCommonAncestor)。两个节点的最近公共祖先,就是这两个点的公共祖先里面,离根最远的那个。求法有多种求法,目前就学习了倍增和dfs序求LCA,等后面学新的了再加上。前置知识:ST表,dfs序。为方便说明,下面全都是求\(x\),\(y\)的LCA,设其为\(z......