您好,登錄后才能下訂單哦!
近期做項目,遇到一個基站的數(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文檔。
免責(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)容。