大家好,又见面了,我是你们的朋友全栈君。
目录
1、单一的数据结构:关系(二维表):记录一个班的人的成绩,一个人为记录,一个人的数据库成绩为字段,一个人的学号、身份证号为关键字
1、实体完整性(Entity Integrity):主属性不空
2、参照完整性(Referential Integrity),也叫引用完整性:引入外部关系的主属性为空或外部值
(3) SET-DIFFERENCE(差):R-S:属于R不属于S
(4) CROSS-PRODUCT(积):R ×S:如图所示
(1) Condition Joins(条件连接):两个表中满足条件的行,组成新的表
(2)等值连接 (Equijoin):两个表中属性相等的行组成新的行
(3) Natural Join(自然连接):列名字相同的列,属性相同提出来
使用pgAdmin 4给教师信息表(TEACHER)创建外键约束
使用pgAdmin 4给教师信息表(TEACHER)创建外键约束的处理
使用pgAdmin 4给教师信息表(TEACHER)创建check约束
第2章 数据库关系模型
本章要求:
1、掌握关系、关系模式、关系数据库等基本概念
2、掌握关系的三类完整性的含义
3、掌握关系代数运算
4、PostgreSQL项目实践
1、关系模型的基本概念
层次、网状数据库结构复杂,需要使用者有较强专业知识,使用很不方便。
程序员必须经过良好的培训,对所使用的系统有深入的了解才能用好系统。
关系数据库是应用集合的方法来处理数据的。
它具有结构简单、理论基础坚实、数据独立性高以及提供非过程性语言等优点。
关系数据模型-现有主流DBMS支持的逻辑模型
关系的概念:用于描述数据本身、数据之间联系,俗称“表”。
域(Domain):相同数据类型的集合
是一组具有相同数据类型的值的集合,具有数据类型及长度、域名、取值范围。
关系模式:关系名和属性
由关系名、各个属性、属性的域以及属性的依赖关系构成。
关系实例:具体的数据集合
由真实记录或元组构成的集合,称为关系实例,简称关系;
每个元组的字段必须对应关系模式中的字段。
一、关系的数学定义
笛卡尔积(Cartesian Product):设D1、D2、…、Dn是n个域, 则它们的笛卡尔积为
D1×D2×…×Dn={(d1,d2,…,dn) | di ∈ Di, i=1,2,…,n}
其中每一个元素称为一个n元组(n-tuple), 简称元组;
元组中的每个值di称为一个分量(component).
例子:D1={1,2,3} D2={4,5}
D1xD2={(1,4)(1,5)(2,4)(2,5)(3,4)(4,5)}
(1,4)是二元组,其中1为分量
笛卡尔积可以写成一个二维表
例如:
设 D1={张三,李四},
D2={数学,语文},
D3={优,良}
则D1×D2×D3可用二维表表示为:
关系(Relation):笛卡尔积的子集
笛卡尔积D1×D2×…×Dn的子集合,记作 R(D1,D2,…,Dn)
R:关系名
n为关系的目或度
数学意义上的关系:可无限个元组,元组元素不可交换
(1)笛卡尔积不满足交换律:元组元素不可交换
即:(d1,d2,…,dn) ≠ (d2,d1,…,dn)
(2)数学意义的关系可以是无限个元组的集合。
数据库的关系:有限的元组,元组元素可交换
数学意义的关系不适合数据库的实际应用,必须做如下限制:
(1)数据库关系模型中的关系必须是有限的元组集合
(2)数据库关系模型中的属性列表的顺序是可交换的,允许任意顺序;具有数据库中关系满足交换律。
4、说明
① 关系是一个二维表。
② 每行对应一个元组。
③ 每列可起一个名字,称为属性。属性的取值范围为一个域,元组中的一个属性值是一个分量。
5、关系的性质
① 列是同质的,即每列中的数据必须来自同一个域
② 每一列必须是不可再分的数据项(不允许表中套表,即满足第一范式)
③ 不能有相同的行
④ 行、列次序无关
二、关系模型
三部分:关系数据结构、关系操作集合、关系的完整性
(一)数据结构
1、单一的数据结构:关系(二维表):记录一个班的人的成绩,一个人为记录,一个人的数据库成绩为字段,一个人的学号、身份证号为关键字
不论是实体还是实体间的联系都用关系表示。
- 实体值 → 关系的元组,在关系数据库中通常称为记录
- 属性值 → 元组的分量,在关系数据库中通常称为字段
- 关键字(码):唯一标识一个元组的属性组
关键字可以有多个,统称候选关键字。
在使用时,通常选定一个作为主关键字。
关键字的诸属性称为主属性,其它为非主属性。
2、关系模式:关系的描述:关系数据库包括所有关系
包括关系名、诸属性名、属性域约束、属性间的依赖。
一个元组为关系的一个值,也称为记录
关系数据库模式:对关系数据库的描述,包括域的定义及在域上定义的所有关系模式。
关系数据库:所有实体及实体间联系的关系的集合。是某时刻所有关系模式对应的关系的集合。
简单地讲:关系数据模型是表现为二维表的形式
如:学生的基本信息
学号 |
姓名 |
住址 |
性别 |
兴趣爱好 |
20060101 |
张江 |
04-201 |
男 |
排球 |
20060102 |
魏明 |
04-203 |
男 |
足球 |
20060103 |
王昆 |
05-102 |
女 |
羽毛球 |
20060104 |
程香 |
05-102 |
女 |
羽毛球 |
20060105 |
刘鹏 |
04-405 |
男 |
游泳 |
20060106 |
王德启 |
04-203 |
男 |
排球 |
20060107 |
武飞 |
04-205 |
男 |
篮球 |
20060108 |
刘用 |
04-102 |
男 |
篮球 |
20060109 |
程文 |
05-304 |
女 |
乒乓球 |
3、关系的三种类型
基本关系:客观存在的基本表
查询表:由基本表按一定条件检索得到的结果
视图(View): 从一个或多个基本关系上导出的关系。它不对应实际的存储数据,是一个虚关系,然而可永久存在。相当于关系模型的外模式。
由于二维表的存储策略非常简单,关于数据库的物理存储完全由DBMS自动完成。因此,在关系模型中不需要与内模式相应的概念。
(二)关系操作
1、种类:查询和维护
查询操作:选择、投影、连接、除、并、交、差
维护操作:增加、删除、更新
2、特点:
① 集合操作,一次操作
② 可存取多个元组
③ 非过程化语言:用户只需告诉做什么(What)不需告诉怎么做(How)
④ 数据定义DDL、数据操纵DML、数据控制语言集成在一起DCL:权限控制、完整性控制等
- 一次一集合(关系型)
- 一次一记录(非关系型)
三)关系模型的三类完整性
1、实体完整性(Entity Integrity):主属性不空
基本关系的所有主属性不能取空值
原因:基本关系<—>实体集
—>实体必可区分(标识符)
—>主关键字是唯一性标识,故不能空
2、参照完整性(Referential Integrity),也叫引用完整性:引入外部关系的主属性为空或外部值
若基本关系R含有与另一个基本关系S的主关键字相对应的属性组F(F称为R的外键或外部码),
则R中每个元组在F上的值或为空值,或等于S中某个元组的主关键字值。
例: 职工关系 EMP(ENO,ENAME,DNO)
部门关系 DEPT(DNO,DNAME)
DNO为DEPT的主关键字
DNO为EMP的外键,只能取空值或DEPT中某关键字的值
又如:学生关系(SNO,SNAME,AGE,SEX)
课程关系(CNO,CNAME)
选课关系(SNO,CNO,G)
3、用户定义的完整性:约束条件
用户自定义完整性是针对某一具体关系数据库的约束条件,
它反映某一具体应用所涉及的数据必须满足的语义要求。
主要包括非空约束、唯一约束、检查约束、缺省值约束、外键约束
注意:定义完整性约束后,当数据库数据发生变化时,DBMS会自动检查,从而不必在应用程序中作检查
2、RDBS的数据操纵语言:关系代数
关系代数的运算对象是关系,运算结果也为关系。
其运算按运算符的不同可分为两类。
一、传统的集合运算:并交差笛卡尔积
1、并(Union):R ∪ S = { t | t∈R∨t∈S}
2、交(Intersection):R ∩ S = { t | t∈R∧t∈S}
3、差(Difference): R − S = { t | t∈R∧tS}
4、笛卡尔积(广义): R × S = { | tr ∈ R ∧ ts ∈ S}
(1) UNION(并):R∪S:相加除同
概念:包含R和S中的所有元组,要求R和S兼容(字段个数、类型[名字]) ,结果模式与R一致。
(2) INTERSECT (交):R∩S:相同的出来
概念:包含R、S中相同的元组,R、S须兼容。
(3) SET-DIFFERENCE(差):R-S:属于R不属于S
概念:包含在R中而不在S中的元组,R、S兼容。
(4) CROSS-PRODUCT(积):R ×S:如图所示
概念:结果包含R和S中所有字段。如果有相同的字段名,
则在结果字段来源的表。也叫“笛卡尔乘积”。
说明:
①以上定义中,R、S本身也可以是关系代数表达式;
②由于R∩S=R-(R-S),故R∩S实际上是多余的 。
专门的关系运算
学生-课程数据库:学生Student、课程Course和选修SC
选择与投影操作
1、选择:在关系R中选出满足F条件的行形成新的关系
(Selection),又称限制(Restriction),从行的角度的运算
σF(R):在关系R中选出满足条件F的元组形成新的关系。(F:条件表达式)
2、投影:在关系R中选出几列形成新的关系
(Projection)从列的角度的运算
πA(R):在R中选出若干属性列组成一个新关系。(A:属性组)
投影后若有重复行,则自动保留一个
- 共同点:为一元关系操作符。
- 选择:从关系实例中选择出满足条件的行。操作符:σ
- 投影:从关系实例中抽出所需的一列或多列。操作符:π
- 条件表达式中的比较操作符:>,>=,<,<=,=,≠。
3、连接(Join)
从两个关系的笛卡尔积中选取属性间 满足条件AθB的元组。
A:R中属性
B:S中属性
θ:比较运算符
连接是同时处理多个关系的重要运算
- 若仅有θ为等号的条件,称为等值连接
- 当θ为等号且A、B两属性相同时,称为自然连接
- 自然连接将去掉重复属性
种类:条件连接、等值连接、自然连接、外连接
(1) Condition Joins(条件连接):两个表中满足条件的行,组成新的表
概念:
说明:条件c会用到R和S的属性,如R.name,R.i(位置)。
例5: 关系R和关系S 如下所示
(2)等值连接 (Equijoin):两个表中属性相等的行组成新的行
概念:是条件连接的特例,即连接条件由等式组成,如
R.name1=S.name2。
从关系R与S的广义笛卡尔积中选取A、B属性值相等的那些元组,即等值连接为:
示例
(3) Natural Join(自然连接):列名字相同的列,属性相同提出来
概念:是等值连接的特例,即:等式中所涉及的字段名相同,
这时可忽略连接条件,即为:
4、除(Division):过于复杂且不常用,了解即可
用途:在表达某些查询时有用,例如“查询已选修了所有课程的学生学号”。
商并不经常使用,所以,数据库系统并没有将其作为实际操作符来实现。
概念:如存在R(X,Y)和S(Y,Z)两个关系,X,Y, Z 分别为属性组
(如: X={x1,x2,…,xn},即X是由n列构成 ,Y,Z类似),
则R ÷ S结果得到一个新的关系P(X),
P是 R中满足下列条件的元组在 X属性列上的投影:
元组在X上分量值x的像集Yx包含S在Y上投影的集合。
其中Yx为X在R中的象集,x = tr[X],即x在R中存在与∏y(S)中的每个元素对应的记录,除操作是同时从行和列角度进行运算。
示例:
设关系定购和零件数据,如表1和表2,求定购÷零件
R÷S的具体计算过程如下:
① 找出关系R和关系S中相同的属性,即Y属性。在关系S中对Y做投影(即∏Y(S));
② 设被除关系R与S的不相同的列为 X,对关系R在X上做消除重复值的投影(即: ∏x(R) );
③ 对①②步求出的关系做笛卡尔积: ∏x(R)×∏Y(S)
④ 对③步的结果与R做差: (∏x(R) ×∏Y(S))-R
⑤ 对④步的结果做投影∏x((∏x(R) ×∏Y(S))-R)
⑥ R÷S就是②-⑤.
示例:计算定购÷零件的过程
5、外连接(Outer Joins)
概念:涉及有空值的自然连接,是自然连接的特例 。
说明:自然连接是寻找相同字段值相等的行。
但如果一个关系中的该字段在另一关系中没有相等值的行,
自然连接不会显示该行,而外连接则将以NULL值形式显示该行。
外连接的种类:左右全
① 左外连接(LEFT OUTER JOIN)
② 右外连接(RIGHT OUTER JOIN)
③ 全外连接(FULL OUTER JOIN)
说明:
① 与外连接对应,前面三种连接为内连接(Inner Join);
② 关系代数中没有外连接的描述,但SQL标准中有相应的三种外连接查询语句;
左外连接
对于RS,如果在S中没有匹配R的行,则以NULL值表示,
最后的结果是以左边的关系R为准,即左边关系中的所有行均应出现在结果中,如果在S中没有对应的行,则以NULL表示之。
右外连接
对于RS,如果在R中没有匹配S的行,则以NULL值表示,最后的结果以右边的关系S为准。
全外连接
对于RS,没有匹配的R和S的行,也都出现于结果中
PostgreSQL数据库关系操作实践
- 掌握创建PostgreSQL关系数据库方法
- 掌握在PostgreSQL数据库中创建关系表方法
- 掌握在PostgreSQL数据库中定义关系表的主键、代理键与外键方法
- 掌握在PostgreSQL数据库中定义关系表的实体完整性、参照完整性、用户自定义完整性方法
一、项目案例——选课管理系统数据库关系表实践
本节将围绕 “ 选课管理系统 ” 项目案例,在PostgreSQL数据库中创建关系表及其完整性约束,并理解本章所学习的关系模型基本概念和关系操作原理。
选课管理数据库(CurriculaDB)
• 课程表(COURSE)
• 教师表(TEACHER)
• 开课计划表(PLAN)
• 学生表(STUDENT)
• 选课注册表(REGISTER)
• 学院信息表(COLLEGE)
(1) 使用pgAdmin4创建数据库
指定数据库名和拥有者
数据库创建成功
课程表(COURSE)
字段名称 |
字段编码 |
数据类型 |
字段大小 |
必填字段 |
是否为键 |
课程编号 |
CourseID |
文本 |
4 |
是 |
主键 |
课程名 |
CourseName |
文本 |
20 |
是 |
否 |
课程类别 |
CourseType |
文本 |
10 |
否 |
否 |
学分 |
CourseCredit |
数字 |
短整型 |
否 |
否 |
学时 |
CoursePeriod |
数字 |
短整型 |
否 |
否 |
考核方式 |
TestMethod |
文本 |
10 |
否 |
否 |
教师表(TEACHER)
字段名称 |
字段编码 |
数据类型 |
字段大小 |
必填字段 |
是否为键 |
教师编号 |
TeacherID |
文本 |
4 |
是 |
主键 |
姓名 |
TeacherName |
文本 |
10 |
是 |
否 |
性别 |
TeacherGender |
文本 |
2 |
否 |
否 |
职称 |
TeacherTitle |
文本 |
6 |
否 |
否 |
所属学院 |
CollegeID |
文本 |
3 |
否 |
外键 |
联系电话 |
TeacherPhone |
文本 |
11 |
否 |
否 |
开课计划表(PLAN)
字段名称 |
字段编码 |
数据类型 |
字段大小 |
必填字段 |
是否为键 |
开课编号 |
CoursePlanID |
自动编号 |
长整型 |
是 |
代理键 |
课程编号 |
CourseID |
文本 |
4 |
是 |
外键 |
教师编号 |
TeacherID |
文本 |
4 |
是 |
外键 |
地点 |
CourseRoom |
文本 |
30 |
否 |
否 |
时间 |
CourseTime |
文本 |
30 |
否 |
否 |
备注 |
Note |
文本 |
50 |
否 |
否 |
学生表(STUDENT)
字段名称 |
字段编码 |
数据类型 |
字段大小 |
必填字段 |
是否为键 |
学号 |
StudentID |
文本 |
13 |
是 |
主键 |
姓名 |
StudentName |
文本 |
10 |
是 |
否 |
性别 |
StudentGender |
文本 |
2 |
否 |
否 |
出生日期 |
BirthDay |
日期 |
短日期 |
否 |
否 |
专业 |
Major |
文本 |
30 |
否 |
否 |
手机号 |
StudentPhone |
文本 |
11 |
否 |
否 |
选课注册表(REGISTER)
字段名称 |
字段编码 |
数据类型 |
字段大小 |
必填字段 |
是否为键 |
注册编号 |
CourseRegID |
自动编号 |
长整型 |
是 |
代理键 |
开课编号 |
CoursePlanID |
数字 |
长整型 |
是 |
外键 |
学号 |
StudentID |
文本 |
13 |
是 |
外键 |
备注 |
Note |
文本 |
30 |
否 |
否 |
学院信息表(COLLEGE)
字段名称 |
字段编码 |
数据类型 |
字段大小 |
必填字段 |
是否为键 |
学院编号 |
CollegeID |
文本 |
3 |
是 |
主键 |
学院名称 |
CollegeName |
文本 |
40 |
是 |
否 |
学院介绍 |
CollegeIntro |
文本 |
200 |
否 |
否 |
学院电话 |
CollegeTel |
文本 |
30 |
否 |
否 |
使用pgAdmin 4创建PostgreSQL数据库表
使用pgAdmin 4创建学院信息表(COLLEGE)
使用pgAdmin 4创建教师信息表(TEACHER)
使用pgAdmin 4给教师信息表(TEACHER)创建外键约束
使用pgAdmin 4给教师信息表(TEACHER)创建外键约束的处理
使用pgAdmin 4给教师信息表(TEACHER)创建check约束
单元测试
第2章 数据库关系模型-单元测验-数据库与机器学习_aiqq136的博客-CSDN博客第2章 数据库关系模型—数据库与机器学习作业常用的关系查询操作包括选择、投影、连接、并、交等。 v实体完整性是指关系表的属性组成必须是完整的。 x自然连接是一种等值连接。 v在参照完整性中,可以定义级联操作。 v用户自定义完整性可以实施数据的业务约束。 v每个关系是一个二维表,但二维表不一定是关系。 v关系中复合键至少包含两个属性。 v代理键是为了唯一标识关系的不同元组,需要在表单或报表中显示出来。 x…https://blog.csdn.net/aiqq136/article/details/123429997
第3章 数据库操作SQL语言
第4章 数据库设计与实现
第5章 数据库管理
第6章 数据库应用编程
第7章 NoSQL数据库技术
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/160191.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...