溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Oracle面向?qū)ο蟮膽?yīng)用實例

發(fā)布時間:2020-08-04 11:20:24 來源:網(wǎng)絡(luò) 閱讀:719 作者:srsunbing 欄目:關(guān)系型數(shù)據(jù)庫

    近期做項目,遇到一個基站的數(shù)據(jù)模型,此基站有7大屬性,每個屬性下面又有第二層的若干個屬性,第二層下面又有第三層的若干屬性,一直到第五層的最底層屬性超過1000個,現(xiàn)在要把這個基站按照7大屬性,設(shè)計成7個表,每個屬性的最底層屬性從100到400多不等。


如何設(shè)計呢?

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

第二、按照事實表與緯度表的關(guān)系來設(shè)計,把每個大屬性分為若個小屬性來設(shè)計表,結(jié)果可能是得到幾十個表,相互之間還有復(fù)雜的邏輯關(guān)系,在業(yè)務(wù)處理上不方便。

第三、按照Oracle面向?qū)ο蟮脑O(shè)計方法,以第三層為準(zhǔn)設(shè)計對象,就是把每個大屬性下面的第三層屬性設(shè)計為每個對象,然后再用對象來定義表。


原數(shù)據(jù)模型太復(fù)雜了,就不舉例了,下面用一個簡單的例子來說明下。

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

按照字段的類別設(shè)計為下面的幾個類:

--員工基本類

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)    --經(jīng)理

);

--工資基本類

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),  --畢業(yè)學(xué)校

 grad   date,          --畢業(yè)時間

 educa  varchar2(20),  -- 學(xué)歷 

 degree  varchar2(20) --學(xué)位

);


--使用上面的類來構(gòu)造員工表

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.使用構(gòu)造函數(shù)加入數(shù)據(jù)

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.查詢數(shù)據(jù)

select * from t_emp t;

--查某個類的數(shù)據(jù)

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

  from t_emp t;


3.刪除數(shù)據(jù)

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


4.修改數(shù)據(jù)

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'; 


基本的操作就是這些,更多的面向?qū)ο蟛僮髡埐榭碠racle文檔。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI