Version3.0数据库对象第三章(Oracle数据库设计与实现)DatabaseDesignandImplementationUsingOracle2/44目标•同义词•序列•视图•索引(Oracle数据库设计与实现)DatabaseDesignandImplementationUsingOracle3/44一、同义词2-1•数据库对象的替换名称,用作表、视图、序列、过程、存储函数、程序包、实体化视图或其他同义词的别名或替换名称优点:–简化SQL语句–隐藏对象的名称和所有者–为分布式数据库的远程对象提供了位置透明性–提供对对象的公共访问(Oracle数据库设计与实现)DatabaseDesignandImplementationUsingOracle4/44同义词2-2•同义词类型–私有–公用•CREATESYNONYM命令用于创建同义词•DROPSYNONYM命令用于删除同义词•USER_SYNONYMS包含有关同义词的信息(Oracle数据库设计与实现)DatabaseDesignandImplementationUsingOracle5/44同义词的创建及使用•语法–CREATE[PUBLIC]SYSNONYMFORobjcet;•示例–SELECT*FROMMarketing.vendor_master;–CREATESYSNOSYMvendor_masterFORMarketing.vendor_master;•删除–DROP[PUBLIC]SYNONYM[schema.]synonym;–DROPSYNONYMvendor_master;(Oracle数据库设计与实现)DatabaseDesignandImplementationUsingOracle6/44注意事项•私有同义词是由普通用户创建的,并且有创建该同义词的用户才能使用•公用同义词是由DBA创建的,任何数据库用户都可以使用它。用于隐藏基表的身份,并降低SQL语句的复杂性•当公用对象和本地对象具有相同的名称时,本地对象优先,但在删除本地对象之后,可以像平常一样使用公用同义词(Oracle数据库设计与实现)DatabaseDesignandImplementationUsingOracle7/44二、序列2-1•生成唯一、连续的整数•用于生成主键值•CreateSequence语句用于创建序列•序列可以是升序排序,也可以是降序排序(Oracle数据库设计与实现)DatabaseDesignandImplementationUsingOracle8/44序列语法•CREATESEQUENCEsequencename•INCREMENTBYn•STARTWITHn•[MAXVALUEn][MINVALUEn]•[CYCLE|NOCYCLE]•[CACHEn|NOCACHE];–注:INCREMENTBYn:指定序列数字之间的整数间隔–STARTWITHn:指定要生成的第一个序列号–MINVALUEn:指定序列的最小值–MAXVALUEn:指定序列可以生成的最大值–CYCLE:指定序列即使达到了最大值,还应继续生成值,通常是循环从头开始产生序列值–CACHE:允许更快地生成序列号,Oracle分配序列号,并将其保存在内存中以便更快地访问(Oracle数据库设计与实现)DatabaseDesignandImplementationUsingOracle9/44示例•示例CREATESEQUENCEvenseqINCREMENTBY1STARTWITH1MAXVALUE10MINVALUE1CYCLECACHE4;(Oracle数据库设计与实现)DatabaseDesignandImplementationUsingOracle10/44序列应用•访问序列–nextval:第一次使用nextval时,将返回该序列的初始值–currval:返回序列的当前值,即最后一次引用nextval时返回的值–SELECTvdnseq.NEXTVALFROMdual;–SELECTvenseq.CURVALFROMdual;–INSERTINTOvendor_master(vencode,venname)VALUES(’V’||venseq.nextval,’vijay’)(Oracle数据库设计与实现)DatabaseDesignandImplementationUsingOracle11/44修改序列•AlterSequence•可对序列进行修改,需要–设置或删除最小或最大值–更改增加值–更改高速缓存的序列号的数字–不能用于修改STARTWITH参数的值•语法:ALTERSEQUENCEsequencenameINCREMENTBYn[MAXVALUEn][MINVALUEn][CYCLE|NOCYCLE][CACHEn|NOCACHE];•示例:ALTERSEQUENCEmember_numINCREMENTBY1MAXVALUE999MINVALUE1;(Oracle数据库设计与实现)DatabaseDesignandImplementationUsingOracle12/44删除序列•DropSequence•语法:–DROPSEQUENCEsequencename;•示例DROPSEQUENCEmember_seq;•查看序列:–select*fromseq;(Oracle数据库设计与实现)DatabaseDesignandImplementationUsingOracle13/44三、视图5-1•经过定制的表示方式,用来显示来自一个或多个表的数据•也称为“虚拟表”或“已存储的查询”•基表-创建视图所依据的表(Oracle数据库设计与实现)DatabaseDesignandImplementationUsingOracle14/44视图5-2视图的优点•提供了另外一种级别的表安全性•隐藏数据的复杂性•简化用户的SQL命令•将应用程序与基表定义的修改隔离开来•从另一个角度提供数据(Oracle数据库设计与实现)DatabaseDesignandImplementationUsingOracle15/44创建视图•CREATE[ORREPLACE]VIEWviewname[(alias,alias,…)]ASsubqueryWITHCHECKOPTION[CONSTRAINTconstraintname]WITHREADONLY[CONSTRAINTconstraintname]–ORREPLACE:存在,就替换–WITHCHECKOPTION:只能插入或更新视图可以访问的行–WITHREADONLY:不能在视图上执行任何DML操作(Oracle数据库设计与实现)DatabaseDesignandImplementationUsingOracle16/44创建视图(续)•示例CREATEVIEWemp_dept10(no,name,salary)ASSELECTempno,empname,salaryFROMemployeeWHEREdeptno=10;(Oracle数据库设计与实现)DatabaseDesignandImplementationUsingOracle17/44创建视图(续)–CREATEVIEWemp_dept10(no,dno,name,salary)–AS–SELECTempno,deptno,empname,salary–FROMemployee–WHEREdeptno=10WITHCHECKOPTIONCONSTRAINTempenvUPDATEemp_dept10SETno=20WHEREdno=10;不允许更新这些行(Oracle数据库设计与实现)DatabaseDesignandImplementationUsingOracle18/44创建视图(续)•CREATEORREPLACEVIEWempviewASSELECT*FROMempWITHREADONLY•UPDATEempviewSETdeptno=33;•不允许更新只读视图(Oracle数据库设计与实现)DatabaseDesignandImplementationUsingOracle19/44ORDERBY视图•ORDERBY子句可以用来按特定的顺序对行进行排列•CREATEORREPLACEVIEWempview2ASSELECT*FROMEMPORDERBYdeptnoDESC;(Oracle数据库设计与实现)DatabaseDesignandImplementationUsingOracle20/44联接视图(SQL语句是多个表的连接)•通过联接多个表来创建视图•DML只能修改一个基表•通过INSTEADOF触发器来修改(Oracle数据库设计与实现)DatabaseDesignandImplementationUsingOracle21/44视图中的函数•在视图中可以使用函数和表达式•CREATEVEIWitemsoldASSELECTitemcode,SUM(qty_ord)sold_qtyFROMorder_detailGROUPBYitemcode;•注意事项–不能选择伪列,如currval,nextval–视图包括联接,集合操作符,分组函数,DISTINCT子句,不能执行删除、更新、插入操作–在视图中所作的修改将影响基表,反之亦然–分组函数和GROUPBY子句也可以包含在视图中–使用函数时,应为列指定一个别名(Oracle数据库设计与实现)DatabaseDesignandImplementationUsingOracle22/44删除视图•DROPVIEW语句–从数据库中删除视图–DROPVIEWempview;•有关视图的信息–查询USER_VIEWS(Oracle数据库设计与实现)DatabaseDesignandImplementationUsingOracle23/44四、索引10-1•与表关联的可选结构•加快SQL语句的执行•减少磁盘I/O•CREATEINDEX语句用于创建索引•在逻辑上和物理上独立于表中的数据•Oracle自动维护索引(Oracle数据库设计与实现)DatabaseDesignandImplementationUsingOracle24/441、唯一索引•确保在定义索引的列中没有重复的值•Oracle自动为主键和唯一键列创建唯一索引•CREATEUNIQUEINDEX语句用于创建唯一索引•CREATEUNIQUEINDEXind2ONorder_master(orderno);(Oracle数据库设计与实现)DatabaseDesignandImplementationUsingOracle25/44•在表的多个列上创建的索引•也称为“连接索引”•组合索引中的列可以按任意顺序排列•对于在WHERE子句中包含多个列的查询,可以提高数据访问速度•CREATEINDEXcombind1ONorder_detail(orderno,itemcode);2、组合索引(Oracle数据库设计与实现)DatabaseDesignandImplementationUsingOracle26/44•表的数据存储在与其关联的索引中•对表数据的增删改只会导致对索引的更新5、索引组织表(Oracle数据库设计与实现)DatabaseDesignandImplementationUsingOracle27/44普通表与索引组织表的对比普通表索引编排表ROWID唯一地标识行主键唯一地标识行隐式的ROWID列没有隐式的ROWID列基于ROWID的访问基于主键的访问顺序扫描返回所有行完全索引扫描返回所有行,并按主键顺序排列索引10-7(Oracle数据库设计与实现)DatabaseDesignandImplementationUsingOracle28/44索引的分类•B*tree:平衡树•适用于OLTP•Bitmap:位图•适用于