2.1 数据库概述

今天,数据库已经无处不在。本节将简单介绍数据模型、数据库的完整性、安全性以及数据库的概念。

2.1.1 数据模型

数据模型是数据库技术的核心。所有的DBMS都是基于某种数据模型实现的,所有的数据库应用也都建立在某种数据模型之上。

1.数据模型的分类

1)概念模型(信息模型)

按用户的观点对数据和信息进行建模,概念模型主要用于数据库设计。

概念模型中的基本概念:

(1)实体:客观存在并且可以相互区别的事物。

(2)属性:实体所具有的某一个特性。

(3)码:唯一标识实体的属性集。

(4)实体型:用实体名及其属性名集合来抽象和刻画实体;具有相同属性的实体必然具有相同的特征和性质。

(5)实体集:同一类型实体的集合。

(6)联系:实体内部的联系通常指组成实体的各属性之间的联系;实体之间的联系通常指不同实体之间的联系。联系类型有一对一、一对多和多对多等多种类型。

概念模型的一种表示方法:实体-联系方法(E-R方法或E-R模型)。

2)逻辑模型和物理模型

(1)逻辑模型。

按计算机系统的观点对数据建模,逻辑模型主要用于数据库管理系统的实现。

数据库领域中主要的逻辑模型有层次模型、网状模型、关系模型、面向对象数据模型、对象关系数据模型、半结构化数据模型,其中层次模型和网状模型统称为格式化模型。

(2)物理模型。

物理模型是对数据底层的抽象,描述数据在系统内部的表示方式、存取方法或在磁盘、磁带上的存储方式和存取方法,是面向计算机系统的,它的具体实现是数据库管理系统的任务。

2.数据模型的组成要素

数据模型由数据结构、数据操作和数据的完整性约束条件三部分组成。

1)数据结构

数据结构是描述数据库组成对象以及对象之间的联系,它是所描述对象类型的集合,是对系统静态特性的描述。

数据结构描述的内容如下:

(1)和对象的类型、内容、性质有关;

(2)数据之间联系有关的对象。

2)数据操作

数据操作是指对数据库中各种对象的实例允许执行操作的集合,其中包括操作及有关规则。它是对系统动态特性的描述。

3)数据的完整性约束条件

数据的完整性约束条件是一组完整性规则。数据模型规定其必须遵守的基本的和通用的完整性约束条件。

完整性规则是在给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据库的状态以及状态的变化,以保证数据的正确、有效和相容。

2.1.2 数据库系统结构

从用户的角度分析,数据库系统的外部结构可以分为单用户结构、主从式结构、分布式结构、客户机/服务器结构、浏览器/应用服务器/数据库服务结构等。从系统的角度分析,数据库系统的内部结构通常采用三级模式。

1.数据库的体系结构

数据库的体系结构分为三级:外部级(外模式)、概念级(模式)、内部级(内模式)。

(1)外模式也称子模式,是个别用户的数据视图,即个别用户涉及到的数据的逻辑结构。

(2)模式也称概念模式,是数据库中全部数据在逻辑上的视图。

(3)内模式也称存储模式,它既定义了数据库中全部数据的物理结构,还定义了数据的存储方法、策略等。

2.二级映像与数据独立性

(1)外模式/模式映像实现了逻辑独立性。

(2)模式/内模式映像实现了物理独立性。

(3)数据的逻辑独立性是指应用程序与数据库的逻辑结构之间的相互独立性。

数据库系统结构如图2-1所示。

图2-1 数据库系统结构

2.1.3 完整性与安全性

数据的完整性和安全性是两个不同的概念。

(1)数据的完整性是防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据。

防范对象:不合语义、不正确的数据。

(2)数据的安全性是防止数据库受到恶意破坏和非法存取。

防范对象:非法用户和非法操作。

1.完整性

1)PRIMARY KEY约束

建立一个学生表Student,其中包括学号(Sno)、姓名(Sname)、性别(Ssex)、年龄(Sage)、入学时间(Sdate)5个属性,学号为主键。

2)FOREIGN KEY约束

FOREIGN KEY约束用于实现参照完整性。外键约束不仅可以与另一个表上具有主键约束的列建立联系,也可以与另一个表上具有UNIQUE约束的列建立联系,还可以参照自身表中的其他列,成为自引用。

外键的作用不只是对自身表中的数据操作进行限制,同时也限制了主键所在表的数据的修改或删除操作。在SQL中,创建FOREIGN KEY约束的语法格式如下:

    [constraint <约束名>] foreign key [(<列名>)]
    references <被参照表>(<被参照表的列名>)
    [on delete {cascade | no action}]
    [on update {cascade | no action}]

on delete{cascade | no action}表示当要从被参照表中删除该行所引用的行时,要对该行采取的操作。若指定操作为cascade,则从被参照表中删除被引用行时,也将从参照表中删除引用行;若指定操作为no action,将拒绝删除被参照表中的被引用行,默认为no action。

on update {cascade | no action}与on delete {cascade | no action}类似。若指定操作为cascade,则级联更新;若指定no action,则拒绝更新,默认为no action。

例如:创建选课表SC,其中包括学号(Sno)、课程号(Cno)和成绩(Grade)。学号和课程号为主键;学号和课程号分别为外键。

3)UNIQUE约束

UNIQUE约束用来保证数据取值的唯一性。在SQL中,创建UNIQUE约束的语法格式如下:

    [constraint <约束名>] unique [ (<列名> [,<列名>…])]

4)CHECK约束

CHECK约束通过检查输入表中数据的值是否符合约束条件来维护值域的完整性,只有符合约束条件的数据才允许输入到表中。例如:限制学生的考试成绩(Grade)在0~100,则可以在成绩列上创建一个CHECK约束。

CHECK约束的语法格式为:

    [constraint <约束名>] check(<条件表达式>)

在创建表时定义CHECK约束。

5)删除约束

    alter table <表名>
    drop constraint <约束名>;
2.安全性

1)数据库的安全性

(1)定义用户权限。

用户权限是指用户对于数据对象能够进行的操作种类。定义用户权限就是定义某个用户可以在哪些数据库对象上进行哪些类型的操作。在SQL中定义用户权限是由GRANT和REVOKE语句实现的。

(2)合法权限检查。

每当用户发出存取数据库的操作请求后,DBMS首先通过查找数据字典来进行合法权限的检查。如果用户的操作请求没有超出数据操作权限,则执行其数据操作;否则DBMS将拒绝执行此操作。

2)授权

授权(GRANT)是为用户定义存取权限。

在SQL中是由GRANT语句为用户授权的。GRANT语句的一般格式如下:

    grant <权限1> [,<权限2>…]
    on [<对象类型>] <对象名> [,[<对象类型>] <对象名>…]
    to <用户1> [,<用户2>…]
    [with grant option];

该语句是将指定操作对象的指定操作权限授予指定用户。发出该语句的可以是GRANT、数据库对象的创建者(Owner)和已经拥有某种权限的用户。接受权限的用户可以是一个或多个具体用户,也可以是PUBLIC(全体用户)。with grant option选项的作用是允许获得指定权限的用户把权限再授予给其他用户。

(1)把查询Student表和修改姓名(Sname)列的权限授予用户user1。

    grant update(Sname),select on Student to user1;

(2)把对Student表、Course表和SC表的查询、修改、插入和删除等全部权限授予用户user1和用户user2。

    grant all priviliges on Student,Course,SC to user1,user2;

(3)把对表SC的查询权限授予所有用户。

    grant select on SC to public;

(4)把对表SC的查询权限授予用户user3,并给用户user3有再授予的权限。

    grant select on SC to user3
    with grant option;

(5)用户user3把查询SC表的权限授予用户user4。

    grant select on SC to user4;

3)收回权限

(1)把用户user1修改姓名的权限收回。

    revoke update(Sname) on Student from user1;

(2)把用户user3查询SC表的权限收回。

    revoke select on SC from user3;