数据库管理

一开始,因为这一科目非常无聊就没有好好学,现在趁着考试又重新学了一遍,好好整理一下相关的内容。后期如果还能用到就可以有资料学习了。

a.数据库系统知识

b.数据模型

c.SQL语言

d.数据库设计

e.ACCESS数据库


a.基础知识

1.各种概念:DB\DBMS\DBS,技术其根本目的是解决数据共享的问题。DBMS目标是提高存储空间利用率+方便存+数据安全。

2.三级模式两级映射

1.内模式:内模式处于最底层,是对数据在数据库底层的存储的描述。

内模式:

1)数据物理结构和存储方式的描述

2)是数据在数据库内部的表示方式

Ⅰ.记录的存储方式:如顺序存储,按B树结构存储,Hash存储

Ⅱ.索引的组织方式:B+树索引,hash索引,Join index索引

Ⅲ.数据是否压缩存储

Ⅳ.数据是否加密

注:一个数据库只有一个内模式。

2.模式:模式就是所有人都看到的数据的样子 ,也称为逻辑模式**。**

1)它是数据库中全体数据的逻辑结构和特征的描述;(例如在学生选课数据库模式中,包含学生记录、课程记录和学生选课记录,这就是一个逻辑模式)

2)模式是所有用户的公共数据视图。因为数据库是多人共享使用的,模式就是大家都看到的样子,综合了所有用户的数据需求。

注意:

1)一个数据库只有一个模式。

2)与数据库的物理存储无关。

3)与具体的应用程序、开发工具和开发语言无关。(意思就是可以使用各种开发工具和开发语言来使用数据库)

那么如何对模式进行定义呢?

模式的定义就是对 数据的逻辑结构 进行定义(包括数据项的名字、类型、取值范围等)

3.外模式:外模式是模式的一部分,是部分用户看到的数据库的样子。

1)数据库的用户使用的局部数据的逻辑结构和特征的描述

2)数据库用户的数据视图,是与某一应用程序有关的数据的逻辑表示。(如应用程序A只能看见其相对于的外模式1,应用程序B只能看见其相对于的外模式2,不能看见不属于自己的外模式。相当于是模式的一个子集)

外模式的地位:介于模式与应用之间。

模式与外模式的关系:一对多

1)外模式是模式的子集

2)一个数据库可以有多个外模式,反应了不同的用户的应用需求、看待数据的方式、对数据保密的要求。

3)对于模式中的同一个数据,不同外模式可以对数据的长度、类型等有不同的定义。

外模式与应用的关系:一对多。

1)同一外模式可以为某一个用户的多个应用系统所使用

2)但一个应用程序只能使用一个外模式

外模式的用途:

1)保证数据库安全,每个用户只能看见自己对应外模式的数据

2)保证数据独立性。

内模式(存储、物理模式)、模式(概念、逻辑模式)、外模式(子模式、用户模式)

内模式与模式===》物理独立型;外模式与模式==》逻辑独立性


b.数据模型

数据模型= 概念 (数据)模型(E-R图 ) +关系 模型(二维表

数据结构(对象+关系)

数据模型构成= 数据操作(动作+状态)

完整性约束(唯一确定)

常用数据类型:层次(树状)模型、网状模型、关系模型

概念模型之E-R图 实体-联系模型

概念模型变关系模型(手写)规律:

实体------>关系:++名字(属性)主键++ 直接照搬

供应商(供应商 ID, 名称,地址,联系方式) 主键:供应商 ID

联系------>关系: ++名字(实体+联系的所有属性)主键is任意\n的一端\m+n两端主键++

供应 (供应商 ID, 项目 ID, 零件 ID, 供应量) 主键:供应商 ID + 项目 ID + 零件 ID 外键:供应商 ID(关联供应商表)、项目 ID(关联项目表)、零件 ID(关联零件表)

关系模型:

完整性约束:实体完整性(主码)、参照完整性(外码完整)、用户定义完整性(域完整)

运算:并、差、笛卡尔积、投影、选择


c.SQL语言=结构化查询语言

数据类型:Char(n) \ int \ Float \ Date \ Time

建立表

create table student(sno char(10) primary key,sname char(18) unique,ssex char(2),sage int);

修改表

alter table student add new_col int / alter column new_col int / drop unique(sname);

删除表

drop table student;

删除整理:delete(删单元格、行)<alter(删列)<drop(删表)

数据操作:

查询语句:select、from、where、group by ...having、order by...asc升/desc降

例子:

1.查询全体学生的学号与姓名。SELECT Sno,Sname FROM Student

2.查询学生的全部信息。SELECT * FROM Student

3.查询全体学生的姓名及出生年份。SELECT Sname,2017-Sage FROM Student

4.查询选修了课程的学生学号。SELECT Sno FROM SC

5.查询计算机科学系全体学生的名单。SELECT Sname FROM Student WHERE Sdept = 'CS'

6.查询所有年龄在20 岁以下的学生姓名及其年龄。SELECT Sname,Sage FROM Student WHERE Sage<20;

7.查询考试成绩有不及格的学生的学号。SELECT DISTINCT Sno FROM SC WHERE Grade<60;

8.查询年龄在20 至23 之间的学生的姓名、 系别和年龄。

SELECT Sname,Sage,Sdept FROM Student WHERE Sage BETWEEN 20 AND 23;

  1. 查询计算机科学系(CSCS)、数学系(MAMA)和信息系(ISIS)学生的姓名和性别。

SELECT Sname,Ssex FROM Student WHERE Sdept IN('CS','MA','isis');

10.查询学号为201715121 的学生的详细情况。SELECT * FROM Student WHERESno LIKE '201715121';

  1. 查询所有姓刘的学生、 学号和性别。SELECT Sname Sno,Ssex FROM Student WHERE Sname LIKE ' 刘%'

12.查询姓刘且全名为2 个汉字的学生的姓名和学号。

SELECT Sname Sno FROM Student WHERE Sname LIKE ' 刘_'

  1. 查询缺少成绩的学生的学号和相应的课程号。SELECT Sno,Cno FROM SC WHERE Grade IS NULL;

  2. 查询所有有成绩的学生学号和课程号。SELECT Sno,Cno FROM SC WHERE Grade IS NOT NULL;

15.查询计算机科学系年龄在20 岁以下的学生姓名。

SELECT Sname FROM Student WHERE Sdept = 'CS' AND Sage<20

  1. 查询选修了3 号课程的学生的学号及其成绩,查询结果按分数的降序排列。

SELECT Sno,Grade FROM SC WHERE Cno ='3' ORDER BY Grade

17.查询学生总人数。SELECT COUNT(*) FROM Student;

  1. 计算3 号课程的学生平均成绩。SELECT AVG(Grade) FROM SC WHERE Cno = '3'

  2. 查询各个课程号与相应的选课人数。 (查询选修每门课的人数)。

SELECT Cno ,COUNT(*) FROM SC GROUP BY Cno;

  1. 查询选修各门课程的平均成绩和选修该课程的人数。

SELECT Cno,AVG (Grade) AS 平均成绩, Sno ) AS 选修人数 FROM SC GROUP BY Cno;

  1. 查询选修了3 门及3 门以上课程的学生的学号。

SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) >=3;

  1. 查询每个学生及其选修课程的情况。

SELECT Student.*, SC.* FROM Student,Sc WHERE Student.Sno SC.Sno

  1. 查询选修了3 号课程且成绩在75 分以上的学生的姓名及成绩。

SELECT Sname,Grade FROM Student,SC WHERE Student.Sno SC.Sno AND Cno = '3' AND Grade>=75;

  1. 新增一个学生信息,学号:201715128201715128,姓名:张三,年龄:2525,性别:男,系别:计算机系。

INSERT INTO Student (Sno,Sname , Sage,Ssex , Sdept )VALUES('201715128', ' 张三',25, 男', '计算机');

  1. 将所有学生的年龄加1 。UPDATE Student SET Sage=Sage+1;

  2. 将学号为"201715125" 学生的年龄改为24 。UPDATE Student SET Sage=24 WHERE

Sno = '201715125';

  1. 删除CS 系不及格学生的选课记录。

DELETE FROM SC WHERE Grade < 60 AND Sno IN (SELECT Sno FROM Student WHERE Sdept = 'CS')

  1. 把查询Student 表权限授给用户U1 。GRANT SELECT ON TABLE Student TO U1;

  2. 把对学生表Student 的查询和修改权限授予用户U2 和U3 。

GRANT SELECT, UPDATE ON TABLE Student TO U2,U3;

  1. 将用户U1 获得的权限收回。REVOKE SELECT, UPDATE ON TABLE SC FROM U1;

d.数据库设计

基本步骤+关系数据库范式理论

需求设计、概念结构设计(E-R图)、逻辑结构设计(转换成关系模式)、数据库的物理设计(选择存取路径)、数据库实施(数据入库)、数据库运行维护

范式理论(NF、2NF、3NF)用于衡量关系模式优劣的标准。

首先说一下完全函数依赖、部分函数依赖、传递函数依赖的概念。

完全函数依赖例子:***(职称,课程号)->课时费。必须两个属性都具备才能决定课时费多少,少一个都不行。

部分函数依赖例子:***(学号,身份证号)->姓名,(学号)->姓名,(身份证号)->姓名。由此知姓名部分依赖(学号,身份证号)

传递函数依赖例子:***(学号,姓名,性别,系号,系名,系主任名)。这个关系中存在"学号->系号"、"学号->系主任名"这两个函数依赖。因此这个关系中就有传递函数依赖。

第一范式:要求表的每一列都不可以再分

第二范式:1NF+要求非主键所在列都必须完全函数依赖于主键。

例子:选课关系SCI(SNO,CNO,GRADE,CREDIT),其组合关键字是(SNO,CNO)

注意:第二范式有数据冗余的问题(如同一门课学分一致,就会冗余),一般拆开分成多个,如

SC1(SNO,CNO,GRADE)、C2(CNO,CREDIT)

第三范式:2NF+要求非主键列对主键都不存在传递依赖,而是直接依赖。

e.ACCESS数据库

扩展名: .mdb

软件部分待更新....

相关推荐
Prince-Peng9 小时前
技术架构系列 - 详解Redis
数据结构·数据库·redis·分布式·缓存·中间件·架构
虾说羊9 小时前
redis中的哨兵机制
数据库·redis·缓存
_F_y9 小时前
MySQL视图
数据库·mysql
2301_790300969 小时前
Python单元测试(unittest)实战指南
jvm·数据库·python
九章-9 小时前
一库平替,融合致胜:国产数据库的“统型”范式革命
数据库·融合数据库
2401_8384725110 小时前
使用Scikit-learn构建你的第一个机器学习模型
jvm·数据库·python
u01092727110 小时前
使用Python进行网络设备自动配置
jvm·数据库·python
wengqidaifeng10 小时前
数据结构---顺序表的奥秘(下)
c语言·数据结构·数据库
what丶k10 小时前
SpringBoot3 配置文件使用全解析:从基础到实战,解锁灵活配置新姿势
java·数据库·spring boot·spring·spring cloud
Code blocks10 小时前
kingbase数据库集成Postgis扩展
数据库·后端