Lec 1: Introduction
ToC
-
Database Systems:
- Database system concepts
- Database Applications
- Purpose of Database Systems
-
Data Modeling:
- Data Models
- Data abstraction
- Database Design
-
Database Languages
-
DBMS System Structure:
- Storage manager
- Query processing
- Transaction manager
-
Database and Application Architectures
- Database Users
- History of Database Systems
Database system concepts
-
数据库系统:包含关于特定组织的信息
- 数据:一组相互关联的数据。例如,一个公司的员工信息数据库。
- 程序:用于访问数据的一套程序。比如,一个用于查询员工工资信息的程序。
- 环境:一个方便且高效的使用环境。比如,一个可以轻松查询和更新数据的用户界面。
-
数据库
- 一组相互关联的数据(关于特定原因)。例如,一家医院的病人病历数据库。
- 极具价值。例如,一个银行的客户交易记录数据库。
- 相对较大 -- 需要良好的组织。例如,一个电商平台的产品信息数据库。
- 同时被多个用户和应用程序访问。例如,一个在线社交网络的用户信息数据库。
- 信息的安全性,即使系统崩溃或未经授权的访问也能得到保障。例如,一个政府机构的公民个人资料数据库。
-
DBMS(数据库管理系统):
- 一种软件:一套用于访问数据的程序。例如,一个用于管理学生课程成绩的学校管理系统。
- 能够管理数据库。
- 提供了一个既方便又高效的使用环境。例如,一个用于管理图书馆藏书的图书馆管理软件。
Database Applications
总体来说,DBMS 目前主要用于两个方面:
- 逻辑复杂、性能要求不高的,如用于银行
- 逻辑相对简单、性能要求高,如用于电子商务
University Database Example
-
Data consists of information about:
- Students
- Instructors
- Classes
-
Application program examples:
- Add new students, instructors, and courses
- Register students for courses, and generate class rosters
- Assign grades to students, compute grade point averages (GPA), and generate transcripts
View of Data
Data Model
关系模型 (Relational Model):
在关系模型中,数据以表格的形式组织,其中每个表格称为一个关系或表,每行代表一个记录,每列代表一个属性。关系之间通过共同的属性建立连接。
实例:
假设我们有一个学校数据库,其中有两个关系:学生(Students)和课程(Courses)。
Students Table:
| StudentID | Name | Age | Major |
| --------- | ------- | --- | ------- |
| 001 | Alice | 20 | Biology |
| 002 | Bob | 22 | Physics |
| 003 | Charlie | 21 | History |
Courses Table:
| CourseID | CourseName | Instructor |
| -------- | ---------- | ----------- |
| 101 | Biology | Dr. Smith |
| 102 | Physics | Dr. Johnson |
| 103 | History | Prof. Lee |
OO 模型 (Object-Oriented Model):
在面向对象模型中,数据以对象的形式组织,每个对象包含数据以及操作数据的方法。对象之间通过消息传递进行通信。
实例:
考虑一个汽车租赁系统,其中有一个对象是Car,另一个对象是Customer。
+---------------------+
| Car |
+---------------------+
| - make: string |
| - model: string |
| - year: int |
| - pricePerDay: int |
+---------------------+
+---------------------+
| Customer |
+---------------------+
| - name: string |
| - age: int |
| - email: string |
+---------------------+
OR 模型 (Object-Relational Model):
对象关系模型是关系模型和面向对象模型的结合,允许在关系数据库中存储对象数据,并支持面向对象编程的概念,如继承和多态性。
实例:
考虑一个图书馆系统,其中书籍(Books)是对象,但它们也可以根据不同的类型进行分类。
+-------------------------+
| Book |
+-------------------------+
| - title: string |
| - author: string |
| - publicationYear: int |
+-------------------------+
+-------------------------+
| TextBook |
+-------------------------+
| - subject: string |
| - edition: int |
+-------------------------+
+-------------------------+
| Novel |
+-------------------------+
| - genre: string |
| - pages: int |
+-------------------------+
ER 模型 (Entity-Relationship Model):
实体-关系模型是一种数据模型,用于描述现实世界中的实体以及它们之间的关系。实体通常表示为矩形,关系表示为菱形,而属性表示为椭圆。
实例:
考虑一个在线商店,其中有顾客(Customers)、产品(Products)和订单(Orders)之间的关系。
+---------------+ has +--------------+
| Customer | -------------- | Order |
+---------------+ +--------------+
| - ID: int | has | - OrderID |
| - Name: string| -------------- | - CustomerID |
| - Email: string | - TotalPrice |
+---------------+ +--------------+
contains
|
v
+-------------------+
| Product |
+-------------------+
| - ProductID: int |
| - Name: string |
| - Price: float |
+-------------------+
趋势:
- 关系模型
- 应用最广的模型
- 我们这一节课要实现的模型
- OO 模型
- OR 模型
- 两个对象模型可能是今后的方向
- ER 模型
- 非常重要的模型
Data Abstraction
我们采用 schema and instance model
- Logical Schema
- The logical structure of the database
- Analogous to the type of a variable
- Physical Schema
- The overall physical structure of the database
- Instance
- The actual content of the DB at a particular point of time
- Analogous to the value of a variable
Programming Language
DDL (Data Definition Language)
- DDL compiler 会生成一个 data dictionary
- Data dictionary contains metadata
- database schema
- 列名+数据类型
- integrity constraints
- 主键:uniqueness
- 外键:referential integrity
- i.e. 保证课程安排的课程号、教师号永远会出现在课程的课程号和教师的教师号当中
- 因此,如果不在其中,那么插入错误
- 如果课程安排仍有 entry 的课程号在课程的课程号里,那么就不能删除课程的课程号对应的 entry
- 其他约束:如非空等等
- authorization
- 这里没有给出,不过不难理解
- database schema
DML (Data Manipulation Language)
- Language for accessing and manipulating the data organized by the appropriate data model
- DML also known as query language
- SQL is the most widely used query language
数据库设计示例:大学课程管理系统
数据字典
代码段
| 表名 | 列名 | 数据类型 | 主键 | 外键 | 约束 |
| -------- | ------ | -------- | ---- | ----------- | ---- |
| 课程 | 课程号 | 字符(10) | 是 | | 非空 |
| 课程 | 课程名 | 字符(50) | | | 非空 |
| 课程 | 学分 | 整数 | | | 非空 |
| 教师 | 教师号 | 字符(10) | 是 | | 非空 |
| 教师 | 教师名 | 字符(50) | | | 非空 |
| 教师 | 所属系 | 字符(10) | | | 非空 |
| 课程安排 | 课程号 | 字符(10) | | 课程.课程号 | 非空 |
| 课程安排 | 教师号 | 字符(10) | | 教师.教师号 | 非空 |
| 课程安排 | 学期 | 字符(10) | | | 非空 |
SQL 代码
SQL
-- 创建课程表
CREATE TABLE 课程 (
课程号 CHAR(10) PRIMARY KEY NOT NULL,
课程名 CHAR(50) NOT NULL,
学分 INT NOT NULL
);
-- 创建教师表
CREATE TABLE 教师 (
教师号 CHAR(10) PRIMARY KEY NOT NULL,
教师名 CHAR(50) NOT NULL,
所属系 CHAR(10) NOT NULL
);
-- 创建课程安排表
CREATE TABLE 课程安排 (
课程号 CHAR(10) NOT NULL,
教师号 CHAR(10) NOT NULL,
学期 CHAR(10) NOT NULL,
FOREIGN KEY (课程号) REFERENCES 课程(课程号),
FOREIGN KEY (教师号) REFERENCES 教师(教师号)
);
-- 插入数据
INSERT INTO 课程 VALUES ('CS101', '计算机科学概论', 3);
INSERT INTO 课程 VALUES ('MA201', '高等数学', 4);
INSERT INTO 教师 VALUES ('T001', '张三', '计算机系');
INSERT INTO 教师 VALUES ('T002', '李四', '数学系');
INSERT INTO 课程安排 VALUES ('CS101', 'T001', '2023-2024秋季');
INSERT INTO 课程安排 VALUES ('MA201', 'T002', '2023-2024秋季');
-- 查询所有课程
SELECT * FROM 课程;
-- 查询所有教师
SELECT * FROM 教师;
-- 查询所有课程安排
SELECT * FROM 课程安排;
-- 查询由张三教授的课程
SELECT 课程.*
FROM 课程安排
INNER JOIN 教师 ON 课程安排.教师号 = 教师.教师号
WHERE 教师.教师名 = '张三';
完整性约束示例
- 主键约束:确保每个课程号和教师号都是唯一的。
- 外键约束:确保课程安排表中的课程号和教师号都存在于相应的表中。
- 非空约束:确保课程名、教师名、所属系、学分和学期等字段不能为空。
DBMS System Structure
Storage manager
The storage manager is responsible for
- Interaction with the OS file manager
- Efficient storing, retrieving and updating of data
Query processer
分为 DDL
- Interpreter: Interpret DDL statements to relational-algebra expression
- Compiler: Translate the expressions to evaluation plans
- Evaluation Engine: Execute the low-level evaluation plan (, and return the query output)
Transaction manager
用于保证
- 原子性
- 一致性(注意不是 DDL 的一致性)
- 事务执行前后,数据库的状态都必须满足一定的约束条件,保证数据的逻辑完整性
- e.g. A 向 B 转 100 元,那么,A 如果转出成功,那么 B 必须转入成功
- 事务执行前后,数据库的状态都必须满足一定的约束条件,保证数据的逻辑完整性
- 隔离性
- 不干扰其他 txs 的执行
- 持久性(Durability)
- 一旦事务提交,其对数据库所做的更改将永久保存,即使系统发生故障也不会丢失