电子科技大学《数据库原理及应用》(更新完毕)

前言

本文章适用于本科生的期中和期末的复习,如果时间不够,建议阅读本人的大题冲刺章节,电子科技大学的考生请在复习前先看必读内容。

大题冲刺:数据库关系理论大题详解-CSDN博客        候选码和范式(第五章)​​​​​​​

                数据库设计大题详解-CSDN博客        E-R图和关系模型(第四章)

                数据库事务调度大题详解-CSDN博客        锁(第五章)

                数据库关系语言大题详解-CSDN博客        关系语言(第二章)

                SQL语言实践-CSDN博客        SQL语法(第三、五、六章)

第一章(主要是概念)

##1.数据库的概念

数据库是一种按照特定数据模型组织,存储管理数据的文件的集合

优势:可以长久保存,可以快速访问

数据模型:描述事物对象的数据结构组成,数据语义联系,数据约束的抽象结构及其说明

数据模型包括数据结构(静态特征),数据操作(动态特征)数据约束(前两者的联系制约)

###2.四大概念

数据:数据库中储存的基本对象

数据库:按照一定的特定数据模型组织,描述和储存的文件集合

数据库管理系统(DBMS):创建数据库,管理数据库,维护数据库,并提供外部对数据库访问的系统软件

数据库系统:在计算机系统中引入数据库后的系统构成,是基于数据库进行数据管理与信息服务的软件系统

数据库系统的组成:用户,数据库应用程序,数据库管理系统和数据库

关系数据库中的数据内容:用户表(用户数据),系统表(元数据,索引数据,运行数据)

关系数据库的对象组织:

3.数据库应用系统

数据库应用系统类型:业务处理系统,管理信息系统(MIS),决策支持系统

数据库系统应用结构:单机用户结构,集中式结构,客户/服务器结构,分布式结构

数据库应用系统生命周期:需求分析,系统设计,系统实现,系统测试,系统运行和维护

4.典型数据库管理系统

数据库管理系统类型分类:

1.按用途分类:通用DBMS,专用领域DBMS

2.按用户数分类:单用户DBMS,多用户DBMS

3.按系统部署分类:集中式DBMS,分布式DBMS

4.按使用场景分类:桌面型DBMS,企业型DBMS

5.按软件版权分类:产品DBMS,开源DBMS

5.PostgreSQL对象-关系数据库系统软件

PostgreSQL数据库管理系统软件由客户端功能程序和服务器端功能程序组成

讨论:关系数据库是否适合大数据应用的处理?

取决于大数据的作用,例如:工商银行有10亿的用户,适合关系数据库,而数据类型不固定时,可能不适合关系型数据库       

第二章

1.实体与关系

实体:包含有数据特征的事物对象在概念模型世界中的抽象名称

关系:是指具有关系特征、用于存放实体数据的二维表(每个位置有一个元素,单值性)。关系也常被称为关系表

关系特征:

表中每行存储实体的一个实例数据
表中每列包含实体的一项属性数据    表中单元格只能存储单个值
不允许有重复的行   不允许有重复的列   列顺序可任意    行顺序可任意
关系的数学定义习题:

##2.关系键、关系模式(为后面做铺垫)

键: 关系中,可以用来唯一标识元组的属性列(判断方法:只要是该属性列内容都是唯一的,就是键),其他属性列都为非键
复合键: 关系中用来唯一标识元组的多列作为键。
候选键: 可能有多个列均适合作为键,将其中每个都称为候选
#主键关系表中最有代表性的一个候选键,每个关系表中只能定义一个主键。
        (磁盘中存放的所有记录排列顺序都按主键的顺序存放)
主键作用:
唯一标识关系表的每行(元组)
与关联表的外键建立联系,实现关系表之间连接
数据库文件使用主键值来组织关系表的数据存储
数据库使用主键索引快速检索数据
代理键: 采用 DBMS 自动生成的数字序列作为关系表的主键
                作用: DBMS 自动生成的数字序列作为主键,可替代复合主键 ,以便获得更高 性能 的数据 访问 操作处理。
关系模式的语句表示
RELATION_NAME (Colunm01, Colunm02, …,LastColunm) 
//关系名        (主键属性,  属性2,    …, 属性x)

3.关系模型原理

关系模型: 是一种基于 二维表结构 存储数据 实体及实体间联系的数据模型
数据操作
数据关系约束:关系表中实体数据完整性、关联表之间数据一致性等要求,一般由业务需求来确定

在关系模型中,可定义关系表的数据约束如下:

属性列取值类型
属性列取值范围
属性列取值是否唯一
属性列是否允许空值

关联表的参照完整性约束

关系模型完整性: 在关系数据模型中对关系实施的完整性约束。

完整性约束作用

消除关系表的元组重复存储
保持关联表的数据一致性
实现业务数据规则

关系模型完整性约束组成

实体完整性约束
参照完整性约束
 用户自定义完整性约束
实体完整性: 在关系表中实施的主键取值约束,以保证关系表中的每个元组可以被唯一标识。(实质就是主键不能为空)

实体完整性约束规则:每个关系表中的主键属性都不允许为空值NULL),否则就不可能标识实体。现实世界中的实体是靠主键来标识,主键取值应该唯一,并区分关系表中的每个元组。

参照完整性: 关系表之间需要遵守的数据约束,以保证关系之间关联列的数据一致性。

参照完整性约束规则:关系R的外键F关系S的主键K关联,则R外键F必须与S中主键K值一致

外键Foreign key——在关联的两个关系中,它们具有一个或多个相同属性。若关联列在第一个关系中作为主键,则在第二个关系中作为外键

例子:

两者都有出版社编号,匹配后关联,维持两者数据的一致性

用户自定义完整性是指用户根据具体业务对数据处理规则要求所定义的数据约束。

用户可以定义以下的完整性约束:

定义 的数据类型与取值范围
定义 省值
定义 是否允许取空值
定义 取值唯一性
定义 列之间 的数据依赖性

#####第三章(考试有一半相关)

1.SQL相关概念

SQL:对关系数据库进行访问的数据操作语言

语言特点:一体化,使用方式灵活,非过程化,语言简单

基本数据类型

字符: CHAR VARCHAR 、TEXT        (这几个定义的范围不同,使用的比较多)
整数: SMALLINT(int大小取半)、INTEGER              (根据占据的存储空间分类的)
浮点数: NUMBER( n,d ) FLOAT( n,d)        (n是最高多少有效位,d是小数点后面的位数)
日期: DATE、DATETIME                timestamp(时间戳,10^-6,微秒)
货币:MONEY        

#####2.数据库创建,修改,删除

数据库创建数据库语句:

CREATE  DATABASE  <数据库名>;

例:执行SQL语句创建一个选课管理数据库CourseDB

CREATE DATABASE CourseDB;

数据库表创建SQL语句

CREATE TABLE  <表名>
 ( <列名1>  <数据类型>  [列完整性约束],
	<列名2>  <数据类型>   [列完整性约束],	
    <列名3>  <数据类型>  [列完整性约束],
    …
   );

列完整性约束关键词:

          以下三个为主要的内容

PRIMARY KEY—— 主键
N OT NULL—— 非空值
NULL—— 空值
UNIQUE—— 值唯一
CHECK—— 有效性检查
DEFAULT—— 缺省值
创建学生表的SQL语句:
CREATE  TABLE  Student
 ( StudentID  		char(13)  		PRIMARY  KEY,
   StudentName  		varchar(10)  	NOT  NULL,
   StudentGender  	char(2)  		NULL,
   BirthDay  		date  		NULL,
   Major  			varchar(30)  	NULL,
   StudentPhone  		char(11)   		NULL
 );

在关系表创建SQL语句中,除了使用主键约束、是否空值约束外。有时还会使用其他的约束。

创建课程信息表Course的SQL语句:
 

CREATE  TABLE  Course
( CourseID  	char(4)      PRIMARY  Key,
  CourseName  	varchar(20)  NOT  NULL  UNIQUE,
  CourseType  	varchar(10)  NULL CHECK(CourseType IN('基础课','专业课','选修课')),
  CourseCredit  	smallint   	 NULL,
  CoursePeriod  	smallint     NULL,
  TestMethod  	char(4)      NOT  NULL  DEFAULT  '闭卷考试'
);

表约束定义主键

CREATE TABLE  <表名>
 ( <列名1>  <数据类型>  [列完整性约束],
	<列名2>  <数据类型>   [列完整性约束],	
    <列名3>  <数据类型>  [列完整性约束],
    …
    CONSTRAINT  <约束名>  PRIMARY Key(主键列)
   );

这是一个由课程编号和老师编号组合起来的主键,是复合主键

        创建开课计划表Plan的SQL语句:

CREATE  TABLE  Plan
( CourseID  	char(4)  	NOT  NULL,
  TeacherID  	char(4)  	NOT  NULL,
  CourseRoom  	varchar(30),
  CourseTime  	varchar(30),
  Note  		varchar(50),
  CONSTRAINT	CoursePlan_PK	PRIMARY Key(CourseID,TeacherID)
);

使用表约束定义主键的优点:

便于定义复合主键
可命名主键约束
便于定义代理键
表约束定义代理键
CREATE TABLE  <表名>
 ( <代理键列名>  <Serial数据类型>  NOT NULL,
	<列名2>  <数据类型>  [列完整性约束],	
    <列名3>  <数据类型>  [列完整性约束],
    …
    CONSTRAINT  <约束名>  PRIMARY Key(代理键列名)
   );

创建开课表Plan的SQL语句
CREATE  TABLE  Plan
( CoursePlanID	serial		NOT  NULL,
  CourseID  	char(4)  		NOT  NULL,
  TeacherID  	char(4)  		NOT  NULL,
  CourseRoom  	varchar(30),
  CourseTime  	varchar(30),
  Note  		varchar(50),
  CONSTRAINT	CoursePlan_PK	PRIMARY Key(CoursePlanID)
);

表约束定义外键

CREATE TABLE  <表名>
 ( <列名1>  <数据类型>  [列完整性约束],
	<列名2>  <数据类型>   [列完整性约束],	
    <列名3>  <数据类型>  [列完整性约束],
    …
    CONSTRAINT  <约束名>  FOREIGN Key(外键列)
   );

        创建注册表Register的SQL语句

CREATE  TABLE  Register
( CourseRegID  	serial	NOT  NULL,
  CoursePlanID  	Int  		NOT  NULL,    //
  StudentID  	char(13),                    //要与主表里面的类型一致
  Note  		varchar(30),

  CONSTRAINT	CourseRegID_PK	PRIMARY Key(CourseRegID),    //主键
  CONSTRAINT	CoursePlanID_FK	FOREIGN Key(CoursePlanID)    //外键
	REFERENCES  Plan(CoursePlanID)    //参照Plan表的CoursePlanID
    ON DELETE CASCADE,    //基于这个操作,建立两者之间的关联
  CONSTRAINT	StudentID_FK	FOREIGN KEY(StudentID)        //外键
	REFERENCES  Student(StudentID)
    ON DELETE CASCADE
);

cascade如果父位置无了,所有的全部消失

retut如果父位置无了,外键所在位置被限制,无法操作

null父位置无了,外键无所属

数据库修改数据库SQL格式:

ALTER  DATABASE  <数据库名> <修改内容>;

例:将课管理数据库CourseDB名称修改为 CourseManageDB

ALTER  DATABASE  CourseDB  RENAME TO  CourseManageDB

修改表结构SQL语句

ALTER TABLE <表名> <修改方式>;    //基本格式

数据库删除数据库SQL格式:

DROP  DATABASE  <数据库名>;

例:删除前面创建的选课管理数据库CourseManageDB

DROP DATABASE CourseManageDB;

数据库索引的创建:

索引作用:支持对数据库表中数据快速查找,其机理类似图书目录可以快速定位章节内容

基本格式:

CREATE INDEX  <索引名>  ON <表名><(列名)>;

在学生信息表Student中,为出生日期Birthday列创建索引,以便支持按出生日期快速查询学生信息

CREATE  INDEX  Birthday_Idx  ON  STUDENT (Birthday);

数据插入语句

INSERT  INTO  <表名|视图名>[<列名表>]  VALUES (列值表);

在学生信息表Student中,插入一个新的学生数据,如“2017220101105”,“柳因”,“女”,“1999-04-23”,“软件工程”,“liuyin@163.com”。

INSERT INTO Student VALUES('2017220101105','柳因','女'
,'1999-04-23','软件工程', 'liuyin@163.com');

数据修改SQL语句:

UPDATE  <表名|视图名>
SET  <列名1>=<表达式1> [,<列名2>=<表达式2>...]
[WHERE   <条件表达式>];

在学生信息表Student中,学生“赵东”的原有Email数据为空,现需要修改为“zhaodong@163.com”。

UPDATE  Student
SET  Email='zhaodong@163.com'
WHERE   StudentName='赵东';

数据删除SQL格式:

DELETE 
FROM  <表名|视图名>
[WHERE   <条件表达式>];

学生信息表STUDENT中,删除姓名为 “张亮”的学生数据,其数据删除的SQL语句如下:

DELETE 
FROM  STUDENT
WHERE   StudentName='张亮';

数据查询SQL语句:

SELECT  [ALL|DISTINCT]  <目标列>[,<目标列>…]
[ INTO <新表> ]
FROM  <表名|视图名>[,<表名|视图名>…]
[ WHERE  <条件表达式> ]
[ GROUP BY  <列名> [HAVING <条件表达式> ]]    //分组    分组条件
[ ORDER BY  <列名> [ ASC | DESC ] ];         //排序

为了在结果集中过滤重复数据,可以在查询语句的输出列前加入DISTINCT关键字,进行去重处理

where条件语句

1使用BETWEEN..AND关键词来限定列值范围,还可以使用关键词LIKE与通配符来限定查询条件

2)使用通配符来限定字符串数据范围。下划线(_)通配符用于代表一个未指定的字符。百分号(%)通配符用于代表一个或多个未指定的字符

3)在SQL查询Where子句中,还可以使用多个条件表达式,并通过逻辑运算符(ANDORNOT)连接操作,以及使用INNOT IN关键词,进一步限定结果集的数据范围。

若要从STUDENT表中查询出生日期在“2000-01-01”到“2000-12-30”的学生数据。其数据查询SQL语句如下:

SELECT  *
FROM  STUDENT
WHERE BirthDay BETWEEN ‘2000-01-01’ AND ‘2000-12-30’;

若要从STUDENT表中查询邮箱域名为“@163.com”的学生数据。其数据查询SQL语句如下:

SELECT  *
FROM  STUDENT
WHERE  Email  LIKE  ’%@163.com’;

STUDENT表中查询性别为“男”,并且专业为“软件工程”的学生数据,其数据查询SQL语句如下

SELECT  StudentID, StudentName, StudentGender, Major
FROM  STUDENT
WHERE  Major=’软件工程’  AND  StudentGender=’男’;

STUDENT表查询时,使用IN关键字限定范围计算机应用专业的学生。其SQL语句如下所示。

SELECT  StudentID, StudentName, StudentGender, Major
FROM  STUDENT
WHERE  Major IN  ('计算机应用');

对结果集进行排序(在最后进行排序呈现出来)

SELECT查询语句返回的结果集中,行的顺序是任意的。如果需要结果集排序,可以在SELECT语句中加入ORDER BY关键字。

若要从STUDENT表中按学生出生日期序输出学生数据,其数据查询SQL语句如下

SELECT  *
FROM  STUDENT
ORDER  BY  Birthday DESC;

默认情况下,SQL查询的结果集是按指定列值的升序排列。可以使用关键词ASCDESC选定排序是升序或降序。

若要STUDENT表查询数据,首先按出生日期降序排列,然后按姓名升序排列,其数据查询SQL语句如下:

SELECT  *
FROM  STUDENT
ORDER  BY  Birthday DESC ,  StudentName  ASC;

SQL内置函数类型

若要统计Student表中的学生人数,在SELECT语句中可以使用COUNT()函数来计算,其查询SQL语句如下:

SELECT  COUNT(*) AS  学生人数
FROM  Student;

找出STUDENT表中年龄最大和年龄最小的学生出生日期,其查询SQL语句如下:

SELECT  Min(Birthday) AS 最大年龄,Max(Birthday) AS 最小年龄
FROM  Student;

分组统计SQL语句基本格式:

SELECT    统计函数(目标列)
FROM  <表名>
[WHERE  条件]
GROUP  BY  <目标列>
[Having  条件];

若要分专业统计Student表中的学生人数SELECT语句中可以使用GROUP BY分组子句完成统计,其查询SQL语句如下:

SELECT  Major  AS 专业,  COUNT(StudentID) AS 学生人数
FROM  Student
GROUP  BY  Major;

若要分专业统计STUDENT表中男生人数,但限定只显示人数大于2的人数,其查询SQL语句如下:

SELECT  Major  AS 专业,  COUNT(StudentID) AS 学生人数
FROM  Student
WHERE  StudentGender=’男’
GROUP  BY  Major
HAVING  COUNT(*)>2;

多表查询

子查询SQL语句基本格式:
SELECT    <目标列>[,<目标列>…]
FROM  <表名>
WHERE  <条件中嵌套另一关系表的SELECT 查询结果集>

在选课管理系统数据库中,希望能检索出“计算机学院”的教师名单。

该操作需要关联教师信息表Teacher和学院信息表College,才能获得这些数据。这里可采用子查询方法实现两表关联查询,其查询SQL语句如下:

SELECT  TeacherID,  TeacherName,  TeacherTitle
FROM  Teacher
WHERE  CollegeID  IN
        (SELECT  CollegeID  
     FROM  College
     WHERE  CollegeName=’计算机学院’);
连接关联多表查询SQL语句基本格式:
SELECT    <目标列>[,<目标列>…]
FROM  <表名1>,<表名2>,…, <表名n>,
WHERE  <关系表之间的连接关联条件>

选课管理系统数据库中,希望获得各个学院的教师信息列表,包括学院名称、教师编号、教师姓名、教师性别、职称等信息。要求按学院名称、教师编号分别排序输出,其查询SQL语句如下:

SELECT  B.CollegeName AS 学院名称,  A.TeacherID  AS 编号, 
A.TeacherName  AS 姓名,  A.TeacherGender  AS 性别,  A. TeacherTitle  AS 职称
FROM  Teacher  AS  A,College  AS  B
WHERE  A.CollegeID=B.CollegeID 
ORDER  BY  B.CollegeName, A.TeacherID;
其中两表连接关联查询的JOIN…ON语句格式如下:
SELECT  <目标列>[,<目标列>…]
FROM  <表名1>  JOIN  <表名2>  ON <连接条件>;

选课管理系统数据库中,希望获得各个学院的教师信息,包括学院名称、教师编号、教师姓名、教师性别、职称等信息。要求按学院名称、教师编号分别排序输出,其查询SQL语句如下:

SELECT  B.CollegeName AS 学院名称,  A.TeacherID  AS 编号,
 A.TeacherName  AS 姓名,  A.TeacherGender  AS 性别,  A. TeacherTitle  AS 职称
FROM  TEACHER  AS  A  JOIN  COLLEGE  AS  B
ON  A.CollegeID=B.CollegeID 
ORDER  BY  B.CollegeName, A.TeacherID;

选课管理数据库中,希望查询所有开设课程的学生选课情况,包括课程名称、任课教师、选课学生人数。这需要关联课程信息表COURSE教师信息表TEACHER开课计划表PLAN、选课注册信息表REGISTER连接查询的SQL语句如下:

SELECT C.CourseName AS 课程名称, T.TeacherName AS 教师, 
  COUNT (R.CoursePlanID)  AS 选课人数
FROM  COURSE  AS  C  JOIN  PLAN  AS  P  ON  C.CourseID=P.CourseID 
  JOIN  TEACHER  AS  T  ON  P.TeacherID=T.TeacherID
  JOIN  REGISTER  AS  R  ON  P.CoursePlanID=R.CoursePlanID
GROUP  BY C.CourseName, T.TeacherName;

SQL 应用中,有时候也希望输出那些不满足连接条件的元组数据。这时,可使用JOIN…ON外连接方式实现。其实现方式有三种形式,具体如下:

LEFT JOIN: 左外连接 ,即使 没有与 右表 关联列值 匹配,也从左表返回所有的行。
RIGHT JOIN: 右外连接 ,即使 没有与 左表 关联列值 匹配,也从右表返回所有的行。
FULL JOIN: 全外连接 同时进行左连接和右连接 ,就返回 所有 行。
选课管理 系统数据库中,希望能查询所有开设课程的学生选课情况,包括课程名称、 任课教师、 选课学生人数。这需要关联课程信息表 COURSE 、开课计划表 CPLAN 教师信息表 TEACHER 选课注册信息表 REGISTER 。若使用 左外连接 查询,该 JOIN…ON 连接查询的 SQL 语句如下:
SELECT C.CourseName AS 课程名称, T.TeacherName AS 教师, 
COUNT  (R.CoursePlanID)  AS 选课人数
FROM  COURSE  AS  C  JOIN  PLAN  AS  P  
ON  C.CourseID=P.CourseID 
JOIN  TEACHER  AS  T  ON  P.TeacherID=T.TeacherID
LEFT  JOIN  REGISTER  AS  R  ON  P.CoursePlanID=R.CoursePlanID
GROUP  BY C.CourseName, T.TeacherName;

数据控制SQL语句

一种可对用户数据访问权进行控制的操作语句,它可以控制特定用户或角色对数据表、视图、存储过程、触发器等数据库对象的访问权限。

GRANT权限授予语句

GRANT  <权限列表>  ON  <数据库对象>  TO  <用户或角色> [ WITH GRANT OPTION ];

在选课管理系统数据库中,将课程注册表REGISTER的数据插入、数据修改、数据删除、数据查询访问权限赋予学生角色RoleS

GRANT  SELECT, INSERT, UPDATE, DELETE  ON  REGISTER  TO  RoleS;

REVOKE权限收回语句

REVOKE  <权限列表>  ON  <数据库对象>  FROM  <用户或角色> ;

在选课管理系统数据库中,收回学生角色RoleS在课程注册表REGISTER的数据删除访问权限。

REVOKE  DELETE  ON  REGISTER  FROM  RoleS;

DENY权限拒绝语句

DENY  <权限列表>  ON  <数据库对象>  TO  <用户或角色> ;

在选课管理系统数据库中,若拒绝教师角色RoleT对教师表TEACHER的数据删除访问权限。

DENY  DELETE  ON  TEACHER  TO  RoleT;

视图SQL语句

视图的定义:是一种通过基础表或其它视图构建的虚拟表。它本身没有自己的数据,而是使用了存储在基础表中的数据。

视图创建语句

CREATE  VIEW  <视图名>[(列名1),(列名2),…]  AS  <SELECT查询>;

选课管理系统数据库中,若需要建立一个查看基础课数据视图BasicCourseView,其创建SQL语句如下

CREATE  VIEW  BasicCourseView  AS
SELECT  CourseName,  CourseCredit,  CoursePeriod,  TestMethod
FROM    COURSE
WHERE  CourseType=‘基础课’;

使用SELECT语句查询该视图数据,并按课程名称排序输出,其SQL语句如下:

SELECT   *
FROM  BasicCourseView
ORDER  BY  CourseName;

视图删除语句

DROP  VIEW  <视图名>;

在数据库中,若需要删除名称为BasicCourseView的视图对象,其删除该视图的SQL语句如下:

DROP  VIEW  BasicCourseView; 

选课管理系统数据库中,查询选修“数据库系统原理与开发”课程的学生名单。这需要关联课程信息表COURSE、开课计划表PLAN、选课注册信息表REGISTER、学生信息表STUDENT,其查询SQL语句如下:

SELECT C.CourseName AS 课程名称, S.StudentID AS 学号, S.StudentName AS 姓名
FROM  COURSE AS C,PLAN AS  P,  REGISTER  AS  R, STUDENT  AS  S  
WHERE  C.CourseID=P.CourseID  AND  C.CourseName=’数据库系统原理与开发’AND  P.CoursePlanID=R.CoursePlanID  AND  R.StudentID=S.StudentID;

上面这个SQL语句是较复杂和冗长,为了让外部程序简单地实现该信息查询,可以先定义一个名称为DatabaseCourseView视图,其创建SQL语句如下:

CREATE  VIEW  DatabaseCourseView  AS 
   SELECT C.CourseName AS 课程名称, S.StudentID AS 学号, S.StudentName AS 姓名
FROM  COURSE AS C,PLAN AS  P,  REGISTER  AS  R, STUDENT  AS  S  
WHERE  C.CourseID=P.CourseID  AND  C. CourseName=’ 数据库系统原理与开发’  AND  P.CoursePlanID=R.CoursePlanID  AND  R.StudentID=S. StudentID;

DatabaseCourseView视图被创建完成后,外部程序就可以通过一个简单的SELECT语句查询视图数据,其操作语句如下:

SELECT  *  FROM  DatabaseCourseView;

选课管理系统数据库中,除管理部门用户外,其他用户只能浏览教师基本信息,如教师编号、教师姓名、性别、职称、所属学院教师其他信息需要被隐藏,可通过视图来处理,其视图创建SQL语句如下:

CREATE  VIEW  BasicTeacherInfoView  AS 
SELECT  T.TeacherID AS 编号, T.TeacherName  AS 教师姓名, T.TeacherGender  AS 性别, T. TeacherTitle  AS 职称,  C.CollegeName  AS 所属学院
FROM  TEACHER  AS  T,  COLLEGE  AS  C
WHERE  T.CollegeID=C. CollegeID;

视图创建SQL语句执行

BasicTeacherInfoView视图被创建完成后,外部程序就可以通过一个简单的SELECT语句查询视图数据,其操作语句如下:

SELECT  *  FROM  BasicTeacherInfoView
ORDER  BY  所属学院 , 教师姓名;

在工程项目管理系统数据库ProjectDB中,管理部门希望了解各个项目参与员工的任务工时列表。实现该信息查询处理,需要关联Employee表、Project表和Assignment表。查询输出内容应包含(“项目名称”、“员工姓名”、“实际工时”)数据

SELECT  ProjectName  AS 项目名称,  EmployeeName  AS 员工姓名, 
FishedHours  AS 实际工时
FROM  Employee  AS  E,  Project  AS  P,  Assignment  AS  A
WHERE  E.EmployeeID =A.EmployeeID  AND  P.ProjectID=A.ProjectID 
ORDER BY  P.ProjectID,  A.EmployeeID;

在工程项目管理系统数据库ProjectDB中,管理部门希望能查询输出员工通信录。为了保护员工的一些隐私信息,可以采用视图方式查询输出,其输出内容包含(“员工编号”、“员工姓名”、“手机”、“邮箱”)基本数据。该视图的创建SQL语句如下:

CREATE VIEW ContactView  AS
   SELECT EmployeeID AS 员工编号, EmployeeName AS 员工姓名,
   Phone AS 电话,   Email AS 邮箱
 FROM   Employee;

第四章(主要是ER模型和转换)

1.数据库设计概述

数据库应用架构分为:单用户结构,集中式结构,客户/服务器结构和分布式结构

数据库结构模型设计一般分为概念层,逻辑层,物理层设计,他们的设计模型分别为概念数据模型,逻辑数据模型和物理数据模型。

概念数据模型是描述现实世界的系统概念化的数据结构,描述系统的数据对象极其组成关系

逻辑数据模型是从系统角度描述系统的数据对象及其关联结构

物理数据模型是针对具体DBMS所设计的数据模型,描述数据模型的数据组织,存储,索引,访问方式等信息

数据库应用访问方式有很多,如直接本地接口连接访问,基于标准接口连接访问,基于数据访问层框架连接访问

数据库开发过程:

设计策略:自底向上设计,自顶向下设计,自内向外设计,混合策略设计

2.E-R模型(实体-联系模型)方法

基本元素:实体,属性,标识符,联系

实体:描述事物的数据对象,如交易,客户,产品,订单等

属性:实体特征的数据项

标识符:标识不同实体实例的属性(1个或多个)

与主键的区别是:标识符是逻辑概念,主键是物理概念

联系:实体之间的关系,学生与成绩,孩子与父母

实体-联系类型:

实体标记的最小数量值是最小基数,最大值是最大基数

若一方实体为强制参与,画短线,可选参与,画圆圈

鸟足版本的实体-联系符号

模型示例:

实体继承联系:表示实体之间的相似性关系

互斥性继承联系和非互斥性继承联系

完整性继承和非完整性继承

弱实体和强实体

弱实体指对于另外实体有依赖的实体,强实体指被依赖的实体

学校是强实体,学生是弱实体

弱实体分为标识符(ID)依赖弱实体和非标识符(非ID)依赖弱实体

3.数据库建模设计——概念数据模型

概念数据模型设计:通过对现实世界中数据实体进行抽取,分类,聚集和概况的处理,建立反映系统业务数据组成结构的过程

设计步骤:

CDM,LDM,PDM的转换

将概念数据模型中的学生实体,转换为物理数据模型的学生表

弱实体转换关系表

数据库建模设计实例

4.数据库规范化设计-函数依赖

为什么规范化设计?

减少数据冗余,维护数据一致性

设计合理的依赖和约束关系,实现数据完整性和一致性

设计合理的数据库结构,便于数据高效访问处理

非规范化关系表数据操作问题

“雇员”关系表数据插入操作

“雇员”关系表数据删除操作

“雇员”关系表数据修改操作

函数依赖理论

定义:设有一关系模式RU), U 为关系R的属性集合,XY为属性U的子集。设ts是关系R中的任意两个元组,如果t[X] = s[X],则t[Y] = s[Y]。那么称Y函数依赖于X,表示为X→Y

函数依赖的左部称为决定因子,右部称为依赖函数。决定因子和依赖函数都是属性的集合。

实际就是对于一个决定因子,只能对应一个依赖函数。

说明:

函数依赖反映属性或属性组之间相互依存、互相制约的关系,即关系表中属性之间的依赖关系。

依赖类型:完全函数依赖,部分函数依赖,属性传递依赖,多值函数依赖

关系规范化范式

关系规范化是把一访问异常的关系分解成结构良好的关系的过程,使得这些关系有最小的冗余或没有冗余。

规范化范式Normal FormNF)是指关系表符合特定规范化程度的模式

第一范式:如果关系表中的属性不可再细分,该关系满足第1范式。反之,该表就不是关系表。

第二范式:如果关系满足第1范式,并消除了关系中的属性部分函数依赖,该关系满足第2范式。

第三范式:如果关系满足第2范式,并切断了关系中的属性传递函数依赖,该关系满足第3范式。

巴斯-科德范式BCNF):在关系中,所有函数依赖的决定因子都是候选键,该关系满足BCNF范式。

第四范式:如果关系满足BCNF范式,并消除了多值函数依赖,该关系满足第4范式。

关系规范化实例:

不满足第1范式,联系可以细分,分成联系电话,电子邮件等(第一范式看能否再分)

不满足第2范式,有两个主键,其中学号决定了系名,住址,电话,电子邮件,但是课程号不能决定这些事情(所有主键需要共同决定某些信息)

不满足第三范式,学号决定系名,系名决定住址,因此学号决定住址(看是否有连续决定)

所有决定因子都是主键,满足BCNF范式

但不满足第4范式,学生住址可能有多处,办公电话也可能有多个(看依赖函数的数量)

第五章(主要是并发控制和锁机制)

1.概述

数据库管理:为保证数据库系统的正常运行和服务质量必须进行的系统管理工作

数据库管理目标:

数据库管理内容:

DBMS管理功能结构:

层次结构

2.事务管理

事物:由构成单个处理单元的一组数据库访问操作,要求他们要么都执行成功,要么都不执行

事物状态:

事物ACID特性:

原子性:要么都执行,要么都不执行

一致性:每次运行的结果相同

隔离性:事物与事物之间隔离,并发执行透明

持续性:运行后,数据库内容改变永久的

事物并发执行:多个事物程序在数据库系统中同一时段运行

事物SQL语句

3.并发控制

目的:

解决的问题:

1.丢失更新数据

2.不可重复读取(不可重复读取,幻想读取)

3.脏数据读取

并发数据调度

控制多个事物的操作语句按照恰当的顺序访问共享顺序,避免数据的不一致性

事物调度管理:

可串行化调度:在事物并发执行中,当事物中数据操作调度顺序的执行结果和串行执行一样时,才能保证正确性和一致性

DBMS并发事务调度目标:使并发事物调度实现的处理结果和串行化调度处理结果一致

数据库锁机制

资源锁定访问:排他锁定,共享锁定

锁定力度排序(大->小):数据库-表-页面-行

实施方式:隐式锁定,显式锁定

基于锁机制的并发控制协议:锁操作的相容性,加锁协议(一级,二级,三级)

保证可串行化的一个协议是:二阶段锁定协议

事物死锁:如果并发执行的事物同时锁定两个及以上的资源,出现彼此都不能继续执行的状态,叫事物死锁状态

死锁出现的必要条件:互斥条件,请求和保持条件,不剥夺条件,环路等待条件

4.安全管理

数据库系统安全模型

身份验证,权限控制,系统防护,加密存储

数据库存取权限控制安全模型

用户管理:

权限管理:

角色管理:

角色授权:

5.数据库备份与恢复

备份方法分类:完全数据库备份,差异数据库备份,事物日志备份,文件备份

备份方式:冷备份,热备份

第六章

1.数据库连接技术

ODBC(开放式数据库互联):实现了应用程序对多种不同DBMS的数据库访问

ODBC的层次结构

客户端数据库应用程序的功能:

ODBC应用程序接口:

ODBC驱动程序下管理:用于管理系统中的各种驱动程序

数据源的功能:

DBMS的作用:

用户创建的数据库的作用:

JDBC是用于执行SQL语言的JavaAPI

访问步骤:

加载驱动,建立连接,创建Statement对象,执行SQL语句,ResultSet保存结果集,关闭连接

2.数据库存储过程

创建存储过程:

OR REPLACE        覆盖同名存储过程,一般都加上,没啥太大的影响

lang_name改成具体的语言,一般就是plpgsql

举例:

执行存储过程

select 存储过程名(参数);
    或者    select * from 存储过程名(参数);

在存储过程中如果调用其他的存储过程,语法形式如下:

select into 自定义变量 from 存储过程名(参数);

删除存储过程

DROP FUNCTION IF EXISTS name [CASCADE RESTRICT]
//IF EXISTS 如果不存在,发出提示信息
//CASCADE   删除依赖的,例如触发器
//RESTRICT  如果有依赖,则拒绝删除

基本语法

声明局部变量

declare
    变量名 变量类型;


//如果声明记录类型
    name RECORD;

条件语句

IF THEN
    ELSIF THEN
    ELSE
END IF

循环语句

1.
LOOP        

END LOOP;

2.
EXIT[WHEN...]    //和break类似

3.
CONTINUE[WHEN...] 
   
4.
WHILE  条件判断    LOOP

END LOOP;

5.
FOR 变量名 IN [REVERSE(反过来)] 范围  LOOP

END LOOP;

存储过程优点:减少网络通信量,执行速度更快,更强的适应性,降低了业务实现和应用程序的耦合,降低了开发的复杂性,保护数据库元信息,增强了数据库的安全性

存储过程缺点:处理逻辑相对复杂,数据改变要修改代码,开发调试复杂,可移植性差

3.触发器

触发器是特殊类型的处理过程,用于加强数据的完整性约束和业务规则

特点:与表相关联,自动触发,是事物的一部分

分类:INSERT触发器,DELETE触发器,UPDATE触发器

          语句级触发器,行级触发器        FOR EACH STATEMENT/ROW

           BEFORE触发器 AFTER触发器 INSTEAD OF触发器

特殊变量:

创建

CREATE TRIGGER 名称
(BEFORE AFTER INSTEAD OF) + (在哪些操作前后触发) ON 表名称
FOR EACH STATEMENT/ROW 
EXECUTE PROCEDURE 存储过程名;

修改

ALTER TRIGGER name ON table_name RENAME TO new_name;

删除

DROP TRIGGER IF EXISTS name ON table_name [CASCADE RESTRICT];

4.游标

游标是临时的数据库对象,存放查询的数据记录

声明

refcursor 游标变量

游标名 CURSOR(输入的参数,可以没有) FOR/IS +select查询语句;    //返回值放入游标中

打开

OPEN 未绑定的游标名 FOR +select查询语句;

OPEN 未绑定的游标名 FOR EXECUTE +select查询语句; //EXECUTE 自动执行查询字符串

OPEN 绑定的游标();

使用

FETCH 游标 INTO target; --target放入的位置,这是个行变量

关闭

CLOSE 游标名

附言:电子科技大学学生必读

1.成绩分布:

mooc(学堂在线)20,课程大作业20,期末考试60

2.学习建议:

学习时间很紧,想在课上跟上最好先看慕课,后面我会把从其他大学学习的笔记和慕课学习的知识点放在一起,如果没时间,直接看数据库冲刺,大题解题方法都列出来了。

课时分布

缩减了学习时长

慕课(学堂在线答案)

第一章答案CDDBC DDBCD FFTFT TFFTF

第二章答案TFTTT CBDCA ABDAD TTFTF

第三章答案ABDAC CBFTF TFTTF TTCDB

第四章答案CDDCC CCDCC FFFTF FFFTT

第五章答案BCCDA DDBBB TTFTF TFFFF

第六章答案ABDFF TFTTF FFFCC BACCB

第七章答案TDDAB DCCAB DTTTF FFTTT

使用软件(安装方式)

数据库我安装的是第一个软件,参考的CSDN文章如下:

文章一:安装教程,其中选择下载版本时选择11版本

postgresql保姆级安装教程_pgsql安装教程-CSDN博客

文章二:在安装时出现error,且无法使用文章一显示的方法进行解决

Win11修改用户名(超详细图文)-CSDN博客

一定要注意把所有的包括环境变量,注册表等

然后按照教程即可配置好软件啦

  • 33
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值