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 VALUE(t) from emp  t;

--查某个类的数据

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

  from t_emp t;


3.删除数据

delete t_emp t where  t.ty_person.name=‘scott‘;


4.修改数据

update  t_emp t set t.ty_person.name=‘Mark‘ 

 where t.ty_person.name=‘scott‘;

 

UPDATE emp  e 

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

 WHERE e.eid = ‘001‘; 


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


本文出自 “srsunbing” 博客,请务必保留此出处http://srsunbing.blog.51cto.com/3221858/1591948

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。