关系关系模式关系数据库的区别和概念以及关系的完整性约束条件
Posted 努力奋斗的张同学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关系关系模式关系数据库的区别和概念以及关系的完整性约束条件相关的知识,希望对你有一定的参考价值。
以下内容是本人利用网络资料以及课堂学习总结的学习笔记,如有错误欢迎评论区更正。
前言
这是一组关系实例
域(Domain):一组具有相同数据类型的值的集合(如:整数、实数、具有某一范围的一个整数......)
如以上实例中,所有学生的姓名的值的集合就是一个域
一、关系
关系:现实中实体与实体间的各种联系均用关系来表示。
所含概念:
- 元组:关系中每个元素叫作一个n元组,简称元组
- 属性:表中的一列即为一个属性,给每个属性起一个名称即为属性名,表中任意的属性名不能相同
- 码:【候选码:唯一标识符】【全码:关系模式中的所有属性组是这个关系模式的候选码】
二、关系模式
关系模式:(关系模式是型)(关系是值)
(关系模式是对关系的描述),例如,设有一个关系U有属性值A,B,C,则关系模式可简单描述为为U(A,B,C)
定义关系模式的方法:
1.
简化写法:
关系和关系模式的联系与区别:
联系:关系模式是对关系的描述,关系是关系模式在某一时刻的状态或内容。关系模式和关系往往笼统称为关系
区别:关系模式是静态的、稳定的,而关系时动态的、随时间不断变化的。
三、关系数据库
关系数据库:在一个给定的应用领域中,所有关系的集合构成一个关系数据库
关系数据库的型和值:
型:关系数据模式,是对关系数据库的描述
值:关系模式在某一时刻对应的关系的集合
通常称为关系数据库
四、关系的完整性约束条件
关系的完整性约束条件有
1.实体完整性:
它要求关系的主属性不能取空值
例如:
学生(学号,姓名,性别)
这里的学号作为唯一标识符,也就是主属性(主码)不能取空值
2.参照完整性:
在关系中实体以及实体之间的联系使用关系来描述的,自然存在着关系的引用关系。
例如(1):
学生关系内部的一个一对多关系
学生(学号,姓名,专业号,班长)
在一个二维表中,我们可知,班长这一栏是另一个学生的学号
也就是说,学生关系内部中
学生是主码
班长是外码
所以班长这一栏有参照完整性可知可取;
1.空值
2.等于另一个学生的学号
例如(2):
一对多(学生-专业号)
学生(学号,姓名,性别,专业号)
专业号(专业号,专业名)
学生关系引用了专业关系的主码,这里的学号和专业号都是主码
但是对于学生关系中专业号不是主码,我们称这个专业号是这个学生关系的一个外码
专业关系是被参照关系
学生关系为参照关系
我们参照完整性约束条件可知:
这里在学生关系中的专业号这个外码可以有两种取值情况:
1.空值
2.等于专业关系中的专业号
例(3):
多对多关系:
学生(学号,姓名,课程号,...)
课程(课程号,课程名称,学分)
选课(学号,课程号,成绩)
这里学号和课程号是选修关系的外码
学生关系和课程关系均为被参照关系
选修关系为参照关系
参照完整性:
1.选修关系的主属性不能取空值(按照实体完整性原则)
2.选修关系的学号和课程号与学生关系的学号和课程关系的课程号相等。
三、用户定义的完整性
例如:
学生(学号,姓名,课程号,性别,....)
课程(课程号,课程名,学分);
选修(学号,课程名,成绩)
如
这里学生的性别只能取“男”,“女”
学分只能取1-...分
成绩只能取1-100分
等等
数据库系统概念:基础的SQL
public class DataBase { public static void main() { } } /* 3.1 SQL查询语言概览 SQL语言有一下几个部分: 数据定义语言:提供定义关系模式,删除关系以及修改关系模式的命令 数据操纵语言:提供从数据库中查询信息,以及在数据库中插入元组,删除元组,修改元组的能力 完整性:定义完整性约束的命令 视图定义: 事务控制:定义事务的开始和结束的命令 嵌入式SQL和动态SQL:嵌入式和和动态SQL定义SQL语如何嵌入到通用编程语言 授权:定义了包括对关系和视图的访问权限命令 */ /* 3.2.1 基本类型 SQL标准支持多种固有类型: char(n) varchar(n) int smallint numeric(p,d):定点数,精度由用户指定。 float(n):精度至少为n位的浮点数 read,double precision:浮点数与双精度浮点数,精度与机器相关 将一个char类型与varchar类型进行比较的时候,由数据库系统决定要不要在varchar后加 上空格,以使长度一致。作者建议,我们始终使用varchar类型来避免这种情况。 */ /* 3.2.3 基本模式定义 create table department (dept_name varchar(20), building varchar(15), budget numeric(12.2), primary key(dept_name)); */ /* 3.3.2 多关系查询 select name, instructor, dept_name, building from instructor, department where instructor.dept_name = department.dept_name 通过from字句定义了一个在该字句中所列出关系的笛卡尔积。笛卡尔积运算从两个关系中 合并元组,但不同于连接运算的是,其结果也包含两个关系的所有对,无论它们的属性是 否匹配。 通常说来,一个SQL查询的含义可以理解如下: 1.为from字句中列出的关系产生笛卡尔积。 2.在步骤1的结果上应用where字句中指定的谓词。 3.对于步骤2结果中的每个元组,输出select子句中指定的属性(或表达式的结果) */ /* 3.3.3 自然连接 自然连接运算作用与两个关系,并产生一个关系作为结果。不同于两个关系的笛卡尔积,自然连接 只考虑那些在两个挂你模式中都出现的属性上取值相同的元组对。 原代码: select name, course_id from instructor, teaches where instructor.Id = teaches.ID 改进为: select name,course_id from instructor natural join teachers 代码分析: select name, title from instructor natural join teachers, course where teachers.course_id = course_course_id; 先计算出instructor和teachers的自然连接,然后计算该结果和course的笛卡尔积 为了发扬自然连接的优点,同时避免不必要的相等属性带来的危险,SQL提供了一种自然连接 的构造形式,允许用户来指定需要哪些列相等。 select name, title from (instructor natural join teaches)join course using(course_id) */ /* 3.4 附加的基本运算 3.4.1 更名运算 3.4.2 字符串运算 SQL允许在字符串上有多种函数,如串联、提取字串、计算字符串长度、大小写转换、去掉字符串后面的空格等 在字符串上可以使用立刻操作符来实现模式匹配,我们使用两个特殊的字符来 描述模式: %:匹配任意字串 _:匹配任意字符 为了使模式中能够包含特殊模式的字符(%与_),SQL允许定义转义字符。转义字符直接放在特殊 字符的前面。我们在like运算中使用escape关键词来定义转义字符。 like ‘ab\%cd%‘ escape ‘‘ //匹配以ab%cd开头的字符串 SQL 允许使用not like比较运算符搜寻不匹配项。 */ /* 3.4.3 select子句中的属性说明 3.4.4 排列元素的显式次序 排序可以在多个属性上进行。 select * from instructor order by salary desc, name asc 3.4.5 where子句谓词 select name from instructor where salary between 90000 and 100000 还可以使用not between SQL允许我们使用记号(v1,v2,v3)来表示一个分量值分别为v1,v2,v3的n维元组。 在元组上应用比较运算符,按字典顺序进行比较运算。 select name, course_id from instructor, teaches where (instructor.ID,dept_name) = (teaches.ID,"Biology‘); */