Oracle面向对象的应用实例
admin
2023-05-11 17:02:00
0

    近期做项目,遇到一个基站的数据模型,此基站有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文档。


相关内容

热门资讯

以军士兵集体丢掉武器抗命,大喊... 据凤凰卫视报道,以色列国防军一军事基地7月30日发生士兵抗命事件,约120名士兵抗议指挥官做法,将武...
蒋成华任商务部副部长 国务院任免国家工作人员。任命蒋成华为商务部副部长。免去蒋成华的商务部国际贸易谈判副代表职务。
伊朗驻华大使:在军事威胁下,不... 新华社北京7月31日电(记者刁慧琳) 伊朗驻华大使法兹里7月28日表示,伊美回到谈判桌的前提是美国必...
伊朗革命卫队在霍尔木兹海峡击中... 当地时间31日,伊朗伊斯兰革命卫队发布声明称,革命卫队海军当天在霍尔木兹海峡击中并扣留了两艘违反禁令...
美媒:特朗普,遇到了一个更强硬... 据《纽约时报》7月29日报道,就在特朗普总统看似放弃战事升级计划几天后,美国再次与伊朗交火。上周末,...
女子做气管镜时不幸身亡,丈夫称... 7月29日,西安刘先生反映妻子在当地医院做支气管镜检查时死亡,看监控时发现医生疑有违规操作。刘先生表...
全网“帮卖西瓜”,然后呢? 近日,河南部分地区西瓜滞销的消息在网上热度很高。很多地方也伸出援手:有景区收购千斤西瓜、免费赠予游客...
美媒:乌克兰袭击伊朗船只,险引... 据《纽约时报》7月28日报道,据伊朗和西方官员称,伊朗曾考虑攻击乌克兰的一个港口,以报复乌克兰对一艘...
20年里,他只画美女,用东方风... 迈进KIM在上海的工作室,迎面是一整墙的美女们。她们像是刚从一场时髦的沙龙里退场,或倚或立,眉宇间是...
Google在港推出AI代理G... 观点网讯:7月29日,Google在香港推出AI代理Gemini Spark,该代理可全天候在后台运...