Oracle面向對象的應用實例

    近期作項目,遇到一個基站的數據模型,此基站有7大屬性,每一個屬性下面又有第二層的若干個屬性,第二層下面又有第三層的若干屬性,一直到第五層的最底層屬性超過1000個,如今要把這個基站按照7大屬性,設計成7個表,每一個屬性的最底層屬性從100到400多不等。ide


如何設計呢?函數

第1、最多見的用每一個屬性的最底層屬性來建表,最大的一個表超過400個字段,這樣從性能到維護都是不行的。性能

第2、按照事實表與緯度表的關係來設計,把每一個大屬性分爲若個小屬性來設計表,結果多是獲得幾十個表,相互之間還有複雜的邏輯關係,在業務處理上不方便。spa

第3、按照Oracle面向對象的設計方法,以第三層爲準設計對象,就是把每一個大屬性下面的第三層屬性設計爲每一個對象,而後再用對象來定義表。設計


原數據模型太複雜了,就不舉例了,下面用一個簡單的例子來講明下。對象

    例如常見的員工表,有這些字段(eid、ename、sex、borthady、address、phone、job、dept、manager、sal、subsidy、tax、school、grad、educa、degree、extcol、extcol二、extcol三、、、)文檔

按照字段的類別設計爲下面的幾個類:it

--員工基本類table

create or replace type ty_person as objectclass

(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文檔。

相關文章
相關標籤/搜索