数据库概论

数据模型

数据模型是对现实世界数据特征的抽象,也就是说数据模型是用来描述数据、组织数据和对数据进行操作的。现有的数据库系统均是基于某种数据模型的。

根据模型应用的不同目的,数据模型分为两类:概念模型、逻辑模型和物理模型。概念模型是按用户的观点来对数据和信息建模,主要用于数据库设计。第二类逻辑模型主要包括关系模型、层次模型、网状模型、层次模型、面向对象数据模型和对象关系模型、半结构化模型等。其中关系模型是最重要的一种数据模型。

从数据库应用开发人员角度看,数据库系统通常采用三级模式结构(外模式、模式、内模式)。从最终用户角度看,数据库系统的结构分为单用户结构、主从式结构、分布式结构、客户-服务器、浏览器-应用服务器/数据库服务器多层结构等。这是数据库外部的体系结构。

常用数据库以及模型

  • MySQL 小型关系型数据库管理系统,适用于中小型网站
  • Oracle 一种大型关系数据库系统,一般用于商业、政府机关等。能处理大批量的数据。
  • SQL Server 关系数据库管理系统。有微软和Sybase两家
  • DB2 IBM的一系列关系型数据库管理系统,主要应用于大型应用系统。对大型分布式应用系统尤为适用。
  • Informix IBM出品的关系数据库管理系统家族。
  • Sybase 关系型数据库,是一种典型的UNIX或WindowsNT平台上客户机/服务器环境下的代行数据库系统。
  • PostgreSQL 一种特性非常齐全的自由软件的对象-关系型数据库。
  • MongoDB 跨平台、高性能、开源、无模式的文档型数据库。
  • NoSQL 泛指非关系型数据库,如Redis、HBase、MongoDB、CouchDB等。

关系数据库

关系模型的数据结构非常简单,只包含单一的数据结构——关系。关系的每一个分类必须是一个不可分的数据项,即不允许表中有表,一列只能有一个head。行和列的顺序无所谓,可以任意交换。

一些概念

R(D1,D2,……Dn)

  • R表示关系的名字,n是关系的目或度(degree),即列长度
  • 表的每行对应一个元组,表的每列对应一个域。
  • 候选码:若关系中的某一属性组可以唯一表示一个元祖而其子集不能,则称该属性组为候选码。
  • 主码/主键(Primary Key):选定一个候选码作为唯一标识。

关系数据库标准语言SQL

结构化查询语言是关系数据库的标准语言,也是一个通用的、功能极强的关系数据库语言,可以实现数据库模式创建、数据库数据的增删改查、数据库安全性完整性定义与控制等一系列功能。

数据定义

操作对象 创建 删除 修改
模式 CREATE SCHEMA DROP SCHEMA
CREATE TABLE DROP TABLE ALTER TABLE
视图 CREATE VIEW DROP VIEW
索引 CREATE INDEX DROP INDEX ALTER INDEX

一个关系数据库管理系统的实例中可以创建多个数据库,一个数据库中可以建立多个模式,一个模式下通常包含多个表、视图和索引等数据库对象。当表的数据量比较大时,查询操作会比较耗时,建立索引是加快查询速度的有效手段。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CREATE SCHEMA <模式名> AUTHORIZATION <用户名> //也可以在后面继续创建表、视图等
CREATE SCHEMA TEST AUTHORIZATION ZHANG //为用户ZHANG创建一个模式TEST

DROP SCHEMA <模式名> <CASCADE|RESTRICT> //删除模式,cascade表示删除模式下所有数据库对象,restrict表示如果存在下属数据库,则不执行

CREATE TABLE <表名> (<列名><数据类型>[列级完整性约束条件下]) //如设置主码等
CREATE TABLE StudentCourse (
Sno CHAR(9), //也可以在其后面直接加PRIMARY KEY,表示其为主键。这样称为列级完整性
Cpo CHAR(4),
Grade SMALLINT,
PRIMARY KEY(Sno,Cno), //主码由两个属性构成,必须作为表级完整性进行定义
FOREING KEY (Sno) REFERENCES Student(Sno), //表级完整性定义,Sno是外码,被参照表示Student
FOREING KEY (Cno) REFERENCES Course(Cno), //表级完整性定义,Cno是外码,被参照表示Course
)

ALTER TABLE <>
[ADD <新列名> <数据类型> [完整性约束]] //ALTER TABLE Student ADD S_entrance DATE;
[DROP <列名> [CASCADE|RESTRICT]]
[ALTER COLUMN <列名> <数据类型>]

DROP TABLE <表名> [CASCADE|RESTRICT]; //删除基本表

数据查询与操作SQL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//表的查询
SELECT [ALL|DISTINCT] <目标列表达式> [,<目标列表达式>]…… //指明选择要获取的列
FROM <表名或视图名> [,<表名或视图名>……] //指明从什么表格里面取,可以多个表格
[WHERE <条件表达式>] //Sage<20,指明条件
[GROUP BY <列名1> [HAVING <条件表达式>]]
[ORDER By <列名2> [ASC|DESC]]; //按某列排序,ASC表示升序,DESC表示降序

SELECT Student.Sno,Sname //*表示全部取出来
FROM Student,SC,Course
WHERE Student.Sno=SC.Sno AND
SC.Cno=Course.Cno AND
Course.Cname='信息系统'
ORDER BY Sno ASC;

//插入新项
INSERT INTO <表名> [(<属性列1>[,<属性列2>]……)]
VALUES (<常量1>[,<常量2>]……);

INSERT INTO Student(Sno,Sname) //如果新元组与属性列一一对应,则可以省略属性
VALUES('20121515','黎明');

//更新表格内容
UPDATE <表名>
SET <列名>=<表达式> [,<列名>=<表达式>]
[WHERE <条件>];

UPDATE Student
SET Sage=22
WHERE Sno='20121515';

//删除数据
DELETE FROM <表名>
[WHERE <条件>]

DELETE FROM Student
WHERE Sno='20121515'