欢迎光临
我们一直在努力

Oracle面向对象的应用实例

    近期做项目,遇到一个基站的数据模型,此基站有7大属性,每个属性下面又有第二层的若干个属性,第二层下面又有第三层的若干属性,一直到第五层的最底层属性超过1000个,现在要把这个基站按照7大属性,设计成7个表,每个属性的最底层属性从100到400多不等。

如何设计呢?

第一、最常见的用每个属性的最底层属性来建表,最大的一个表超过400个字段,这样从性能到维护都是不行的。

第二、按照事实表与纬度表的关系来设计,把每个大属性分为若个小属性来设计表,结果可能是得到几十个表,相互之间还有复杂的逻辑关系,在业务处理上不方便。

第三、按照Oracle面向对象的设计方法,以第三层为准设计对象,就是把每个大属性下面的第三层属性设计为每个对象,然后再用对象来定义表。

原数据模型太复杂了,就不举例了,下面用一个简单的例子来说明下。

    例如常见的员工表,有这些字段(eid、ename、sex、borthady、address、phone、job、dept、manager、sal、subsidy、tax、school、grad、educa、degree、extcol、extcol2、extcol3、、、)

按照字段的类别设计为下面的几个类:

–员工基本类

create or replace type ty_person as object

(ename     varchar2(20),–姓名

 sex       char(1),     –性别

 borthady  date,        –生日 

 address   varchar2(20),–地址

 phone     varchar2(20) –电话

);

–工作基本类

create or replace type ty_job as object

(job      varchar2(20),   –职位

 dept     varchar2(20),   –部门

 manager  varchar2(20)    –经理

);

–工资基本类

create or replace type ty_sal as object

(sal      number,  –工资

 subsidy  number,  –补贴

 tax      number   –税费

);

–教育基本类

create or replace type ty_edu as object

(school varchar2(20),  –毕业学校

 grad   date,          –毕业时间

 educa  varchar2(20),  — 学历 

 degree  varchar2(20) –学位

);

–使用上面的类来构造员工表

create table t_emp

(eid     varchar2(20) not null,

 person  ty_person,

 job     ty_job,

 sal     ty_sal,

 edu     ty_edu,

 extcol   varchar2(50),

 extcol2  varchar2(50),

 extcol3  varchar2(50),

 extcol4  varchar2(50),

 extcol5  varchar2(50)

);

–extcol 表示扩展字段

下面介绍类的基本操作:

1.使用构造函数加入数据

insert into t_emp(eid , person,job,sal,edu ,extcol,extcol2,extcol3 ,extcol4,extcol5)

values(‘001’,

       ty_person(‘scott’,’M’,to_date(‘1981-10-10′,’yyyy-mm-dd’),’beijing’,’0102345678′),

       ty_job(‘DBA’,’IT’,’smith’),

       ty_sal(8000,1000,500),

       ty_edu(‘Peking University’,to_date(‘2004-10-10′,’yyyy-mm-dd’),’bachelor’,’bachelor’),

       null,null,null,null,null);

       

2.查询数据

select * from t_emp t;

–查某个类的数据

select t.person.name,t.person.sex,t.person.borthady,t.person.address,t.person.phone

  from t_emp t;

3.删除数据

delete t_emp t where  t.person.name=’scott’;

4.修改数据

update  t_emp t set t.person.name=’Mark’ 

 where t.person.name=’scott’;

 

UPDATE t_emp  e 

   SET e.person = ty_person(‘mark’,’M’,to_date(‘1982-10-10′,’yyyy-mm-dd’),’neijing’,’0212345678′)

 WHERE e.eid = ‘001’; 

基本的操作就是这些,更多的面向对象操作请查看Oracle文档。

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。