千家信息网

Oracle面向对象的应用实例

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,近期做项目,遇到一个基站的数据模型,此基站有7大属性,每个属性下面又有第二层的若干个属性,第二层下面又有第三层的若干属性,一直到第五层的最底层属性超过1000个,现在要把这个基站按照7大属性,设计成7
千家信息网最后更新 2025年02月01日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