书上的例子以及练习题都是用 Mysql 实现的,操作系统使用的 macOS。在使用 Mysql 遇到问题时,推荐查看官方文档 Mysql Reference Manual。

第一章 引言

第一章就是综述整本书要讲的知识点,让读者对数据库系统有个大体的了解。我只记了一些比较重要的知识点,其他很多知识在后面章节会有更详细的讲解。

数据视图

数据抽象

物理层(pysical level) - 逻辑层(logical level)(程序设计人员)- 视图层(view level)(数据库用户)

实例和模式

物理模式(pysical schema)(物理层)- 逻辑模式(logical schema)(逻辑层)- 子模式(subschema)(视图层)
因为程序员使用逻辑模式来构造数据库应用程序,从其对应用程序的效果来看,逻辑模式是目前最重要的一种模式。
如果应用程序不依赖物理模式,那么它们就被称为是具有物理数据独立性(pysical data independence)。

数据模型

数据模型(data model)分为四类:关系模型(relational model),实体-联系模型(entity-relationshop model),基于对象的数据模型(object-based data model),半结构化数据模型(semistructured data model)

数据库语言

数据操作语言(Data-Manipulation Language, DML)

过程化 DML
声明式 DML(非过程化 DML)

数据定义语言(Data-Definition Language, DDL)

数据库系统所使用的存储结构和访问方式是通过一系列特殊的 DDL 语句来说明的,这种特殊的 DDL 称作数据存储和定义(data storage and definition)。这些语句定义了数据库的模式的实现细节,这些细节对用户来说通常是不可见的。

存放在数据库中的数据值要满足一致性约束(consistency constraint)。
数据库系统实现可以以最小代价测试的完整性约束。

  • 域约束(domain constraint)
  • 参照完整性(referential integrity)
  • 断言(assertion)
  • 授权(authorization)

DDL 的输出放在数据字典(data dictionary)中,数据字典中包含了元数据(metadata),元数据是关于数据的数据。可把数据字典看作一种特殊的表,这种表只能由数据库本身(不是常规用户)来访问和修改。在读取和修改实际数据之前,数据库先要参考数据字典。

数据存储和查询

数据库系统的功能大致分为存储管理器和查询处理部件。

事物管理

  • 原子性(atomicity)
  • 一致性(consistency)
  • 持久性(durability)

数据库体系结构

  • 客户/服务器系统(两层体系结构,三层体系结构)
  • 并行数据库系统
  • 分布式数据库系统

第一部分 关系数据库

第二章 关系模型介绍

关系模型的基本概念

  • 关系(Relation),一个关系对应通常说的一个表(Table)

  • 元组(Tuple),表中的一行即为一个元组

  • 属性(Attribute),表中的一列即为一个属性,给每一个属性起一个名称即属性名

  • 分量,元组中的一个属性值

  • 关系模式,对关系的描述,关系名(属性1,属性2,… ,属性 n),学生(学号,姓名,年龄,性别,系,年级)

  • 关系实例,表示一个关系的特定实例,也就是所包含的一组特定的行

  • 域(Domian),属性的取值范围

  • 笛卡尔积

由于关系是元组的集合,所以元组在关系中的顺序是无关紧要的。所以关系中的元素无论是排好序的还是无序的,都是无所谓的。两个关系中的元组的顺序即使不同,但这两个关系依然是相同的。

关系的概念对应于程序设计语言中变量的概念,关系模式对应于类型的定义,关系实例对应于变量的值。

  • 超码(superkey),是一个或多个属性的集合,这些属性的组合可以使我们在一个关系中唯一地标识一个元组。
  • 候选码(candidate key),任意真子集都不能作为超码的超码。
  • 主码(primary key)表示被选中的、主要用来在一个关系中区分不同元组的候选码。
  • 外码(foreign key)。一个关系模式(如r1),可能在它的属性中包括另一个关系模式(如 r2)的主码。这个属性在 r1上被称作参照 r2的外码。关系 r1也被称作外码以来的参照关系(referencing relation), r2被叫做外码的被参照关系(referenced relation)。(参照关系中的外码和被参照关系中的主码名字可以不同)
  • 主属性(prime attribute),候选码的诸属性被称作主属性。
  • 非主属性(nonprimary attribute),不被任何候选码包括的属性。
  • 全码(all-key),关系模式的所有属性都是这个关系模式的候选码。

关系的完整性

  • 实体完整性(Entity Integrity),若属性 A 是基本关系 R 的主属性,则属性 A 不能为 NULL。
  • 参照完整性(Referential Integrity),一个关系中某些属性的取值需要参照其他关系的属性取值。
  • 用户定义的完整性(User-defined Integity),用户定义的特殊的约束条件,如买某些属性必须满足函数关系,某个属性的取值范围限定等。

第三章 SQL

前两章节基本都是枯燥的概念,接下来就会结合具体数据库(Mysql)进行学习。

首先是 Mysql 的安装,这里使用的是 macOS 的包管理工具 Homebrew 安装的 Mysql。

安装命令:brew install mysql
启动命令:mysql.server start
如果是第一次运行,需要进行初始化:mysql_secure_installation
连接到本地的服务器:mysql -u root -p
查看所有数据库:show databases;
新建数据库 'test':create database test;
使用数据库 'test':use test;
查看'test'中所有表:show tables;

SQL 数据定义

基本类型

  • char(n),固定长度字符串
  • varchar(n),可变长字符串,最长为 n
  • int,整型
  • smallint,小整型
  • numeric(p,d),定点数,以字符串的形式存储的小数,如 numeric(4,2)可表示1234.56、123.4
  • real,double precision,浮点数和双精度浮点数,精度和机器有关
  • float(n),精度至少为 n 位的浮点数

基本模式定义

表的创建:

创建表 'department':create table department (dept_name varchar(20),building varchar(15),budget numeric(12,2),primary key(dept_name));创建表 'instructor'create table instructor(ID   varchar(5), name varchar(20) not null, dept_name varchar(20), salary numeric(8,2),primary key (ID),foreign key (dept_name) references department);

create table 命令的通用形式是:

create table r(A1 D1, A2 D2, ...,An Dn, <完整性约束1>,...,<完整性约束k>);

SQL 更多的完整性约束条件会在第四章 完整性约束 一节详细介绍。

插入元组:

insert into department values ('Biology', 'Watson', '90000');
insert into department values ('Comp.Sci.', 'Taylor', '100000');
insert into department values ('Elec.Eng.', 'Taylor', 85000);
insert into department values ('Finance', 'Painter', '120000');
insert into department values ('History', 'Painter', '50000');
insert into department values ('Music', 'Packard', '80000');
insert into department values ('Physics', 'Watson', '70000');insert into instructor values ('10101', 'Srinivasan', 'Comp.Sci.', '65000');
insert into instructor values ('12121', 'Wu', 'Finance', '90000');
insert into instructor values ('15151', 'Mozart', 'Music', '40000');
insert into instructor values ('22222', 'Einstein', 'Physics', '95000');
insert into instructor values ('32343', 'El Said', 'History', '60000');
insert into instructor values ('33456', 'Gold', 'Physics', '87000');
insert into instructor values ('45565', 'Katz', 'Comp.Sci.', '75000');
insert into instructor values ('58583', 'Califieri', 'History', '62000');
insert into instructor values ('76543', 'Singh', 'Finance', '80000');
insert into instructor values ('76766', 'Crick', 'Biology', '72000');
insert into instructor values ('83821', 'Brandt', 'Comp.Sci.', '92000');
insert into instructor values ('98345', 'Kim', 'Elec.Eng.', '80000');

数字类型的变量可以通过数字和字符串两种方式插入,而字符串类型的变量只能插入字符串。

删除元组: delete from r;
删除表: drop table r;
增加属性: alter table r add A D;
删除属性: alter table r drop A;

有关修改的操作会在本章末的 数据库的修改 一节详细讲解。

SQL查询的基本结构

SQL 查询的基本结构由三个子句构成:select, from, where
大部分语句十分简单,只要将语句自己实现下就可以明白。

单关系查询

select budget from department; <=> select all budget from department;
select distinct budget from department;
select budget +(-,*,/) 1.1 from department;
select * from department;

select building
from department
where dept_name = 'Comp.Sci.' and budget <(<=,>,>=,=,<>) 8;

多关系查询

select name, instructor.dept_name, building
from instructor, department
where instructor.dept_name = department.dept_name;

在这里因为 name 和 building 只分别存在于 instructor 和 department,所以不用加前缀。但是 dept_name 在两个表中均存在,所以需要加一个前缀表示选中的是哪个表中的 dept_name 。

一个典型的 SQL 查询具有如下格式:

select A1,A2, ... ,An
from r1,r2, ... ,rn
where P;

自然连接

自然连接(natural join)运算作用于两个关系,并产生一个关系作为结果。自然连接只考虑那些在两个关系模式中都出现的属性上取值相同的元组对。

自然连接后列出属性的顺序:先是两个关系模式中公共的属性(公共的属性只出现一次),然后是只出现第一个关系模式中的属性,最后是出现在第二个关系模式中的属性。

select *
from instructor natural join department;

可以和

select *
from department, instructor
where department.dept_name = instructor.dept_name;

还有

select *
from department, instructor;

对比一下。

附加的基本运算

更名运算

使用 as 语句进行更名运算,可以作用在 select中,也可以作用在from中。
更名的情景有三个:

属性更名:

  • from 子句的两个关系中可能存在同名属性,这种情况下,结果会出现重复的属性名
  • 如果我们在 select 中使用算数表达式,那么结果属性就没有名字
  • 还有就是为了改变结果中的属性名

例如:

select name as instr_name, building
from instructor, department
where instructor.dept_name = department.dept_name;

表更名:

  • 单纯为了将长名变短名
  • 为适应于需要比较同一关系中的元组的情况

例如:

select distinct T.name
from instructor as T, instructor as S
where T.salary > S.salary and S.dept_name = 'Biology';

参考资料

  • 《数据库系统概念》 机械工业出版社

《数据库系统概念》一二章学习笔记相关推荐

  1. 知识图谱·概念与技术--第1章学习笔记--知识图谱概述--知识图谱的概念,与传统语义网络的区别

    知识图谱·概念与技术--第1章学习笔记--知识图谱概述--知识图谱的概念,与传统语义网络的区别 知识图谱的概念,与传统语义网络的区别 狭义概念 作为语义网络的内涵 与传统语义网络的区别 优点 缺点 与 ...

  2. 【ERP】ERP发展阶段有哪些?对ERP发展各个阶段概念的理解(20年3月29日第二章学习笔记)

    ERP发展历经五大阶段 1.ROP库存订货点法 2.MRP物料需求计划 3.闭环MRP 4.MRPII制造业资源计划 5.ERP企业资源计划 1.ROP库存订货点法 ROP,库存订货点法,很好理解,就 ...

  3. 工程伦理第三章学习笔记2020最新

    工程伦理第三章学习笔记2020最新 因为之前自己在网上找答案总是觉得费劲,一道一道的找,很慢,突然找到了前两章的答案,感觉有一种前人种树后人乘凉的感觉,于是自己在艰难找完第三章习题并全对的情况下,将题 ...

  4. 多维随机变量及其分布——《概率论及其数理统计》第三章学习笔记

    多维随机变量及其分布--<概率论及其数理统计>第三章学习笔记 文章目录 多维随机变量及其分布--<概率论及其数理统计>第三章学习笔记 前言 MindMap 二维随机变量 定义与 ...

  5. 周志华西瓜书第三章学习笔记

    第三章学习笔记 文章目录 第三章学习笔记 1.知识脉络 2.我的笔记 参考 1.知识脉络 2.我的笔记 这一章公式推导实在太多了,需要补充的推导过程也有很多,就不写电子档了.扩展公式推导和LDA部分补 ...

  6. C++程序设计教程(钱能)第四章 学习笔记

    C++程序设计教程(钱能)第四章 学习笔记 4.1 名词解释与操作符 4.1.1 名词解释 4.1.2 操作符汇总 4.1.3 操作符的说明 4.2 算数运算问题 4.2.1 周而复始的整数 4.2. ...

  7. 工程伦理第十二章学习笔记2020最新

    工程伦理第十二章学习笔记2020最新 继续更新

  8. 现代控制理论第一章学习笔记

    现代控制理论第一章学习笔记 控制系统的状态空间表达式 1.1状态变量及状态空间表达式 1.2状态变量及状态空间表达式的模拟结构图 1.3状态变量及状态空间表达式的建立 1.3.1从系统框图建立状态空间 ...

  9. OpenGL蓝宝书第九章学习笔记:片段着色器和帧缓存

    前言 本篇在讲什么 OpenGL蓝宝书第九章学习笔记之片段着色器和帧缓存 本篇适合什么 适合初学OpenGL的小白 本篇需要什么 对C++语法有简单认知 对OpenGL有简单认知 最好是有OpenGL ...

最新文章

  1. 《你必须掌握的Entity Framework 6.x与Core 2.0》正式出版感想
  2. 第一次用.net2.0 LOGIN登陆控件的困惑和解决方法
  3. 特别完善的面试知识总结
  4. 安装不文件不完全_冬日不偷懒 跑步机不完全使用指南
  5. JSON的使用场景及注意事项介绍
  6. j2ee servlet 和 threadlocal ,synchronized 与 web容器
  7. python清除缓存的命令_python怎么删除缓存文件
  8. 转:CDC,CPaintDC,CClientDC,CWindowDC区别
  9. 没有完美,一切只是角度
  10. 如何在aspx页面中插入swf动画
  11. php bc 比较,php BC高精确度函数库
  12. Ant—使用Ant构建简单Java项目(一)
  13. 收集的Word2007技巧大全
  14. vue和echarts实现地图航线
  15. 高盛发布VR/AR研究报告
  16. 前端笔记,table标签中td宽度不受控制的坑
  17. 电子信息工程考研:12大专业方向解读
  18. DB、DBS 和 DBMS 有什么区别
  19. AppCan推插件AppCan-EC:电商网站可DIY手机客户端
  20. webpack4 教程 转载自陈三博客

热门文章

  1. three - 3 - 基础知识(1. three渲染结构,2.对canvas 进行响应式布局,3.让canvas 画布自适应设备分辨率 )
  2. 性能优化之道】每秒上万并发下的Spring Cloud参数优化实战
  3. 软件测试基础 - 单元测试理论部分
  4. 用计算机命令合成机械头像,PHOTOSHOP合成的逼真机械头像
  5. 单商户商城系统功能拆解38—分销应用—分销订单
  6. matlab7如何运行程序,技术员为你示范win7系统运行matlab2010找不到指定的程序的具体方法...
  7. 线性代数之 Ax=b反问题的一个特解
  8. 联想涉密专用计算机 字体,Lenovo出厂高分屏笔记本高分辨率下字体模糊的解决方法...
  9. 元宇宙中N中AR试鞋体验
  10. Jlink 烧写文件到 nandflash norflash