Oracle编程入门经典 第4章 新9i示例模式
2013-01-16 19:41 夜雨瞳 阅读(662) 评论(1) 编辑 收藏 举报Oracle 9i产品帮助文档:
http://docs.oracle.com/cd/B10501_01/index.htm
可根据自己需要进行查询,包含了众多的文档。
Sample Schemas的目录:
http://docs.oracle.com/cd/B10501_01/server.920/a96539/toc.htm
Sample Schemas的文档(示例模式的表及介绍):
http://docs.oracle.com/cd/B10501_01/server.920/a96539.pdf
很多年来,Oracle教师、管理员、程序员、以及用户为了学习、测试或调整他们的数据库,都一直在使用这个值得依赖的SCOTT模式进行着简单地查询、更新、以及删除操作。这些模式就是我们所说的示例模式。示例模式是表、视图、索引这样的数据库对象的集合,并且随之预先供了代表小规模或者中等规模公司的数据。
随着最新版本的Oracle数据库Oracle 9i的出现,又引进了全新的一组示例模式,它们的目标是扩展SCOTT模式向用户提供的功能。所有这些模式一起形成了相同的虚拟公司的一部分,它们各自都有自己的业务侧重点。例如,人力资源部、订单输入部门以及发货部门都有分离的模式。
注意:
当前hr已经锁定了(即lock)。需要执行以下脚本:
SQL> connect system/zyf; 已连接。 SQL> alter user hr account unlock; 用户已更改。 SQL> alter user hr identified by hr; 用户已更改。 SQL> connect hr/hr; 已连接。 SQL> select table_name from user_tables; TABLE_NAME ------------------------------ COUNTRIES DEPARTMENTS EMPLOYEES JOBS JOB_HISTORY LOCATIONS REGIONS 已选择7行。
4.1 SCOTT模式
所提供的SCOTT模式可以提供一些示例表以及数据,来展示数据库的一些特性。它是一个相当简单的模式,如图4-1数据结构图所示(通过PowerDesign逆向工程转换为数据库模型)。
图4-1 SCOTT模式数据结构图
为什么要将这个模式命名为SCOTT呢?SCOTT/TIGER是Oracle版本1、2和3时代的Oracle数据库的最初用户名/密码组合。SCOTT是指Oracle公司的元老程序员Bruce Scott。当然,TIGER是Bruce养的猫的名字。
SCOTT模式中所展示的数据库特性通常被认为是大多数关系数据库产品中的主要特性。如果想要真实地展示Oracle数据库的功能,就要深化这些示例!
4.2 Oracle 9i示例模式
Oracle技术可以应用于各种不同的环境中。技术解决方案的两个应用极端情况是,高速在线事务处理和数据库仓库。尽管用户可以使用一个模式,展示怎样在相同的表中完成在线事务处理和数据仓库。但是用户决不可能采用这种方式实现实用的解决方案。我们在如今的业界中经常可以发现,为了解决现实世界中的不同计算需求,通常在单独的数据库实例中会存在不同的模式,或者在网络上会有大量分布式数据库。新的Oracle 9i示例模式模型极好地对这个场景建模。
Oracle 9i示例模式试图模型化一个现实世界中具有一系列典型业务部门的销售组织。这些不同的部门具有不同的信息技术需要,每一个示例模式都使用了不同的Oracle技术来解决它们各自的问题。另外,每个模式设计方案都针对特定的技术用户。这些模式如下:
- HR——人力资源。
- OE——订单输入。
- PM——产品媒体。产品媒体在数据库中存储了公司系列产品的相关多媒体内容,可以用于在Web上发布以及打印。PM利用了Oracle Intermedia,它专门设计用于处理发布音频、视频以及可视数据的多媒体领域。另外,PM也频繁地使用了LOB列类型。
- QS——队列运送。运送部门负责记录公司向客户进行的产品运送情况,并且使用6个模式来完成这项工作。QS、QS_ES、QS_WS、QS_OS、QS_CB和QS_CS构成了队列运送模式的集合。
- SH——销售历史。
4.2.1 深入讨论各个模式
1. 人力资源
人力资源模式,或者HR模式,负责管理部门、雇员、工作以及薪金信息。图4-2展示了HR模式的详细数据结构图示。
2. 订单输入
订单输入(Order Entry)模式,或者OE模式,可以用来管理公司从事商务活动的各个渠道中的客户、销售订单以及产品库存。
图4-3详细描绘了OE模式的数据结构。就如我们早先了解的,与人力资源模式相比,订单输入模式更为复杂。
图4-3 OE模式数据结构
OE模式会记录产品库存。我们将会存储任意指定仓库中指定产品的数量。在公司中会有多个仓库,所以要使用地点标识符指出其地理区域。在WAREHOUSES表中还有一个Oracle Spatial列,它为我们提供了使用Oracle Spatial空间技术的钥匙。
Oracle Spatial是在数据库中支持位置数据和地理数据的技术。
在OE模式中,需要顺便提供提及两个数据库对象模型:
- CUST_ADDRESS_TYP。这是一个在CUSTOMERS表中使用的对象类型。它包含了许多与客户地址有关的属性。
SQL> desc cust_address_typ; 名称 是否为空? 类型 ----------------------------------------- -------- STREET_ADDRESS VARCHAR2(40) POSTAL_CODE VARCHAR2(10) CITY VARCHAR2(30) STATE_PROVINCE VARCHAR2(10) COUNTRY_ID CHAR(2)
- PHONE_LIST_TYP。这是一个VARCHAR2(25)的VARRAY。这个VARRAY在CUSTOMERS表中作为单独的列存储,可以用于存储最多5个电话号码。
SQL> desc phone_list_typ; phone_list_typ VARRAY(5) OF VARCHAR2(25)
OE模式是一个很好的示例,它展示了正规的供应组织或者计算机零售商店可以使用什么方式去管理它们完整订单处理过程。通过使用订单输入表中的数据,销售组织就可以向潜在的客户提供精确的产品信息,接受销售订单,量化订单收入,存储客户信息,为不同地理位置订购产品的客户提供精确的库存信息,以及其它服务。
3. 产品媒体
产品媒体(Product Media)模式,或者PM模式,用于管理描述公司产品的多媒体数据。视频、音频和图像这样的在线媒体都可以随输出的媒体数据类型存储在数据库中。这是我们要专门研究的模式之一,它着重于多媒体内容,以及Oracle Intermedia所提供的功能。
注意:
Oracle Intermedia是Oracle数据库支持多媒体内容类型的组件。
除了Intermedia数据存储以外,PM模式还特别依赖LOB列类型的使用来存储数据。
产品媒体模式是Oracle 9i使用名为Oracle Intermedia的Oracle技术解决现实世界商务需求的优秀示例。例如,我们虚构的公司就可以存储多媒体数据或者输出多媒体数据。因此,产品媒体模式中的示例可以完成如下工作:
- 为Oracle中利用Web发布的内容存储缩略图和完全尺寸的图像。
- 在Oracle中存储音频剪辑。
- 在Oracle中存储视频剪辑。
- 对图像类型进行处理,以便转换成与Web兼容的图像类型
利用Oracle Intermedia,一些曾经很难实现的任务就变得相对简单。图4-4表示为产品媒体模式,以及它对订单输入表PRODUCT_INFORMATION的引用。
图4-4 PM模式数据结构
PRINT_MEDIA表拥有一个对象类型(ADHEADER_TYP),以及在表的各个记录中存储的对象嵌套表(TEXTDOC_TAB)。
ORDSYS.ORD__列都是一个Intermedia对象类型。这些Intermedia对象类型不仅可以存储图像、音频、视频这样的二进制数据;还可以存储各种与多媒体类型有关的元数据。
SQL> desc ordsys.ordimage;
4. 队列运送
我们的虚拟公司想要使用消息系统,以方便在线客户进行自助订货。当客户初始化订货的时候,系统就需要建立订单,向客户提供账单,并且要确保可以根据客户的位置,通过适当的地区发送订货。
QS_CS模式有一个名为ORDER_STATUS_TABLE的表,可以存储订单状态。这是在整个队列运送模式安装过程中唯一建立表(除了通过高级队列API建立的队列表以外)。我们不会展示与表有关的数据结构图,而是要讨论为队列运送模式所建立的队列系统中的消息流程。
图4-5所示流程图示中可以看到,为了提供一个清晰、直观的订货——发货——结算循环,要在部门之间怎样传递消息。
图4-5 为队列运送(QS)模式在队列系统中建立的消息流程
一切都要从图示顶部的订单输入开始。Oracle Input(订单输入)过程所生成的订单会放入New Order Queue(新订单队列)中。这个队列要Oracle Entry应用处理,然后会将订单放到Booked Orders Queue(登记订单队列)中。再将Booked Orders Queue中的订单发往适当的运送中心(East(东部)、West(西部)或者Overseas(海外)),以及客户服务部门。
在这时,运送中心就会接收要完成的订单,并且向客户发送订货,而且客户服务部门也会意识到订单的状态。在适当的运送中心,Shipping Center(运送中心)应用就会负责发送订货,或者将订货调整回订单状态。一旦得到了产品,就会发送退回为订单状态的产品,并且将订单放到shipped orders(已运送订单)队列中。
当订单发送之后,就会通过shipped orders gueue通知客户服务和客户结算部门,并且向客户发送账单。经过结算的订单会放在Billed Orders(已结算订单)队列中,它会通知客户服务部门,然后就可以完成订单处理过程。
5. 销售历史
如今商务环境中的公司已经发现,除非人们能够采用一种有意义而且即时的方式,根据信息生成精确的决策报告,否则世界上的所有销售信息都是毫无价值的。决策支持(decision support)就是用来描述在进行决策的过程中信息技术使用的术语。
销售历史模式是一个传统数据仓库的示例。表会按照星型模式(star schema)设计进行组织,在这种方式下,会有一个大的SALES表位于中心,SALES表的外围还会有一些小的查询表,或者维数(dimension)表。SALES表通常会有大量的数据(所有的销售实时),而维数表相对于SALES表来讲会相当小。
图4-6的数据结构图展示了销售历史模式:
图4-6 销售历史模式数据结构
4.2.2 渐进学习方式
按照不同的受众组织模式的方式可以鼓励新的Oracle用户通过结构化的方法学习技术。例如,初学者可以从人力资源开始。这可以让他熟悉关系概念、查询数据、数据库操作语言、数据库定义语言、以及一些其他基本概念。
当新Oracle用户熟悉了人力资源模式之后,可以继续分析订单输入模式。在这个新模式中,他将会遇到对象类型、XML支持、Oracle Spatial、以及其他一些较为高级的数据库特性。
接下来,用户可以分析其余模式所提供的特定领域。多媒体专家可以深入学习产品媒体模式。设计发布-订阅型基于消息的系统的用户可以发现,队列运送模式在他们开始学习Oracle高级队列的时候将会非常有帮助。数据仓库的热衷者最好去分析和了解销售历史模式。
4.2.3 发现更多有关示例模式的内容
1. 数据库对象描述
在这部分中,我们将会浏览数据库,找到属于示例模式下的对象,然后使用SQL查询直接从数据库中获取这些对象的定义。
注意:
以下试验部分所需的全部脚本都可以从http://www.wrox.com/的本书可下载代码中得到。
试验:获取数据库列表
将以下脚本保存到用户本地硬盘上名为dbls.sql的文件中(C:\oracle\ora92\bin,即sql*plus工作目录)
column object_name format a30 column tablespace_name format a30 column object_type format a12 column status format a1 break on object_type skip 1 select object_type,object_name, decode(status,'INVALID','*','') status, tablespace_name from user_objects a,user_segments b where a.object_name=b.segment_name(+) and a.object_type=b.segment_type(+) order by object_type,object_name / column status format a10
运行以下代码可得到数据库对象列表:
SQL> connect hr/hr; 已连接。 SQL> @dbls
2. 自解释模式
Oracle提供了一种可以让表的所有者在数据库中存储表或者列的纯文本注释的方式。在示例模式安装期间,每个模式都拥有一个脚本,可以为它们各自的表和列建立这些注释。这可以使用SQL命令CREATE COMMENT实现。其中注释样本如下:
COMMENT ON TABLE jobs IS ‘jobs table with job titles and salary ranges.Contains 19 rows. References with employees and job_history table.’;
4.3 小结
文章根据自己理解浓缩,仅供参考。
摘自:《Oracle编程入门经典》 清华大学出版社 http://www.tup.com.cn/