资源预览内容
第1页 / 共40页
第2页 / 共40页
第3页 / 共40页
第4页 / 共40页
第5页 / 共40页
第6页 / 共40页
第7页 / 共40页
第8页 / 共40页
第9页 / 共40页
第10页 / 共40页
亲,该文档总共40页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
数据库应用技术教程第四章数据库对象,1,第四章 数据库对象,S,数据库应用技术教程第四章数据库对象,2,4.1 表 Table,表的定义与维护 创建 CREATE TABLE 表名 (字段定义, 行级约束); 字段定义:字段名 数据类型DEFAULT值 字段约束,数据库应用技术教程第四章数据库对象,3,4.1 表 Table,修改 ALTER TABLE 表名 ADD 字段定义 DROP COLUMN字段 MODIFY 字段定义 MODIFY:变长,不影响数据值,定义;变短,检查数据。 ADD:字段默认值为NULL,可联合MODIFY使用,数据库应用技术教程第四章数据库对象,4,4.1 表 Table,删除 DROP TABLE 表名; CASCADE CONSTRAINTS 清空 TRUNCATE TABLE 表名 相当于DELETE FROM 表名,区别: DDL无需COMMIT,DML 需COMMIT。 DML需要ROLLBACK空间,数据库应用技术教程第四章数据库对象,5,4.2 约束 CONSTRAINTS,根据实际的业务要求,要求数据必须满足的一系列条件称为商业规则。也称为数据的一致性。实现商业规则有如下几种方式: 应用程序代码:在客户端和程序内部检查,不能保证全面的一致性。 触发器:在DBMS内部,对所有数据的变化都通过一段程序代码进行检查,可以保证一致性,但执行代价较大。 约束(Constraints):对于一些常见、通用的要求,使用设置的方式建立规则。设置简单,执行代价较小,一致性强 数据类型是最基本的一种约束,数据库应用技术教程第四章数据库对象,6,4.2 约束的分类,非空 NOT NULL 字段级 唯一 UNIQUE 主键 PRIMARY KEY 外键 FOREIGN KEY 检查 CHECK,数据库应用技术教程第四章数据库对象,7,4.2 约束的使用,唯一:可为空,一般不用于表间关系。可以是多个字段的联合 主键:唯一,不可为空,用于表联接。可以是多个字段的联合 外键:表中某些字段一定会出现在其它表中,应保持一致。可以是空值。 FOREIGN KEY (字段列表) REFERENCES 其它表名(字段名) 检查:只能针对单行记录,数据库应用技术教程第四章数据库对象,8,4.2 外键,外键是描述表之间关系的桥梁和纽带。 用来保证参照完整性 当被其他数据引用的数据删除(或修改)时,那些引用的数据如何处理? 不允许删除(Restrict) 置为空或缺省值 级联删除(Cascade),可能会导致雪崩。 在数据导入导出时,往往需要暂时禁止外键 外键的循环引用,数据库应用技术教程第四章数据库对象,9,4.2 约束的语法,上述约束,均可写在CREATE TABLE,ALTER TABLE 中 也可以直接作为CONSTRAINTS 对象创建 作为表维护语言的一部分 NOT NULL(含NULL)只能写在行级 其他四种约束,即可写在对应的行上,也可以写在语句的最后 如涉及到多个字段的联合,只能写在最后,数据库应用技术教程第四章数据库对象,10,约束创建举例,CREATE TABLE SALES (SID CHAR(3) NOT NULL, LID CHAR(3) NULL, SALARY NUMBER(4,0) PRIMARY KEY(AID), FOREIGN KEY(LID) REFERNCE LOCATIONS(LID), CHECK(SALARY0 AND UPPER(AID)=AID),数据库应用技术教程第四章数据库对象,11,约束的状态,ENABLENOVALIDATE,ENABLEVALIDATE,Existing data,New data,DISABLENOVALIDATE,DISABLEVALIDATE,数据库应用技术教程第四章数据库对象,12,约束检查的时机,DML statement,Check nondeferred constraints,COMMIT,Check deferred constraints,数据库应用技术教程第四章数据库对象,13,Primary and Unique Key 与索引,Is an index available for use,Yes,No,No,Yes,Yes,No,Create nonunique index,Create unique index,Do not use index,Use existing index,Key enabled,Constraintdeferrable,No,Yes,Constraint Deferrable,Is the index non-unique,No,数据库应用技术教程第四章数据库对象,14,4.3 视图 View,视图是一个虚表 不存储数据,在使用时对原有数据的重新组织。 它是一个逻辑结构,不占据存储空间。 基于表、在大部分SQL中,特别是DQL和DML,语法地位等价于表,数据库应用技术教程第四章数据库对象,15,使用视图的意义,限制存取(字段级权限和行级权限)。 不同用户不同视角和权限。 简化查询:别名、减少代码长度和复杂性 如,在求和值上做TOPN查询 提供不同的查询角度: 可以将常用的连接查询构造成视图。 兼容数据库设计的修改: 新表拼出旧表,视图兼容旧表的程序,数据库应用技术教程第四章数据库对象,16,视图的创建与删除,创建视图 CREATE OR REPLACE VIEW 名字 ( 字段列表 ) AS SELECT 子查询 WITH CHECK OPTION OR REPLACE:对已有同名视图进行替换,有违反定义的修改,不允许。无则返错。 如省略字段列表则用子查询返回的字段名定义 删除视图 DROP VIEW 视图名,数据库应用技术教程第四章数据库对象,17,视图上的DML,简单视图可以直接执行 复杂视图 表的数目多于1个 有字段表达式作为视图的列 有聚组函数作为视图的列 复杂视图的DML不一定能够正确执行 带有CHECK OPTION的视图的DML,不能违反条件,数据库应用技术教程第四章数据库对象,18,4.4 唯一性编号,目的 自动产生唯一编号,可看作编号发生器。 数字要求递增(或按一定规律变化), 不重复 不断号 用作主键 避免并发冲突 减少应用程序代码 提高性能 一个错误的例子,数据库应用技术教程第四章数据库对象,19,自增长字段,在MSSQL和MYSQL中,使用自增长字段作为解决方案 自增长字段是表格定义时,依附于某个字段(通常是主键)的属性 插入时无须为此字段指定值,即自增长 不同表之间不能复用 必须有一种方式,获得上次insert的值,数据库应用技术教程第四章数据库对象,20,序列 Sequences,序列是一个独立的编号发生器 在一个事务中,通过访问序列的NEXTVAL和CURRVAL可以获得序列的下一个值和当前值 保证多个事务之间不会出现并发冲突 不与某个表绑定,可以在多个表之间复用,数据库应用技术教程第四章数据库对象,21,序列的创建与维护,创建 CREATE SEQUENCE 序列名 INCREMENT BY n START WITH n MAXVALUE n | NOMAXVALUE MINVALUE n | NOMINVALUE CYCLE|NOCYCLE CACHE N| NOCACHE 删除 DROP SEQUENCE 序列名,数据库应用技术教程第四章数据库对象,22,使用序列的例子,对象定义,CREATE TABLE INV_MASTER (INV_NO NUMBER, ) CREATE TABLE INV_DETAIL (INV_NO NUMBER, LINE_NO NUMBER, ) CREATE SEQUENCE SEQ_INV,插入数据,INSERT INTO INV_MASTER (INV_NO, ) VALUES (SEQ_INV.NEXTVAL, ) INSERT INTO INV_DETAIL (INV_NO, LINE_NO, ) VALUES (SEQ_INV.CURRVAL, 1,数据库应用技术教程第四章数据库对象,23,4.5 索引,索引是这样一种数据库对象,它占据一定的存储空间,能够在查询时被自动使用,从而提高查询性能。 基于一个表中某个字段或字段的联合 索引的使用 不影响语句的正确性和结果 避免全表扫描 由查询优化器自动使用,并非所有查询都能获益 通过某些额外选项可以提示查询优化器利用索引 可能会加快DQL速度,但对DML速度的影响是双重的,数据库应用技术教程第四章数据库对象,24,建立索引的考虑,建立索引 字段取值范围较大 字段中NULL值比例较大 字段经常做为查询或连接条件 多数查询期望返回行数较少 不建立索引 表较小 表经常更新 字段不常做为条件或出现在表达式内 期望返回行数较多 根据系统运行情况,对性能瓶颈进行优化,数据库应用技术教程第四章数据库对象,25,索引的分类,逻辑分类 唯一索引 vs 非唯一索引 自动索引 vs 手工创建的索引 UK, PK, FK 基于函数的索引 物理分类 Partitioned or non-partitioned B-tree Normal or reverse key Bitmap,数据库应用技术教程第四章数据库对象,26,B-Tree Index的作用,Index entry header,Key column length,Key column value,ROWID,Root,Branch,Leaf,Index entry,数据库应用技术教程第四章数据库对象,27,Bitmap Index的作用,Table,Index,Block 10,Block 11,Block 12,File 3,数据库应用技术教程第四章数据库对象,28,比较B-Tree和Bitmap索引,B-tree Suitable for high-cardinality columns Updates on keys relativelyinexpensive Inefficient for queries using OR predicatesUseful for OLTP,Bitmap Suitable for low-cardinality columns Updates to key columns veryexpensive Efficient for queries using OR predicatesUseful for data warehousing,数据库应用技术教程第四章数据库对象,29,索引的创建与维护,创建 CREATE UNIQUE BITMAP INDEX 索引名 ON 表名 (字段列表) REVERSE 重建 Rebuild 修改索引存储位置和翻转等参数 通过重建,删除不用的入口项,提高效率 ALTER INDEX 索引名 REBUILD ONLINE 整理索引 ALTER INDEX 索引名 COALESCE; 删除索引 DROP INDEX 索引名,数据库应用技术教程第四章数据库对象,30,4.6 其他数据库对象,4.6.1 聚簇 Cluster 4.6.2 分区 Partition,数据库应用技术教程第四章数据库对象,31,4.7 数据库设计初步,数据库设计的过程 概念设计 逻辑设计 物理设计 范式 1NF:不存在多值的字段。(不能违背) 2NF:多个主键时,不存在只由一个主键决定的信息 如在orders里面加入顾客姓名 3NF:不存在由非主键决定的其他信息 如在SALES表中既有LID,又有CITY,数据库应用技术教程第四章数据库对象,32,主键的选择,业务主键和逻辑主键 业务主键 就是将业务中有唯一属性的字段挑出来做主键 逻辑主键 无实在意义的唯一性编号,数据库应用技术教程第四章数据库对象,33,选择原则,一、对于业务数据,最好采用逻辑主键; 二、对于业务复合主键有多个字
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号