(本文章只是充作本人学习笔记,如有侵权,请告知,将立即删除。如因此给版权人带来困扰,在此致以诚挚的歉意)
转载自:http://www.360doc.com/content/13/0418/21/11971201_279313765.shtml 收藏人:eskimo888
一. 数据抽象:物理抽象、概念抽象、视图级抽象,内模式、模式、外模式
模型是对现实世界的抽象,在数据库技术中,我们用数据模型的概念描述数据库的结构和语义,对现实世界的数据进行抽象。从现实世界的信息到数据库存储的数据以及用户使用的数据是一个逐步抽象的过程,有如下四种:概念数据模型、逻辑数据模型、外部数据模型、和内部数据模型。
1、 概念模型
a) 定义:表达用户需求观点的数据全局逻辑结构的模型
b) 特点:
i. 概念模型表达了数据的整体逻辑结构,它是系统用户对整个应用项目涉及的数据的全面描述;
ii. 概念模型是从用户需求观点出发,对数据建模;
iii. 概念模型独立于硬件和软件;
iv. 概念模型是数据库设计人员与用户之间进行交流的工具。
c) 主要方法:概念模型主要采用的是实体联系(ER)模型,ER模型主要用ER图来表示。
d) ER图:ER图中把研究的对象分成实体和联系两大类,用矩形表示实体类型,菱形表示联系类型,椭圆形表示属性,实体标识符用属性下的一根下划线表示。
e) 优点:
i. 简单,容易理解,真实地反应用户的需求;
ii. 是与计算机无关,用户容易接受。
2、 逻辑模型
a) 定义:表达计算机实现观点的DB全局逻辑结构的模型,选定DBMS后,根据选定的DBMS的特点从概念模型转换成逻辑模型。
b) 特点:
i. 逻辑模型表达了DB的整体逻辑结构,它是设计人员对整个应用项目数据库的全面描述;
ii. 逻辑模型是从数据库实现的观点出发,对数据建模;
iii. 逻辑模型独立于硬件,依赖于软件;
iv. 逻辑模型是数据库设计人员与应用程序员之间交流的工具。
c) 分类:
i. 层次模型(Hierarchical model)
1. 定义:用树形结构表示实体类型及实体间联系的数据模型。
2. 数据联系:指针
3. 数据结构:树结构
4. 优点:记录之间通过指针来实现,查询效率较高
5. 缺点:只能表示1:N联系;由于层次顺序的严格和复杂,引起数据的查询和更新操作很复杂,因此编写程序也很复杂
6. 代表:IMS
7. 盛行:20世纪70年代
ii. 网状模型(Network model)
1. 定义:用有向图结构表示实体类型及实体间联系的数据模型
2. 数据联系:指针
3. 数据结构:有向图结构
4. 优点:记录之间的联系通过指针实现,M:N也较容易实现,查询效率较高
5. 缺点:数据结构复杂和编程复杂
6. 代表:IDS,IMAGE/3000,IDMS,TOTAL
7. 盛行:20世纪70-80年代中期
iii. 关系模型(Relational Model)
1. 定义:用二维表结构表示实体类型及实体间联系的数据模型
2. 数据联系:通过二维表间的公共属性
3. 数据结构:二维表
4. 优点:记录之间的联系采用关键码实现,表格简单,用户易懂;用查询语句就可以实现对数据库操作,不设计存储结构和访问技术
5. 缺点:更复杂的数据结构,如多媒体数据、多维表格数据显得力不从心
6. 代表:Oracle,Sybase,DB2,SQL Server,Infomix
7. 盛行:20世纪80年代到现在
3、 外部模型
a) 定义:表达用户使用观点的DB局部逻辑结构的模型。根据业务的特点划分成若干业务单位,每个业务单位都有特定的约束和需求
b) 特点:
i. 外部模型是逻辑模型的一个逻辑子集;
ii. 外部模型独立于硬件,依赖于软件;
iii. 外部模型反映了用户使用数据库的观点。
c) 优点:
i. 简化了用户的观点;
ii. 有助于数据库的安全性保护;
iii. 外部模型是对概念模型的支持。
4、 内部模型
a) 定义:表达DB物理结构的模型。又称为物理模型,是数据库最底层的抽象,它描述数据在磁盘或磁带上的存储方式,存取设备和存取方法。
b) 特点:
i. 内部模型是与硬件和软件紧密相连的;
ii. 内部模型反映了数据库的底层实现细节。
5、 三层模式和两级映射
a) 三层模式的定义:在用户到数据库之间,DB的数据结构有三个层次外部模型、逻辑模型和内部模型,这个三个层次使用数据定义语言(Data Definition Language,DDL)定义以后就称为模式(Schema),即外模式、逻辑模式和内模式。数据库的数据结构描述有三个层次:
i. 外模式是用户与数据库系统的接口,是用户用到的那部分数据的描述
ii. 逻辑模式是数据库中全部数据的整体逻辑结构的描述
iii. 内模式是数据库在物理存储方面的描述。
b) 三层模式体系结构的特点:
i. 用户使用数据库的数据操纵语言(Data Manipulation Language,DML)语句对数据库进行操作,实际上是对外模式的外部记录进行操作;
ii. 逻辑模式必须不涉及到存储结构、访问技术等细节;
iii. 内模式并不涉及到物理设备的约束。
c) 两级映射的定义:由于三层模式的数据结构可能不一致,即记录类型、字段类型的命名和组成可能不一样,因此需要三层模式之间的映像来说明外部记录、逻辑记录、内部记录之间的对应性。三层模式之间存在两级映像:
i. 外模式/逻辑模式映像存在于外模式和逻辑模式之间,用于定义外模式和逻辑模式之间的对应性,这个映像一般放在外模式中描述
ii. 逻辑模式/内模式映像存在于逻辑模式和内模式之间,用于定义逻辑模式和内模式之间的对应性,这个映像一般放在内模式中描述
d) 飞
6、 数据抽象的过程(即数据库设计的过程)
a) 根据用户需求,设计数据库的概念模型<概念设计>
b) 根据转换规则,把概念模型转换成数据库的逻辑模型
c) 根据用户的业务特点,需根据逻辑模型设计不同的外部模型,给程序员使用,外部模型与逻辑模型之间的对应性称为映像<逻辑设计>
二. SQL语言包括数据定义、数据操纵(Data Manipulation),数据控制(Data Control)
数据定义:Create Table,Alter Table,Drop Table, Craete/Drop Index等
数据操纵:Select ,insert,update,delete,
数据控制:grant,revoke
三. SQL常用命令
CREATE TABLE Student(
ID NUMBER PRIMARY KEY,
NAME VARCHAR2(50) NOT NULL);//建表
CREATE VIEW view_name AS
Select * FROM Table_name;//建视图
Create UNIQUE INDEX index_name ON TableName(col_name);//建索引
INSERT INTO tablename {column1,column2,…} values(exp1,exp2,…);//插入
INSERT INTO Viewname {column1,column2,…} values(exp1,exp2,…);//插入视图实际影响表
UPDATE tablename SET name=’zang 3’ condition;//更新数据
DELETE FROM Tablename WHERE condition;//删除
GRANT (Select,delete,…) ON (对象) TO USER_NAME [WITH GRANT OPTION];//授权
REVOKE (权限表) ON(对象) FROM USER_NAME [WITH REVOKE OPTION] //撤权
列出工作人员及其领导的名字:
Select E.NAME, S.NAME FROM EMPLOYEE E S
WHERE E.SUPERName=S.Name
四. 视图:
什么是视图:
视图(view):从一个或几个基本表中根据用户需要而做成一个虚表
1:视图是虚表,它在存储时只存储视图的定义,而没有存储对应的数据
2:视图只在刚刚打开的一瞬间,通过定义从基表中搜集数据,并展现给用户
视图与查询的区别:
视图和查询都是用由sql语句组成,这是他们相同的地方,但是视图和查询有着本质区别:
它们的区别在于:
1:存储上的区别:视图存储为数据库设计的一部分,而查询则不是.
2:更新限制的要求不一样
要注意:因为视图来自于表,所以通过视图可以间接对表进行更新,我们也可以通过update语句对表进行更新,但是对视图和查询更新限制是不同的,以下我们会知道虽然通过视图可以间接更新表但是有很多限制.
3:排序结果:通过sql语句,可以对一个表进行排序,而视图则不行。比如:创建一个含有order by子句的视图,看一下可以成功吗?
视图的优点:
为什么有了表还要引入视图呢?这是因为视图具有以下几个优点:
1:能分割数据,简化观点。可以通过select和where来定义视图,从而可以分割数据基表中某些对于用户不关心的数据,使用户把注意力集中到所关心的数据列.进一步简化浏览数据工作
2:为数据提供一定的逻辑独立性。 如果为某一个基表定义一个视图,即使以后基本表的内容的发生改变了也不会影响“视图定义”所得到的数据
3:提供自动的安全保护功能。 视图能像基本表一样授予或撤消访问许可权
4:视图可以间接对表进行更新,因此视图的更新就是表的更新
视图的创建和管理
视图的创建
1:通过sql语句
格式:create view 视图名 as select 语句
试一试:分别创建关于一个表或多个表的视图[因为视图可以来自于多表]
2:通过企业管理器
说明:
1:在完成视图的创立之后,就可以像使用基本表一样来使用视图
2:在创建视图时,并非所有的select子查询都可用,如:compute和compute by,order by[除非与top一起连用]
3:但在查询时,依然都可以用在创建时禁用的select子查询
4:在视图创建时,必须为没有标题列指定标题[思考:能否不用select语句来创建一个视图]
视图的删除:
1:通过sql语句:drop view 视图名
2:通过企业管理器
说明:与删除表不同的是,删除视图后只是删除了视图了定义,并没有删除表中的数据.[查看相关性]
修改视图的定义
1:通过企业管理器
2:通过sql语句:
格式:alter view 视图名 as 新的select语句
浏览视图信息 sp_helptext 视图名 [查看视图创建的语句]
如何通过视图修改基本表的数据.
A:在视图上使用insert语句
通过视图插入数据与直接在表中插入数据一样,但视图毕竟不是基本表.因此在进行数据插入时还是有一定的限制
1:如果视图上没有包括基本表中属性为not null[不能为空]的列,那么插入操作会因为那些列是null值而失败.
2:如果某些列因为某些规则或约束的限制而不能直接接受从视图插入的列时,插入会失败
3:如果在视图中包含了使用统计函数的结果,或是包含计算列,则插入操作会失败
4:不能在使用了distinct语句的视图中插入值
5:不能在使用了group by语句的视图中插入值
1
数据库视图介绍(二)
B:使用update更新视图中的数据
1:更新视图与更新表格一样,但是在视图中使用了多个基本表连接的情况下,每次更新操作只能更新来自基本表的一个数据列
例如:创建以下视图:
create view del asselect 职工号,姓名,部门名称,负责人 from work1,部门where work1.部门编号=部门.部门编号
如果再执行下面的语句时:
update del set 职工号=\'001\',部门名称=\'wenda\' where 职工号=\'01\'[出现错误]
只能够改成:
update del set 职工号=\'001\' where 职工号=\'01\' update del set 部门名称=\'wenda\' where 职工号=\'01\'
2:不能在使用了distinct语句的视图中更新值
3:不能在使用了group by语句的视图中更新值
C:使用delete删除视图中数据.
通过视图删除数据最终体现为从基本表中删除数据
格式:delete 视图名 [where 条件]
说明:当视图由两个以上的基表构成时,不允许删除视图的数据
例如:建一个视图kk
create view kk asselect 职工号,姓名,性别,部门名称 from work1,部门 where work1.部门编号=部门.部门编号 [试着去删除]
使用with check option的视图
如果不了解视图定义内容,则常常会发生向视图中输入不符合视图定义的数据的情况.
比如:
create view xm asselect * from work where 性别=\'男\'
完全可以插入insert xm values(\'001\',\'女\',23,\'2400\'....)
尽管从意义上来说是不合理的,但是上述语句是正确的.为了防止这种情况的发生,可以使用with check option子句来对插入的或更改的数据进行限制.
比如:
create view xm asselect * from work where 性别=\'男\' with check option
使用schemabinding的视图[使用绑定到构架]
我们知道视图是依赖于表,如果在一个表中创建一个视图,今后如果这个表被删除了,则这个视图将不可再用了.为了防止用户删除一个有视图在引用的表,可以在创建视图的时候加上schemabinding关键字.
比如:
create view 基本工资 with SCHEMABINDINGas select 姓名,性别,基本工资 from dbo.work
说明:
1:不能使用“*”来创建此类型的视图
2:创建此类型的视图时,一定要加上dbo.表名.
3:如果在某个表中定义了此类视图,则用户将不能对表的结构进行修改,否则会删除这些绑定
4:如果用户对表的结构进行列改名,则会删除绑定而且视图不可用.
5:如果用户对表的结构进行列的类型或者大小修改,则会删除绑定但视图可用,此时用户可以删除视图所引用的表.
使用with encryption对视图进行加密
为了保护创建视图定义的原代码,可以对视图进行加密.
比如:
create view kk with encryptionas select * from work where 职称=\'经理\'
用sp_helptext来查看一下.或用企业管理器查看一下.
说明:如果应用此项用户将无法设计视图
使用视图加强数据的安全
一般通过使用视图共有三种途径加强数据的安全性
A:对不同用户授予不同的使用权.
B:通过使用select子句限制用户对某些底层基表的列的访问
C:通过使用where子句限制用户对某些底层基表的行的访问, 对不同用户授予不同的权限
五. 完整性约束:实体完整性、参照完整性、用户定义完整性
六. 第三范式:
1NF:每个属性是不可分的。
2NF:若关系R是1NF,且每个非主属性都完全函数依赖于R的键。例SLC(SID#, CourceID#, SNAME,Grade),则不是2NF;
3NF:若R是2NF,且它的任何非键属性都不传递依赖于任何候选键。