You are on page 1of 76

0c Lc

Chng 1. 0u .................................................................................................3


Chng 2. CSDL Hng i Tng V H Qun Tr ObjectStore PSE Pro .....5
2.1. C S D Liu Hng i Tng.......................................................................... 5
2.2. Cc Khi Nim C Bn Trong CSDL Hng i Tng ....................................... 6
2.2.1. i tng (Object).......................................................................................... 6
2.2.2. nh danh i tng (Object Identifier) .......................................................... 6
2.2.3. Thuc tnh i tng (Attribute) ..................................................................... 7
2.2.4. Trng thi i tng (State) ............................................................................ 7
2.2.5. Hnh vi i tng (Behaviour)........................................................................ 8
2.2.6. Lp i tng (Class) ..................................................................................... 8
2.2.7. ng gi d liu (Data Encapsulation)............................................................ 9
2.2.8. Tha k (Inheritance)...................................................................................... 9
2.2.9. a hnh (Polymorphism)............................................................................... 11
2.3. Chun CSDL Hng i Tng ODMG.............................................................. 12
2.3.1. i tng v Literal...................................................................................... 12
2.3.2. Giao din lp i tng ................................................................................ 13
2.3.3. Tp Cha ...................................................................................................... 15
2.3.4. i tng nguyn t ..................................................................................... 16
2.3.5. Tp cha lu bn v kho i tng.............................................................. 18
2.4. H Qun Tr CSDL Hng i Tng ObjectStore PSE Pro................................ 18
Chng 3. Xy Dng CSDL Hng i Tng .................................................20
3.1. nh Ngha Cc i Tng Trong CSDL Bng ODL........................................... 20
3.2. Thit K CSDL Hng i Tng Bng ObjectStore Database Designer............. 23
3.2.1. Thit k cc i tng.................................................................................. 23
3.2.2. Thit k cc Quan h..................................................................................... 26
Kho lun Tt nghip i hc H Cng Ngh - HQGHN

3.3. Ci t C S D Liu Hng i Tng........................................................... 32


3.3.1. Sinh m cc lp i tng trong CSDL......................................................... 32
3.3.2. Giao din cc lp i tng trong CSDL ...................................................... 35
3.3.3. Ni dung cc lp i tng........................................................................... 40
3.3.4. Cc kiu quan h trong ObjectStore .............................................................. 43
3.3.5. Mt s T kho v Phng thc m rng cho CSDL .................................... 45
3.3.6. Ci t ni dung phng thc ca cc lp i tng..................................... 46
3.3.7. Bin dch CSDL............................................................................................ 47
Chng 4. Ci t V Thc Thi Chng Trnh ng Dng CSDL ...................49
4.1. Ci t Chng Trnh ng Dng CSDL .............................................................. 49
4.1.1. To giao din chng trnh ng dng............................................................ 50
4.1.2. Khai bo cc bin truy xut CSDL ................................................................ 50
4.1.3. To v m mt CSDL................................................................................... 51
4.1.4. Thit lp cc giao tc trong CSDL ................................................................ 52
4.1.5. To i tng v thit lp cc d liu thnh vin .......................................... 52
4.1.6. Thc thi cc hnh vi i tng...................................................................... 54
4.1.7. Thit lp cc quan h trong CSDL ................................................................ 55
4.1.8. Cp nht v Xo mt i tng trong CSDL................................................. 56
4.2. Thc Thi Chng Trnh ng Dng ...................................................................... 56
4.2.1. Menu chng trnh ....................................................................................... 56
4.2.2. Qun l cc i tng d liu ....................................................................... 58
4.2.3. Thc thi cc hnh vi i tng...................................................................... 58
4.2.4. Thit lp quan hi tng v kim tra tnh ton vn tham chiu ................. 59
Chng 5. 7ng kt ..............................................................................................62

Ph lc A Giao din mt s Form qun l i tng trong chng trnh ng


Gng 63
Ph lc B M ngun chng trnh ng dng trong VB Qun l mt si tng
68

Ti liu tham kho

TH&XD CSDL HT 2 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

Chng 1. Mu

& s d liu (CSDL) tr thnh mt b phn ch yu, khng th thiu


trong hu ht cc h thng thng tin. D liu v CSDL l mc ch, mc tiu, trng
tm, v l c s cho vic vn hnh, pht trin ca cc h thng thng tin cng nh cc
chng trnh, phn mm ng dng.
Hin nay, cc h thng thng tin hay cc CSDL u ch yu s dng mt kiu
CSDL truyn thng l CSDL Quan h, mt trong cc kiu CSDL c pht trin v
ng dng rng ri. Tuy nhin vi s pht trin rt nhanh chng ca Cng ngh thng
tin, CSDL quan h dn bc l nhng yu Lm v rt nhiu hn ch, c bit l
trong vic xy dng cc ng dng c d liu phc tp, d liu a chiu, d liu c
nhiu mi quan h, hay cc d liu a phng tin (multi-media) nh hnh nh, m
thanh, video...
CSDL Hng i tng l gii php cho cc vn trn. Trong CSDL hng
i tng, d liu c lu tr di dng cc i tng ca ngn ng lp trnh nn
cho php lu trc cc dng d liu phc tp, lng thng tin ln, a chiu, a
quan h, hay c th m rng lu tr cc d liu a phng tin nh hnh nh, m
thanh, video. Cc d liu khng chc lu trn thun, m c cc hnh vi ca i
Wng d liu cng c lu tr trong CSDL.
Trn th gii, nhiu h qun tr CSDL hng i tng , ang, v s tip tc
c pht trin, tuy nhin vic ng dng li i hi nhiu hiu bit v cng sc, nn
cha c ph bin rng ri. Vit nam, CSDL hng i tng l mt vn rt
Pi, hoc mi chc nghin cu mc rt t, tp chung ch yu l thuyt, cha
c nhng ng dng thc s c th.
Do vy, vic Tm hiu v Xy dng C s d liu Hng i tng l mt
Yn cn c quan tm, tm hiu v thc hin. y l mt vn kh, i hi
nhng hiu bit su sc v CSDL v phng php Hng i tng. Mc d cn rt
nhiu hn ch, nhng ti s c gng tm hiu cc t tng v cch xy dng mt
CSDL hng i tng, mc d cn mc rt n gin, nhm dn a ra nhng t
Wng chung v nhng k thut c bn ca vic xy dng CSDL hng i tng.
ti s thc hin xy dng mt CSDL hng i tng, l CSDL Qun l
+c tp (Learning Manager), nhm minh ho vic s dng h qun tr CSDL hng
i tng ObjectStore PSE Pro for C++ v quy trnh xy dng mt CSDL hng i

TH&XD CSDL HT 3 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

Wng. Do c nhiu hn ch, nn ti s khng i su vo qu trnh m hnh ho,


phn tch, thit k hng i tng, m i trc tip vo qu trnh xy dng CSDL.
Trong CSDL Qun l Hc tp, mt si tng d liu sc xy dng v qun l
l:

Student: i tng Sinh vin

Teacher: i tng Gio vin

Class: i tng Lp hc

Department: i tng Phng B mn, Khoa

Subject: i tng Mn hc

Mark: i tng Lm ca cc Mn hc ca Sinh vin


Cc thuc tnh, hnh vi ca i tng, cng nh cc quan hi tng c
xy dng mc n gin, nhm minh ho mt s vn chnh ca CSDL hng i
Wng.

TH&XD CSDL HT 4 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

Chng 2. CSDL Hng i Tng V H Qun Tr


ObjectStore PSE Pro

2.1. C S D Liu Hng i Tng


& s d liu Hng i tng (Object-Oriented Database) l mt kiu
CSDL, m trong , cc d liu c lu tr di dng cc i tng. Hay C s d
liu Hng i tng c xy dng bng cch kt hp cc yu t ca C s d liu
v cc k thut ca Lp trnh Hng i tng nhm mc ch lu tr cc i tng
G liu. T, c th tn dng, pht huy c nhng u Lm, li ch, v th mnh
Fa cc k thut, cng nghc s dng, ng thi khc phc nhng yu Lm, kh
khn ca cc kiu CSDL khc.
Hnh sau minh ho vic t hp cc yu t ca CSDL v cc k thut ca lp
trnh hng i tng xy dng nn CSDL hng i tng:

Tha k
nh danh i tng (Inheritance)
(Object Identity)
ng gi a hnh
(Encapsulation) (Polymorphism)
/p trnh Hng
i tng
Ton vn /u tr
(Integrity) (Archive)
& s d liu Hng i tng
An ton Khi phc
(Security) & s d liu (Recover)

Giao tc ng b
(Transaction) (Concurrency)
Phin bn Truy vn
(Versioning) 7n ti lu (Query)
(Persistence)

Hnh 1: Cc thnh phn ca CSDL hng i tng

TH&XD CSDL HT 5 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

Cc u Lm ca CSDL hng i tng, c th thc hin c l do s dng


cc k thut ca lp trnh hng i tng. K thut lp trnh Hng i tng hin
c mt nn tng l thuyt vng chc, cc k thut lp trnh tr thnh c s cho mi
ngn ng lp trnh. C nhiu ngn ng lp trnh ang c s dng rng ri v ch
\u nh C++, Java, SmallTalk, v gn y nht l cng ngh .NET ca Microsoft.
Vic xy dng cc d liu trong CSDL Hng i tng c mt sng nht, hay c
th hn l s dng trc tip k thut v ngn ng lp trnh hng i tng xy
Gng ln cc i tng d liu. Do , c th d dng c s dng trong cc phn
Pm ng dng lp trnh hng i tng xy dng, truy vn v thao tc d liu m
khng gp cc kh khn, hn ch nh khi s dng CSDL quan h.

2.2. Cc Khi Nim C Bn Trong CSDL Hng i Tng


2.2.1. i tng (Object)
i tng l mt khi nim c th hoc tru tng, ch mt ngi, mt a
Lm, hay mt vt no tn ti trong th gii thc. i tng trong th gii thc
c xc nh duy nht, cha mt tp nht nh cc thng tin vi tng v cc hnh
vi da trn cc thng tin . Mt i tng cng c th c cc mi quan h hay c kh
Qng trao i thng tin vi cc i tng khc.
V d: mt i tng Sinh vin l mt ngi ang hc trong mt trng i
Kc, c xc nh duy nht trong th gii thc, cha mt tp nht nh cc thng tin
Y Sinh vin , nh M Sinh vin, H tn, Ngy sinh, Trng i hc m Sinh vin
ang theo hc... Mt i tng Sinh vin c th c cc quan h vi cc i tng
khc, nh quan h vi i tng Lp hc, hay i tng Lm mn hc ca Sinh vin.
Cc hnh vi da trn cc thng tin nh l hnh vi thay i M s Sinh vin ca i
Wng, tr v gi tr Tui, hay tnh Lm trung bnh cc mn hc ca Sinh vin.
Trong CSDL hng i tng, cc i tng trong th gii thc c m
hnh ho, biu din vo CSDL theo ng cc c trng ca i tng, v lun duy tr
V tng ng trc tip gia cc i tng trong CSDL vi cc i trong th gii thc.

2.2.2. nh danh i tng (Object Identifier)


0t i tng c xc nh duy nht trong th gii thc, v do , cng phi
c biu din duy nht trong CSDL. Vic xc nh duy nht i tng trong CSDL
c thc hin bng cch s dng cc nh danh i tng (Object Identifier) hay
OID. Mt OID l mt gi trc gn cho mt i tng, dng xc nh duy nht
i tng trong h thng. Hai i tng khc nhau khng th c cng OID trong

TH&XD CSDL HT 6 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

Pi hon cnh, ngay c khi mt i tng b xo khi h thng, Lu ny nhm


m bo tnh duy nht tng ng vi tnh duy nht ca cc i tng trong th gii
thc. Do , mt OID c gn cho mt i tng thi Lm khi to, khng b thay
i cho n khi i tng b hu b, v khng c gn li cho cc i tng khc
ngay c khi i tng ny b hu b. OID ca cc i tng c h thng sinh ra
v khng ph thuc vo cc c trng ca i tng.
Ch , nh danh i tng OID khc vi kho chnh ca i tng. Kho
chnh ca i tng l mt thuc tnh ca i tng, c ngi dng gn gi tr, v
c th nhn thy, thay i c, v c thc cp li, cn OID th khng th.
V d: mt Sinh vin c biu din trong CSDL c mt OID duy nht, xc
nh s tng ng vi Sinh vin trong th gii thc. Mt Sinh vin khc trong th
gii thc nu c biu din trong CSDL th phi c mt OID khc vi OID ca Sinh
vin trn, thm ch c khi Sinh vin trn b xo khi h thng. Lu ny m bo s
Wng ng ca CSDL vi th gii thc, trnh s nhm ln v cc i tng c biu
din trong CSDL.

2.2.3. Thuc tnh i tng (Attribute)


Cc i tng cha mt tp thng tin nht nh vi tng, hay cn gi l
cc thuc tnh i tng. Mi thuc tnh c mt tn duy nht trong i tng v gi tr
c biu din trong min gi tr ca mt kiu d liu no . Cc kiu d liu ny c
th l cc kiu d liu c bn, nh kiu s nguyn, s thc, kiu xu k t, hoc cc
kiu d liu phc tp do ngi dng nh ngha, cc kiu i tng, hoc cng c th
l cc con tr hay vector n cc kiu d liu .
V d: thuc tnh M Sinh vin ca i tng Sinh vin c kiu d liu l mt
xu k t, c gi tr nh SV0122177, thuc tnh Nm sinh ca Sinh vin c kiu l
Pt s nguyn, nh 1983. Hay thuc tnh Lp trng ca mt i tng Lp hc l
Pt con trn mt i tng Sinh vin.

2.2.4. Trng thi i tng (State)


Trng thi ca mt i tng l th hin ca i tng ti mt thi Lm nht
nh, bao gm mt tp cc gi tr ca cc thuc tnh i tng ti thi Lm . Trng
thi ca i tng c th thay i theo thi gian, tng ng vi s thay i gi tr ca
cc thuc tnh i tng. Tp tt c cc trng thi c th ca i tng c gi l
0ng trng thi (State Net). thay i trng thi ca i tng (thay i gi tr

TH&XD CSDL HT 7 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

thuc tnh), cn gi cc thng Lp hp ln i tng, hay yu cu thc thi cc hnh


vi ca i tng.

2.2.5. Hnh vi i tng (Behaviour)


Hnh vi ca mt i tng l cc thao tc hp l ca chnh i tng trn
cc thuc tnh ca i tng, c s dng khi to hay thay i cc gi tr ca
thuc tnh, hoc tr v mt gi tr no da trn cc gi tr thuc tnh ca i tng.
Cc i tng khc c th truyn cc thng Lp, hay yu cu i tng thc thi cc
hnh vi bng vic gi tn ca hnh vi v cc tham s nu c.
Trong CSDL hng i tng, hu ht cc i tng u c nh ngha
trc mt s hnh vi c bn s dng cho CSDL, nh cc hnh vi to mi i tng,
Fp nht thng tin, v xo i tng. Cc hnh vi do ngi dng nh ngha c th
c s dng cho vic truy vn hay cp nht i tng. V d, mt i tng Sinh
vin c cc hnh vi getAverageMark() v setName(char Name), ln lt tr v gi tr
trung bnh ca Lm cc mn hc ca Sinh vin, v thit lp Tn ca Sinh vin theo
tham s truyn vo.
0t hnh vi i tng c thc gi t i tng bng cc s dng du
chm (.) v tn ca hnh vi cng cc tham s. V d nu aStudent l mt i tng
Student, th li gi aStudent.getAverageMark(), aStudent.setName (char Name) s gi
thc thi cc hnh vi tnh Lm trung bnh v thit lp Tn ca Sinh vin.

2.2.6. Lp i tng (Class)


/p i tng l mt khi nim tru tng m t mt cu trc d liu, biu th
Fu trc chung ca mt tp cc i tng cng kiu, hay c cng cu trc thuc tnh
v hnh vi. Mi i tng l mt th hin c th ca lp, c cc thuc tnh v hnh vi
nhc khai bo trong lp. Trong cc m hnh v cc ngn ng lp trnh hng i
Wng, lp thng c m t bng t kho class.
V d: lp Sinh vin m t cu trc chung ca cc i tng Sinh vin, c
khai bo trong ngn ng lp trnh C++ nh sau:
class Student
{
private:
// Khai bo cc thuc tnh i tng:
char StudentID;
char Name;
char Birthday;

TH&XD CSDL HT 8 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

char Gender;
char Address;
public:
// Khai bo cc hnh vi i tng:
void setStudentID (char SID);
void setName (char Name);
float getAverageMark ();
}

2.2.7. ng gi d liu (Data Encapsulation)


truy vn hay cp nht cc thuc tnh ca mt i tng, cc i tng khc
ch c th truyn cc thng Lp hay yu cu thc thi cc hnh vi ca i tng, m
khng th truy cp n cu trc d liu bn trong ca i tng, v cng khng cn
bit n cc chi tit thc hin ca i tng. Lu ny nhm m bo tnh ton vn
Fa i tng, che giu thng tin, v c gi l ng gi d liu (Data
Encapsulation)
ng gi l mt trong cc c Lm chnh ca CSDL hng i tng v
khng c s dng trong cc kiu CSDL truyn thng. Do trong CSDL truyn
thng, ngi dng hay cc chng trnh ng dng c th nhn thy, truy cp v thay
i d liu ca cc i tng, lm nh hng n vic m bo tnh ton vn ca d
liu.
V d: Cc i tng khc khng th truy cp v cp nht gi tr ca cc thuc
tnh c ng gi trong i tng Sinh vin, nh vic tnh Lm trung bnh hay
thit lp gi tr Tn ca Sinh vin. Cc hnh vi ny c chnh i tng Sinh vin
thc hin, nhm ch cho php cc cp nht hp lc thc hin, hay che du cc chi
tit thc hin bn trong ca i tng.

2.2.8. Tha k (Inheritance)


Cc d liu trong CSDL hng i tng l cc i tng khng c kiu nh
trc v thng c cu trc phc tp, trong khi nhiu i tng li c cng mt cu
trc hoc mt phn cu trc d liu. Do , vic s dng li, v m rng mt kiu d
liu, hay kiu i tng c sn l rt cn thit v quan trng. Lu ny c thc
thc hin trong cc h thng hng i tng bng cch s dng k thut tha k.
Tha k l k thut cho php mt lp i tng c kh nng tha hng tt c
cc tnh cht v c trng ca mt lp i tng khc, bao gm tt c cc thuc tnh,
hnh vi v cc quan hi tng. Do , tha k cho php cc i tng mi c to

TH&XD CSDL HT 9 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

ra c kh nng s dng li cc kiu i tng c sn trong CSDL, ng thi cho php


P rng kiu i tng bng cch khai bo thm cc thuc tnh, hnh vi, v quan
K ring, thm ch c thnh ngha li cc hnh vi c tha k.
%t k lp i tng no cng u c thc s dng v cho php tha k
Ei cc lp i tng khc. Cc lp tha k t cc lp khc gi l lp dn xut, hay
Op con, v lp c tha k gi l lp c s hay lp cha. C hai kiu tha k, l n
tha k v a tha k. Cc tha k m mt lp dn xut ch tha k t mt lp c s
Ji l n tha k, v tha k t nhiu lp c s gi l a tha k.
V d, lp i tng Student v Teacher c thc tha k t lp Person. Do
, cc thuc tnh, hnh vi va quan h ca cc i tng Person nh Name, Birthday,
Gender, Address, getInfo() u c tha k cho cc i tng Student v Teacher.
7c l cc i tng Student v Teacher u c cc thuc tnh, hnh vi, quan h ny,
ng thi c th m rng thm cc thuc tnh, hnh vi v quan h ring. V d trong
ngn ng lp trnh C++, khai bo tha kc biu th bng du hai chm (:), cc lp
i tng ny c dng nh sau:
Class Person
{
private:
NameObj Name;
BirthdayObj Birthday;
char Gender;
AddressObj Address;
public:
char getInfo();
}

class Student : Person


{
private:
char StudentID;
public:
char getInfo();
float getAverageMark();
}

class Teacher : Person


{
private:
char TeacherID;
char Rank;

TH&XD CSDL HT 10 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

/p i tng Student c tha k t lp Person, v do cng c cc thuc


tnh v hnh vi nh ca lp Person. Ngoi ra, lp Student c thm cc thuc tnh v
hnh vi ring nh StudentID, getAverageMark(), hay c th nh ngha li hnh vi
getInfo() ca lp Person.

2.2.9. a hnh (Polymorphism)


a hnh l kh nng cho php cc i tng thc hin nhng hnh vi khc
nhau khi nhn c cng mt thng Lp, da trn cc c trng ring ca mnh.
V d, vi cng mt thng Lp getInfo() yu cu tr v thng tin ca i
Wng, cc i tng khc nhau s thc hin cc hnh vi ring v tr v thng tin theo
cc c trng ring ca mnh. Nh mt i tng Person c th tr v cc thng tin
Name, Birthday, Gender, Address, cn i tng Student c th tr v cc thng tin
ring nh StudentID, Name, Birthday, AverageMark
a hnh cn cho php mt i tng thc hin cc hnh vi khc nhau trong
nhng ng cnh khc nhau, da trn cc c trng, hay cc kiu ca i tng trong
cy tha k. Tc l nu mt lp i tng c tha k t mt lp i tng no
trong cy tha k, th n c th thc hin cc hnh vi ring ca mnh, hoc cng c th
thc hin cc hnh vi nh l mt i tng ca lp m n tha k, phc thuc vo ng
Fnh m hnh vi c thc hin.
V d, nu mt lp i tng Student tha k t lp Person, c hnh vi
getInfo() ring v c th c thc hin khc vi hnh vi getInfo() ca lp Person.
Tuy nhin, cc i tng Student vn l mt th hin ca lp Person do tnh cht tha
N. Do , c nhng lc cc i tng Student mun c coi l cc i tng Person,
v thc hin nhng hnh vi nh ca lp Person. K thut a hnh s cho php thc hin
Lu ny bng vic coi kiu ca mt i tng Student l mt i tng Person, v
thc hin cc hnh vi theo kiu ca i tng trong ng cnh thc hin.
a hnh c ngha trong vic tha k v m rng cc kiu d liu i tng
trong CSDL, cho php c th va nh ngha li cc hnh vi i tng nhng va c
th duy tr, s dng li cc hnh vi i tng c sn, lm tng kh chuyn gia
cc kiu d liu i tng.

TH&XD CSDL HT 11 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

2.3. Chun CSDL Hng i Tng ODMG


0t trong cc yu cu quan trng ca cc m hnh hay cc h qun tr CSDL
l vic xy dng mt chun chung cho tt c cc h thng. Nh mt l do dn n s
thnh cng ca h qun tr CSDL quan h l xy dng c mt chun SQL cho
php qun tr CSDL. Bi vy, vic xy dng mt chun cho CSDL hng i tng l
Ut cn thit, quan trng, v mang li nhiu li ch.
/i ch th nht l, chun CSDL hng i tng nh ra mt cu trc chung
cho tt c cc h thng, do ngi s dng s d dng hn trong vic thao tc h
thng cng nh bo tr, chuyn i, v nng cp h thng. Th hai, chun CSDL cho
php s tng thch gia nhiu h thng khc nhau, tc l cc chng trnh ng dng
c th truy cp c cc d liu c lu tr trong cc h thng, hay cc CSDL trong
cc h thng khc nhau. Chun CSDL cng to cho ngi dng kh nng so snh
cc h thng, cc h qun tr CSDL hng i tng khc nhau, d dng hn trong
vic la chn xy dng v pht trin cc CSDL hng i tng.
ODMG (Object Database Management Group) l mt trong cc chun CSDL
Kng i tng, ang c pht trin v c ng dng trong nhiu h thng, h
qun tr CSDL hng i tng hin nay. ODMG bao gm bn thnh phn chnh l:

M hnh i tng (Object Model)

Ngn ngnh ngha i tng (ODL)

Ngn ng truy vn i tng (OQL)

6 gn kt (binding) vi cc ngn ng lp trnh hng i tng.


M hnh ODMG cho php m t v biu din cc thnh phn c bn c s
Gng trong cc CSDL hng i tng, bao gm mt s cc thnh phn chnh sau:

2.3.1. i tng v Literal


0t i tng trong m hnh i tng ODMG c m t bng bng bn
c trng:

nh danh i tng

Tn i tng

Thi gian sng

&u trc i tng

TH&XD CSDL HT 12 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

Trong , nh danh i tng dng xc nh duy nht i tng trong h


thng, tng t nhnh danh OID trong nhiu h thng hng i tng khc.
Tn i tng c gn cho mt si tng no v l duy nht trong
CSDL, s dng cho vic tham chiu n i tng. Vic truy xut n i tng c
thc thc hin thng qua tn ca i tng. Tuy nhin, do s lng cc i tng
trong CSDL l rt ln, nn khng tht tn cho tt c cc i tng, m ch nn t
tn cho mt si tng no , sao cho t cc i tng ny c th truy cp c
n cc i tng khc trong CSDL. Tn cn c coi nh mt Lm vo ca CSDL
v thng c t cho mt tp cha cc i tng thuc mt lp. Sau , c th s
Gng cc phng thc ca tp cha truy cp n cc i tng trong tp . V d,
c tht all_Student l mt tn ca mt tp hp cc i tng Student, cha tt c
cc i tng Student tn ti trong CSDL. Khi , all_Student c th coi l mt Lm
vo CSDL, c thc gi trc tip t h thng, v c th s dng cc phng thc
Fa tp hp duyt trn cc thnh vin ca tp hp, hay truy cp v thao tc cc i
Wng Student trong CSDL.
Thi gian sng ca mt i tng biu th tnh tn ti lu bn (Persistence)
hay tm thi (Transience) ca i tng trong CSDL. Mt i tng l tn ti lu bn
khi n c lu trong CSDL ngay c khi cc chng trnh ng dng kt thc, v l
Wm thi nu n chc s dng trong chng trnh ng dng, b hu b khi chng
trnh kt thc v khng c lu trong CSDL.
&u trc ca i tng biu th mt i tng l nguyn t hay l mt tp
cha. Mt i tng l nguyn t khi n l mt i tng ring l, v l mt tp cha
khi n cha mt tp cc i tng khc.
Ngoi cc i tng, ODMG cng cho php m hnh cc kiu d liu Literal.
Literal l cc kiu d liu, khng c nh danh trong CSDL (khc vi i tng), c
th l cc kiu d liu c bn, cc cu trc d liu, hay cc kiu tp cha.
V d, mt Literal l cu trc d liu Date cha cc thng tin v Ngy-thng-
Qm, v cc thao tc trn cu trc d liu . Hay vi Literal l kiu tp cha, v d l
Pt tp hp (Set), cha mt tp cc i tng Sinh vin. Tuy nhin cc Literal ny
khng c h thng cung cp nh danh nh khi lu tr cc i tng

2.3.2. Giao din lp i tng


ODMG s dng t kho interface dng m t giao din ca cc kiu i
Wng, bao gm vic m t cc thuc tnh cng khai, cc hnh vi i tng, hay cc

TH&XD CSDL HT 13 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

quan hi tng. T kho interface c s dng thay cho cc t kho type v
class trong m hnh hng i tng ca ngn ng lp trnh, c s dng cho vic
miu t giao din ca cc lp i tng. Interface khng phi l mt th hin, khng
thc thi c, hay khng c i tng no c to ra cho interface, nhng c s
Gng phc v cho vic nh ngha cc thao tc ca i tng. Cc thao tc ny c
thc tha k bi cc i tng do ngi dng nh ngha trong cc ng dng c
th.
V d sau y minh ho vic nh ngha mt s giao din ca cc lp i
Wng v mt s cc hnh vi i tng:

interface Object{
boolean same_as (Object otherObject);
Object copy();
void delete();

interface Person : Object {


char Name();
char Gender();
char Address();

char getInfo();
}

interface Student : Person {


char StudentID();

float getAverageMark();
}

Trong v d trn, interface Object l giao din ca lp i tng Object, vi


cc hnh vi c s, v thng c tha k bi tt c cc i tng khc. Vic tha k
c biu din bng du hai chm (:), cho php cc i tng tha ku c cc hnh
vi c bn ca i tng, nh: so snh mt i tng vi mt i tng khc
(same_as), sao chp mt i tng (copy), hay xo mt i tng (delete)
Ch , vic tha k gia cc giao din c s dng to s tha k cc
hnh vi ca lp i tng, m khng c s tha k cc thuc tnh v quan h. Do

TH&XD CSDL HT 14 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

kiu tha k ny c gi l tha k hnh vi (Behaviour Inheritance), v khc vi


kiu tha k gia cc lp i tng. Trong tha k gia cc lp i tng, cc hnh vi
v c cc thuc tnh, quan hu c tha k, v c k hiu bi t kho extends
trong ODMG.
Ngoi vic m t giao din ca cc i tng, ODMG cng cho php m t
giao din ca cc Literal, hay giao din ca cc cu trc d liu v cc kiu cha i
Wng. V d sau m t giao din ca cu trc d liu Date v kiu cha Collection
(tp i tng):
interface Date : Object {
unsigned short year();
unsigned short month();
unsigned short day();

boolean is_equal (Date otherDate);
boolean is_greater (Date otherDate);
}

interface Collection : Object {


void insert_element (element anElement);
void remove_element (element anElement);

unsigned long cardinality();
boolean is_empty();
Iterator create_interator (boolean stable);
}

2.3.3. Tp Cha
Cc kiu tp cha i tng trong ODMG c th l: Array (mng), Bag (ti),
Collection (tp), List (danh sch), Set (tp hp), Dictionary (t Ln). Trong ,
Collection l tp c s v chung nht, cc tp cn li c tha k t Collection. Tnh
cht ca cc tp cha c xc nh nh trong Hnh 2, v d: Array l mt tp cha c
th t, cho php phn t c gi tr Null (khng xc nh); Set l mt tp khng lu tr
th t, khng cho php lp cc phn t
9i mi tp cha, c cc phng thc cho vic duyt, truy vn v cp nht tp
cha. V d mt s phng thc c bn ca tp cha Collection l:
Collection::insert_element (e) // chn thm mt phn t e
Collection::remove_element (e) // loi b phn t e

TH&XD CSDL HT 15 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

Collection::is_empty () // kim tra tp cha l rng


Collection::cardinality () // tr v s phn t ca tp
Collection::create_interator () // to con tr duyt trong tp

Collection

/u gi C mt Kho i
th t Khng cng mi phn t

C
Khng

Cho php
C Cho php
Null
/p

C Khng
C Khng

Array List Dictionary Bag Set

Hnh 2: Tnh cht ca cc kiu tp cha

Cc tp cha khc c tha k t tp Collection, c cc phng thc c bn


Fa Collection v cha thm cc phng thc ring ca tng tp cha theo cc tnh
cht ring.

2.3.4. i tng nguyn t


Cc i tng nguyn t (Atomic Object) trong ODMG tng t nh cc i
Wng trong cc m hnh i tng khc, c ngi dng nh ngha qua cc khai
bo lp i tng (class). V d lp i tng Student, v Classc m t nh sau:
class Student extends Person
{
attribute char StudentID;

relationship Class belongToClass inverse Class::hasStudents;


relationship Set<Mark> hasMarks inverse Mark::ofStudent;

TH&XD CSDL HT 16 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

float getAverageMark();
}

class Class
{
attribute char Name;
attribute Teacher HeadTeacher
attribute Student Monitor
attribute Student Secretary

relationship Department belongToDep inverse Department::hasClasses


relationship Set<Student> hasStudents inverse Student::belongToClass
relationship Set<Subject> hasSubject inverse Subject::teachInClass
}

7 kho attribute khai bo cc thuc tnh ca i tng. Sau attribute l kiu


G liu v tn ca thuc tnh, v d: attribute char StudentID, khai bo thuc tnh
StudentID ca i tng Sinh vin c kiu l char (xu k t ).
Cc quan hi tng c khai bo trong lp i tng tng ng bng t
kho relationship, vi cu trc:
relationship Type Attribute inverse iClass::iAttribute
trong , Attribute l thuc tnh ca i tng c quan h, Type l kiu d liu ca
thuc tnh. Kiu d liu thng l i tng, hoc mt tp cha cc i tng c
quan h. T kho inverse khai bo quan h theo chiu ngc li, iClass v iAttribute l
Op i tng v thuc tnh c quan h ngc chiu. V d, lp Student c quan h hai
chiu vi lp Class, quan h ny c khai bo nh sau:
relationship Class belongToClass inverse Class::hasStudents;
Yi belongToClass l thuc tnh quan h ca lp Student, v hasStudents l thuc tnh
Fa lp Class. Trong lp Class, quan h ngc li cng c khai bo, vi hasStudents
l mt tp cc i tng Student:
relationship Set<Student> hasStudents inverse Student::belongToClass
Cc hnh vi i tng c khai bo tng t nh trong cc ngn ng lp trnh
Kng i tng, bao gm kiu gi tr tr v, tn hnh vi, v cc tham s nu c. V
G, hnh vi tnh Lm trung bnh ca i tng Sinh vin:
float getAverageMark();

TH&XD CSDL HT 17 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

2.3.5. Tp cha lu bn v kho i tng


M hnh ODMG cng cho php m t cc tp cha lu bn v kho ca cc
i tng trong CSDL. T kho extent dng khai bo tn ca tp cha cc i
Wng lu bn ca lp tng ng trong CSDL. V du, cc lp i tng Student v
Class c khai bo nh sau:
class Student extends Person
(extent all_Students
key StudentID )
^}

class Class
(extent all_Classes
key Name)
^}

Khi all_Students l tn ca mt tp i tng, cha tt c cc i tng


Student tn ti lu bn trong CSDL. Lu ny tng t nh vic khai bo mt tp
cha, v d Set<Student>, vi tn l all_Students, cha tt c cc i tng Student
c to ra v lu tr trong CSDL.
Ch l cc tp cha cng tun theo rng buc ca cc quan h tha k. Tc
l, nu all_Students v all_Person l cc tp cha cc i tng tn ti lu bn ca lp
Student v Person, trong lp i tng Student tha k (extends) t lp Person, th
all_Student s phi l tp con ca all_Person. Rng buc ny c thc hin tng
Ei h thng.
7 kho Key khai bo kho chnh ca cc i tng. V d kho chnh ca i
Wng Student l StudentID. Kho chnh l duy nht, c s dng cho ngi dng
phn bit v nhn bit cc i tng t trong h thng, khc vi nh danh i tng
OID (OID s dng cho h thng nhn bit cc i tng).

2.4. H Qun Tr CSDL Hng i Tng ObjectStore PSE Pro


Hin nay, c nhiu h qun tr CSDL hng i tng ang c xy dng v
pht trin, nh ObjectStore, Objectivity, Versant, O2 Mc d mi h qun tru c
Pt u Lm v th mnh ring, tuy nhin, h qun tr ObjectStore c nh gi l c
nhiu u Lm, cung cp nhiu tnh nng hng i tng, d hiu, d s dng v tun
theo chun CSDL hng i tng ODMG.

TH&XD CSDL HT 18 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

ObjectStore cung cp kh nng lu tr d liu vi hiu qu cao da trn vic


V dng cc ngn ng lp trnh hng i tng nh C++, Java. Cho php d dng to
ra cc lp i tng hoc m rng cc lp, khng b gii hn bi cc kiu hay cc cu
trc phc tp ca d liu. ng thi h tr cc th vin chun cho vic qun l trc
tip cc i tng trong CSDL, h tr x l truy vn (Query Processing), phn mc
(Indexing), v cc giao tc (Transaction) CSDL. Ngoi ra, ObjectStore cn h tr cc
kin trc a lung, a chng trnh, a ngi dng, h tr nh x b nho (Virtual
Memory Mapping), h tr pht trin nhanh trc quan (Visual Rapid Development), v
K tr nhiu mi trng pht trin.
ObjectStore c ba thnh phn chnh l: Object Managers (thnh phn qun l
i tng), Object Servers (cc dch vi tng) v Object Store (lu tri tng),
cho php phn cp v tch bit cc cng vic thc hin trong qu trnh qun l i
Wng. Mt chng trnh ng dng s tng tc trc tip vi thnh phn qun l i
Wng, thnh phn ny s thng qua cc dch vi tng truy cp vo thnh phn
Ou tri tng.
0t phin bn ca ObjectStore l PSE Pro for C++, nh gn hn ObjectStore,
V dng cho vic xy dng v pht trin cc CSDL hng i tng mc nh, cho
php lu tr v truy xut cc i tng d liu theo nh dng ca ngn ng lp trnh
Kng i tng C++. ObjectStore PSE Pro h tr cc cng c thit k CSDL hng
i tng di dng cc k php ho ca m hnh ho hng i tng. ng thi
K tr vic qun l, truy xut, thao tc cc i tng d liu, biu din v thit lp cc
quan h mt chiu, hai chiu, cc i tng t hp, m bo ton vn tham chiu...
Thng thng, mt h qun tr CSDL hng i tng nn c xem xt v
V dng khi h thng i hi cc thao tc vi hiu sut cao trn cc d liu phc tp.
Cc d liu phc tp c th l cc d liu a chiu, a quan h, hay cc d liu a
phng tin. Vi cc d liu ny, vic s dng CSDL quan h s gp rt nhiu kh
khn v hn ch.

TH&XD CSDL HT 19 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

Chng 3. Xy Dng CSDL Hng i Tng

3.1. nh Ngha Cc i Tng Trong CSDL Bng ODL


Ngn ngnh ngha i tng (Object Difinition Language - ODL) c s
Gng xy dng cc lc CSDL hng i tng, cho php nh ngha cc lp
i tng, cc giao din v quan h gia cc lp i tng. ODL l mt thnh phn
Fa m hnh i tng ODMG, c thit k h tr cho vic xy dng ng ngha
Fa m hnh i tng ODMG. ODL cho php c t cc lc CSDL, nhng
khng ph thuc vo mt ngn ng lp trnh c th no v sau c th gn kt
(binding) vo cc ngn ng lp trnh hng i tng c th nh C++, Java,
SmallTalk.
K php ho cho vic biu din cc lc ODL c cho trong Hnh 3.
6 dng cc biu din ny, lc CSDL Qun l Hc tp c xy dng nh trong
Hnh 4.

Class: Student
(Class)

Interface: Person
(Interface)

Relationships: 1:1

1:N

N:N

Inheritance: Interface Class Inheritance


Inheritacne (:) (extends)

Hnh 3: K php ho cho biu din lc ODL

TH&XD CSDL HT 20 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

hasClasses hasTeachers
Department
memberOfDep Name

Person
belongToDep Address

Birthday
Class is_a is_a
hasStudents
Student Teacher
belongToClass
teachSubject
hasSubjects hasMarks
ofStudent hasTeachers

Mark Subject
ofMark hasMarks

teachedInClass

Hnh 4: Lc CSDL Qun l Hc tp

6 dng ODL, nh ngha giao din ca cc lp i tng trong CSDL Qun


l Hc tp c dng nh sau:

class Person
(extent all_Person)
{
attribute NameObj Name;
attribute BirthdayObj Birthday;
attribute char Gender;
attribute AddressObj Address;
attribute char Phone;
attribute char Email;

char getInfo();
}

class Student extends Person


(extent all_Students
key StudentID )
{
attribute char StudentID;
relationship Class belongToClass inverse Class::hasStudents;
relationship Set<Mark> hasMarks inverse Mark::ofStudent;

TH&XD CSDL HT 21 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

float getAverageMark();
}

class Teacher extends Person


(extent all_Teachers)
key TeacherID )
{
attribute char TeacherID;
attribute char Rank;
relationship Set<Department> memberOfDep
inverse Department::hasTeachers
relationship Subject teachSubject inverse Subject::hasTeachers
char getInfo();
}

class Department
(extent all_Departments
key Name)
{
attribute char Name;
relationship Set<Class> hasClasses inverse Class::belongToDep
relationship Set<Teacher> hasTeachers
inverse Teacher::memberOfDep
}

class Class
(extent all_Classes
key Name)
{
attribute char Name;
attribute Teacher HeadTeacher
attribute StudentMonitor
attribute StudentSecretary
relationship Department belongToDep inverse Department::hasClasses
relationship Set<Student> hasStudents inverse Student::belongToClass
relationship Set<Subject> hasSubject inverse Subject::teachInClass
}

class Subject
(extent all_Subjects
key Name)
{
attribute NameObj Name;
attribute char Description;
attribute int Unit;
relationship Set<Mark> hasMark inverse Mark::ofSubject
relationship Set<Class> teachedInClass inverse Class::hasSubject
relationship Set<Teacher> hasTeachers inverse Teacher::teachSubject
}

TH&XD CSDL HT 22 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

class Mark
(extent all_Marks)
{
attribute int Mark1;
attribute int Mark2;
relationship Set<Mark> hasMark inverse Mark::ofSubject
relationship Set<Class> teachedInClass inverse Class::hasSubject
relationship Set<Teacher> hasTeachers inverse Teacher::teachSubject
}

3.2. Thit K CSDL Hng i Tng Bng ObjectStore Database


Designer
ObjectStore PSE Pro cung cp chng trnh ObjectStore Database Designer
cho php thit k cc i tng dng cc k php ho, gip thit k nhanh cc i
Wng v cc quan hi tng trong CSDL hng i tng.

3.2.1. Thit k cc i tng


Cc i tng trong CSDL c thc thit k trong ObjectStore Database
Designer, v c biu din theo ng cc k php ho ca m hnh hng i
Wng. Khi ng chng trnh ObjectStore Database Designer, to mi mt
Workspace hoc m mt Workspace c sn, chng trnh c dng nh hnh sau:

Hnh 5: ObjectStore Database Designer

TH&XD CSDL HT 23 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

thit k mt lp i tng trong ObjectStore Database Designer, s dng

nt hoc menu Class\Add to mt lp i tng mi. Nhp tn ca lp


trong Class Name. Cc thnh vin d liu c to bng cch nhp tn v kiu ca
G liu trong phn Data Members.

Hnh 6: To lp v thnh vin d liu

VD: hnh trn minh ho qu trnh to lp Student, v thuc tnh kho chnh
StudentID vi kiu l char* (con trn kiu char).
0t thnh vin d liu c th c kho truy cp l Public, Private hay Protected
cho php cng khai, b mt hay c bo v i vi cc i tng khc. Kiu ca
thuc tnh c th l kiu nguyn thy (nh: kiu k t, kiu s, ), hoc c th l cc
kiu m rng ca ObjectStore s dng cho CSDL nh: os_database (kiu CSDL),
os_segment (kiu phn Rn), os_Array (mng), os_Bag (ti), os_Collection (tp),
os_List (danh sch), os_Set (tp hp), os_Dictionary (tLn), hoc cng c th l cc
kiu do ngi dng nh ngha (cc kiu d liu phc hp, cc kiu d liu i
Wng). Kiu ca mt thuc tnh cng c thc thit lp l con tr - Pointer, hoc
l mt Vector.

TH&XD CSDL HT 24 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

thit k mt phng thc ca mt i tng, trong phn Properties ca i


Wng, chn Methods v to cc phng thc cho i tng. Mt phng thc cng c
th c cc quyn truy cp l Public, Private, Protected; c th l phng thc o
(virtual) hoc phng thc tnh (static). Kiu gi tr tr v ca phng thc c thit
Op trong Return Type, cc tham s v kiu tham sc thit lp trong Argument
List.
V d: hnh sau m t cch to cc phng thc getInfo() v
getAverageMark() ca lp Student.

Hnh 7: To cc phng thc lp

6 dng ObjectStore Database Designer, cc i tng ca CSDL Qun L


+c Tp c thit k nh trong hnh sau:

TH&XD CSDL HT 25 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

Hnh 8: Thit k cc lp i trong CSDL Qun l Hc tp

3.2.2. Thit k cc Quan h


 Quan h tha k (Inheritance):
Cc quan h tha k gia cc i tng c to bng cch s dng nt

hoc menu Relationship\Add\Inheritance. V d lp i tng


Student v lp Teacher c tha k t lp i tng Person, hai quan h tha
N ny c minh ho nh hnh sau:

TH&XD CSDL HT 26 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

Hnh 9: Thit k quan h tha k

 Quan h mt chiu (One-way Relationship):


0t i tng c th c quan h mt chiu n cc i tng khc.
0t quan h mt chiu l mt quan h m ti tng c quan h, c th tham
chiu n i tng c quan h, nhng khng c chiu ngc li. Quan h
Pt chiu trong ObjectStore Database Designer c to bng cch s dng nt

quan h mt chiu hoc menu Relationship\Add\One-Way.


Vic thit lp quan h mt chiu trong ObjectStore tng t vic thit
Op mt thnh vin d liu cho i tng c quan h, v kiu ca thnh vin d
liu l lp i tng c quan h, hoc l mt con tr, mt tp hp con tr,
hay mt vector n lp i tng . Nu thnh vin d liu c kiu l mt lp
i tng khc, hay i tng ny cha mt d liu l mt i tng khc, th
i tng ca lp chnh l mt i tng phc hp - Composite Object.
Trong ObjectStore, cc quan h mt chiu dng cc con tr hay vector trong
ObjectStore khng c m bo ton vn tham chiu.
V d: Mt i tng Class c mt thnh vin d liu Monitor l mt
i tng Student. Nu ch thit lp quan h mt chiu t lp Class n lp
Student, quan h thu c c dng nh hnh sau:

TH&XD CSDL HT 27 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

Hnh 10: Thit k quan h Mt chiu

V d khc: mt ngi c cc thuc tnh l Name, Birthday v Address,


Qu coi cc thuc tnh ny cng l cc i tng, khi , cc lp i tng
Wng ng l NameObj, BirthdayObj, AddressObj v lp Person s c quan h
Pt chiu n cc lp ny nh trong Hnh 11. Vic to cc quan h tng t
vic to thnh vin d liu ca lp Person c kiu l mt i tng khc, do
i tng Person l mt i tng phc hp.

TH&XD CSDL HT 28 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

Hnh 11: Thit k quan h mt chiu

 Quan h hai chiu (Bidirectional Relationship):


Trong ObjectStore Database Designer, quan h hai chiu c to t
trang Properties\Relationship\Add Bidirectional ca mt i tng tham gia
quan h. Cc quan h cn c thit lp cc gi tr, nh s lng tham gia ca
cc lp i tng (mt-mt, mt-nhiu, nhiu-mt, nhiu-nhiu), lp ngun,
thuc tnh ca lp ngun, lp ch, thuc tnh ca lp ch. Ngoi ra, nu mt
Op i tng tham gia quan h vi s lng nhiu, th lp i tng c quan
K ngc li phi thit lp kiu cha (Container Type) i vi cc i tng
Fa lp ny. Cc kiu cha c th l os_Array, os_Bag, os_Collection, os_List,
os_Set. Trong lc thit k, kiu ca cc thnh vin d liu trong quan h
hai chiu l os_relation.
V d: lp i tng Class c quan h hai chiu vi lp Student, kiu
quan h l mt-nhiu. Thnh vin d liu ca lp Class l hasStudents, kiu
cha l mt tp os_Set cc i tng Student, thnh vin d liu ca lp

TH&XD CSDL HT 29 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

Student l belongToClass. Khi quan h hai chiu gia hai lp i tng


c thit lp nh trong hnh sau:

Hnh 12: Thit k quan h Hai chiu

/u , ObjectStore Database Designer h tr vic biu din cc quan


K i tng di dng cc k php OMT (Object Modeling Technique) v
UML. Du trn trng v en trong OMT tng ng vi s lng tham gia l
Pt v nhiu trong biu din UML.
0t v d khc cho vic thit k quan h hai chiu l quan h nhiu -
nhiu gia lp Teacher v lp Department: thnh vin d liu ca lp Teacher
l memberOfDep cha mt tp cc i tng Department, v thnh vin d liu
hasTeachers Fa lp Department cha mt tp cc i tng Teacher. Quan h
c m t nh trong hnh sau:

TH&XD CSDL HT 30 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

Hnh 13: Thit lp quan h hai chiu

6 dng ObjectStore Database Designer, thit k cc quan h gia cc lp i


Wng trong CSDL Qun L Hc Tp c dng nh sau:

TH&XD CSDL HT 31 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

Hnh 14: Thit k quan h trong CSDL Qun l Hc tp

Sau khi qu trnh thit k hon thnh, m ngun cc lp i tng cn c


ci t v bin dch trong ngn ng lp trnh hng i tng xy dng cc i
Wng thc thi trong CSDL.

3.3. Ci t C S D Liu Hng i Tng


3.3.1. Sinh m cc lp i tng trong CSDL
Cc i tng thc thi trong CSDL chnh l cc i tng dng m thc thi
Fa ngn ng lp trnh hng i tng, c bin dch t m ngun ca cc lp
i tng. xy dng m ngun ca cc lp i tng, c th thc hin sinh m
(generate) t lc thit k CSDL trong ObjectStore Database Designer, hoc c th
vit m trc tip cho cc lp i tng trong ngn ng lp trnh. Trong CSDL Qun l
+c tp, m ngun cc lp i tng sc sinh trc tip t lc thit k, di
Gng ngn ng lp trnh C++.

TH&XD CSDL HT 32 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

ObjectStore cung cp mt Component Wizard cho php sinh m cc lp i


Wng t s thit k trong ObjectStore Database Designer, c nhng trong mi
trng Microsoft Visual C++. T VC++, to mi mt Project dng PSE Component
Wizard for C++ c cung cp bi ObjectStore nh minh ho trong hnh sau:

Hnh 15: ObjectStore PSE Pro Component Wizard

Component Wizard cho php thc hin cc bc sinh m cc lp i


Wng:
 %c 1: La chn thit k ca CSDL, v cc lp sc sinh m.
Cc i tng c thit k sc Component Wizard chuyn i thnh
cc i tng di dng ngn ng lp trnh vi y tn, cc thnh vin d
liu, cc phng thc v cc quan h (Hnh 16).
 %c 2: thit lp tn Root v kiu m rng tng ng ca cc lp.
Component Wizard cho php la chn mt tn Root cho mi lp trong lc
thit k, v chnh kiu m rng ca Root. Mt Root ca mt lp l mt Lm
vo CSDL (Entry Point), cha tp tt c cc i tng ca lp tng ng trong
CSDL. Vic truy cp n cc i tng ca mt lp trong CSDL c thc
thc hin thng qua vic duyt cc thnh vin trong Root ca lp . Kiu m

TH&XD CSDL HT 33 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

Ung ca Root c th l cc kiu os_Array, os_Bag, os_Collection,


os_Dictionary, os_List, os_Set. V d trong CSDL Qun l Hc tp, cc Root
v kiu m rng tng ng c thit lp nh trong Hnh 17:

Hnh 16: M thit k CSDL Hnh 17: Thit lp Root

 %c 3: Chn kiu Project mun sinh. PSE Component Wizard cng


K tr cc kiu d n c thc sinh ra di dng cc ng dng MFC, ng
Gng Console, hoc di dng ActiveX Server (PSAX) truy xut v thao tc
CSDL da trn cc dng ng dng tng ng. CSDL Qun l Hc tp s minh
ho vic xy dng CSDL hng i tng di dng cung cp cc giao din
ActiveX cho cc chng trnh ng dng, tc dng d n l ActiveX Server. Khi
cc ng dng c thc vit trong mi trng Microsoft Visual Basic, truy
xut, thao tc cc i tng trong CSDL thng qua cc ActiveX ca i tng
G liu (Hnh 18).

TH&XD CSDL HT 34 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

.t thc PSE Component Wizard, Project c sinh ra bao gm cc th vin


lin kt ng (DLL), m ngun cc lp i tng trong CSDL, v cc giao din
ActiveX ca ObjectStore (OSAX Interface) cho cc lp i tng (Hnh 19).

Hnh 18: La chn kiu d n Hnh 19: Cc thnh phn m c sinh

3.3.2. Giao din cc lp i tng trong CSDL


Sau y l giao din minh ho ca cc lp i tng trong CSDL Qun l Hc
Wp:

TH&XD CSDL HT 35 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

Hnh 20: Minh ho giao din cc lp i tng trong VC++

/p Student (Sinh vin):

class OS_DB_EXT_CLASS Student : public Person


{
public:
Student( int bAddToRoot = 0);
Student(char * _StudentID, char * _Gender, char * _Phone, char * _Email,
int bAddToRoot = 0);
virtual ~Student();
// extents
static void UpdateExtents(Student* pStudent, int add, os_database* pdb = NULL);
static os_Set<Student*> *GetExtents(os_database* pdb);
static const char* GetObjectStoreClassName();
// Attributes
public:
char * StudentID;
// Operations
public:
char * getInfo();
float getAverageMark();
// ObjectStore Relation
public:
os_relationship_1_m(Student,belongToClass,Class,hasStudents,Class*)

TH&XD CSDL HT 36 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

belongToClass;
os_relationship_m_1(Student,hasMarks,Mark,ofStudent,os_Set<Mark*>) hasMarks;
os_Set<Mark*> * get_hasMarks(){return &hasMarks.getvalue();};
};

/p Teacher (Gio vin):

class OS_DB_EXT_CLASS Teacher : public Person


{
public:
Teacher( int bAddToRoot = 0);
Teacher(char * _TeacherID, char * _Rank, char * _Gender, char * _Phone,
char * _Email, int bAddToRoot = 0);
virtual ~Teacher();
// extents
static void UpdateExtents(Teacher* pTeacher, int add, os_database* pdb = NULL);
static os_Set<Teacher*> *GetExtents(os_database* pdb);
static const char* GetObjectStoreClassName();
// Attributes
public:
char * TeacherID;
char * Rank;
// Operations

// ObjectStore Relation
public:
os_relationship_m_m(Teacher,memberOfDep,Department,hasTeachers,
os_Set<Department*>) memberOfDep;
os_Set<Department*> * get_memberOfDep(){return &memberOfDep.getvalue();};
os_relationship_1_m(Teacher,teachSubject,Subject,hasTeachers,Subject*)
teachSubject;
void set_teachSubject(Subject* value){teachSubject = value;};

};

/p Person (Ngi):

class OS_DB_EXT_CLASS Person


{
public:
Person( int bAddToRoot = 0);
Person(char * _Gender, char * _Phone, char * _Email, int bAddToRoot = 0);
virtual ~Person();
// extents
static void UpdateExtents(Person* pPerson, int add, os_database* pdb = NULL);
static os_Set<Person*> *GetExtents(os_database* pdb);
static const char* GetObjectStoreClassName();
// Attributes
public:

TH&XD CSDL HT 37 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

NameObj Name;
BirthdayObj Birthday;
char * Gender;
char * Phone;
AddressObj Address;
char * Email;
// Operations
public:
char * getInfo();
};

/p Department (Khoa, B mn):

class OS_DB_EXT_CLASS Department


{
public:
Department( int bAddToRoot = 0);
Department(char * _Name, int bAddToRoot = 0);
virtual ~Department();
// extents
static void UpdateExtents(Department* pDepartment, int add,
os_database* pdb = NULL);
static os_Set<Department*> *GetExtents(os_database* pdb);
static const char* GetObjectStoreClassName();
// Attributes
public:
char * Name;
// Operations

// ObjectStore Relation
public:
os_relationship_m_1(Department,hasClasses,Class,belongToDep,
os_Set<Class*>) hasClasses;
os_Set<Class*> * get_hasClasses(){return &hasClasses.getvalue();};
os_relationship_m_m(Department,hasTeachers,Teacher,memberOfDep,
os_Set<Teacher*>) hasTeachers;
os_Set<Teacher*> * get_hasTeachers(){return &hasTeachers.getvalue();};
};

/p Class (Lp hc):

class OS_DB_EXT_CLASS Class


{
public:
Class( int bAddToRoot = 0);
Class(char * _Name, Teacher * _HeadTeacher, Student * _Monitor,
Student * _Secretary, int bAddToRoot = 0);
virtual ~Class();

TH&XD CSDL HT 38 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

// extents
static void UpdateExtents(Class* pClass, int add, os_database* pdb = NULL);
static os_Set<Class*> *GetExtents(os_database* pdb);
static const char* GetObjectStoreClassName();
// Attributes
public:
char * Name;
Teacher * HeadTeacher;
Student * Monitor;
Student * Secretary;
// Operations

// ObjectStore Relation
public:
os_relationship_1_m(Class,belongToDep,Department,hasClasses,Department*)
belongToDep;
void set_belongToDep(Department* value){belongToDep = value;};
os_relationship_m_1(Class,hasStudents,Student,belongToClass,os_Set<Student*>)
hasStudents;
os_Set<Student*> * get_hasStudents(){return &hasStudents.getvalue();};
os_relationship_m_m(Class,hasSubjects,Subject,teachedInClass,os_Set<Subject*>)
hasSubjects;
os_Set<Subject*> * get_hasSubjects(){return &hasSubjects.getvalue();};
};

/p Subject (Mn hc):

class OS_DB_EXT_CLASS Subject


{
public:
Subject( int bAddToRoot = 0);
Subject(char * _Name, int _Unit, char * _Description, int bAddToRoot = 0);
virtual ~Subject();
// extents
static void UpdateExtents(Subject* pSubject, int add, os_database* pdb = NULL);
static os_Set<Subject*> *GetExtents(os_database* pdb);
static const char* GetObjectStoreClassName();
// Attributes
public:
char * Name;
int Unit;
char * Description;
// Operations

// ObjectStore Relation
public:
os_relationship_m_1(Subject,hasMarks,Mark,ofSubject,os_Set<Mark*>) hasMarks;
os_Set<Mark*> * get_hasMarks(){return &hasMarks.getvalue();};
os_relationship_m_m(Subject,teachedInClass,Class,hasSubjects,os_Set<Class*>)

TH&XD CSDL HT 39 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

teachedInClass;
os_Set<Class*> * get_teachedInClass(){return &teachedInClass.getvalue();};
os_relationship_m_1(Subject,hasTeachers,Teacher,teachSubject,os_Set<Teacher*>)
hasTeachers;
os_Set<Teacher*> * get_hasTeachers(){return &hasTeachers.getvalue();};
};

/p Mark (Lm):

class OS_DB_EXT_CLASS Mark


{
public:
Mark( int bAddToRoot = 0);
Mark(int _Mark1, int _Mark2, int bAddToRoot = 0);
virtual ~Mark();
// extents
static void UpdateExtents(Mark* pMark, int add, os_database* pdb = NULL);
static os_Set<Mark*> *GetExtents(os_database* pdb);
static const char* GetObjectStoreClassName();
// Attributes
public:
int Mark1;
int Mark2;
// Operations

// ObjectStore Relation
public:
os_relationship_1_m(Mark,ofStudent,Student,hasMarks,Student*) ofStudent;
void set_ofStudent(Student* value){ofStudent = value;};
os_relationship_1_m(Mark,ofSubject,Subject,hasMarks,Subject*) ofSubject;
void set_ofSubject(Subject* value){ofSubject = value;};
};

3.3.3. Ni dung cc lp i tng


Cc phng thc ca lp i tng, nh cc phng thc khi to, hu bi
Wng, v cc hnh vi do ngi dng nh ngha, thn ca cc quan hi tng, cc
phng thc m rng ca lp i tng c nh ngha trong file ci t ni dung
Fa lp tng ng. V d, file ci t ca lp i tng Student c dng nh sau:

//ObjectStore Database Class(es) created by ObjectStore Component Wizard


#include "stdafx.h"
#include "Student.h"

#include "Class.h"
#include "Mark.h"

TH&XD CSDL HT 40 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

os_rel_1_m_body(Student,belongToClass,Class,hasStudents)
os_rel_m_1_body(Student,hasMarks,Mark,ofStudent)

Student::Student( int bAddToRoot /*=0*/)


{
StudentID = 0;
Gender = 0;
Phone = 0;
Email = 0;
if(bAddToRoot)
UpdateExtents(this, TRUE, 0);
}

Student::Student(char * _StudentID, char * _Gender, char * _Phone,


char * _Email, int bAddToRoot /*=0*/)
{
StudentID = 0;
Gender = 0;
Phone = 0;
Email = 0;
set_StudentID(_StudentID);
set_Gender(_Gender);
set_Phone(_Phone);
set_Email(_Email);
if(bAddToRoot)
UpdateExtents(this, TRUE, 0);
}

os_Set<Student*> *Student::GetExtents(os_database* pdb)


{
os_Set<Student*> *db_root_c_Student = NULL;
if (!pdb)
return db_root_c_Student;
try{
char root_name[] = "Student";
os_database_root *db_root_Student = pdb->find_root(root_name);
if (!db_root_Student){
db_root_Student = pdb->create_root(root_name);
db_root_c_Student = &os_Set<Student*>::create(pdb);
db_root_Student->set_value(db_root_c_Student);
}
else
db_root_c_Student = (os_Set<Student*> *)
db_root_Student->get_value();
}
catch (os_err& err){
puts(err.get_report());
}
return db_root_c_Student;

TH&XD CSDL HT 41 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

void Student::UpdateExtents
(Student* pStudent, int add, os_database* pdb /*= NULL*/)
{
Person::UpdateExtents(pStudent, add, pdb);
if (!pStudent && !pdb)
return;
try{
os_database *db;
if (pStudent)
db = os_database::of(pStudent);
else
db = pdb;
os_Set<Student*> *db_root_c_Student = GetExtents(db);
if(!db_root_c_Student)
return;
if (pStudent)
if (add)
db_root_c_Student->insert( pStudent);
else
db_root_c_Student->remove(pStudent);
}
catch (os_err& err){
puts(err.get_report());
}
}

Student::~Student()
{
if(StudentID){
delete StudentID;
}
UpdateExtents(this, FALSE);
}

void Student::set_StudentID(const char *value)


{
if(StudentID) {
delete StudentID;
StudentID = NULL;
}
if(value) {
int len = strlen(value);
StudentID = new (os_Layout_Service::GetDataSegment(this),
os_typespec::get_char(), len+1) char[len+1];
strcpy(StudentID, value);
}
}

TH&XD CSDL HT 42 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

char * Student::getInfo()
{
char * ret;
//TODO: Add your code here
return ret;
}

float Student::getAverageMark()
{
float AverageMark;
//TODO: Add your code here
return AverageMark;
}

void Student_force_vfts (void*)


{
os_Array<Student*> pos_Array_Student;
os_Bag<Student*> pos_Bag_Student;
os_Collection<Student*> pos_Collection_Student;
os_List<Student*> pos_List_Student;
os_Set<Student*> pos_Set_Student;
}

3.3.4. Cc kiu quan h trong ObjectStore


0t quan h hai chiu trong ObjectStore c khai bo trong ngn ng lp
trnh hng i tng (C++) bng vic gi mt Macro c dng nh sau:
os_relationship_x_y (class, member, inverse_class, inverse_member,
value_type) member
Trong :

x, y: l s lng cc gi tr trong kiu ca thnh vin d liu, ca cc lp


tham gia vo quan h, c gi tr l 1 nu kiu d liu l mt con trn i
Wng c quan h, l m nu kiu d liu l mt tp con tr.

class: l lp cha thnh vin d liu member, lp c quan h.

member: tn ca thnh vin d liu s dng cho vic thit lp quan h.

inverse_class: tn ca lp c quan h ngc li.

inverse_member: tn ca thnh vin d liu quan h ngc li

TH&XD CSDL HT 43 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

value_type: kiu gi tr ca thnh vin ang c khai bo, c th l mt


con tr hoc mt tp con trn i tng c quan h.
Macro ny l mt cu lnh t hp, trong cha hai thnh phn chnh. Thnh
phn th nht khai bo mt thnh vin d liu member Fa lp, c kiu l value_type.
Thnh phn th hai khai bo thn ca quan h hai chiu, thn ca quan h ny cng l
Pt Macro khc, c dng:
os_rel_x_y_body (class, member, inverse_class, inverse_member)
Thn ca quan hc t trong file ngun, vi cc tham s tng t trong
Macro trn, c nhim v chnh l thit lp v m bo mi quan h. Vic m bo,
duy tr cc quan h v cc quan h theo chiu ngc li c thc hin bng cch to
ra cc lp quan h nhng (Embedded Relationship Class), lp ny sng gi cc
con tr trong quan h trnh hay ngn chn nhng cp nht t bn ngoi n cc gi
trc ng gi, ng thi thc hin cc cng vic bn trong cn thit m bo
ton vn cc mi quan h theo c hai chiu.
V d: trong CSDL Qun L Hc Tp, lp Student c quan h nhiu - mt vi
Op Class, thnh vin d liu tham gia vo quan h ca lp Student l belongToClass,
Fa lp Class l hasStudents. Do quan h c dng nh sau:
os_relationship_1_m(Student,belongToClass,Class,hasStudents,
Class*) belongToClass;
Thnh vin d liu belongToClass ca lp Student tham gia vo quan h c
kiu c cho trong tham s cui cng ca Macro, l Class*. Thn ca quan h trn
c khai bo trong mt Macro khc, c t trong file ngun ca lp Student:
os_rel_1_m_body(Student,belongToClass,Class,hasStudents)
Do quan h l hai chiu nn trong lp Class c khai bo quan h ngc li
os_relationship_m_1(Class,hasStudents,Student,belongToClass,
os_Set<Student*>) hasStudents;
Kiu ca thnh vin d liu hasStudents l mt tp cc con trn i tng
Student: os_Set<Student*>, thn ca quan h l:
os_rel_m_1_body(Class,hasStudents,Student,belongToClass).
ObjectStore cng h tr biu din cc quan h gia cc i tng vi cc i
Wng thnh phn ph thuc- subsidiary component object. Quan h ny cho php vic

TH&XD CSDL HT 44 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

xo lan truyn (deletion propagation) sc thc hin i vi cc i tng ph


thuc nu mt i tng b xo. ObjectStore cung cp cc Macro cho thn ca quan h
hai chiu cho php thc hin vic xo lan truyn cc i tng ph thuc, c dng:
os_rel_x_y_body_options(class,member,inverse_class,
inverse_member,deletion)
9i deletion c gi tr l os_rel_propagate_delete hoc
os_rel_dont_propagate_delete, cho php xo lan truyn hay khng. V d, quan h
gia hai i tng Student v Mark:
os_relationship_m_1(Student,hasMarks,Mark,ofStudent,
os_Set<Mark*>) hasMarks;
C thn l:
os_rel_m_1_body_options(Student,hasMarks,Mark,ofStudent,
os_rel_propagate_delete)
1u mt i tng Student b xo, th tp hp tt c cc i tng Mark ph thuc ca
n cng s b xo. Lu ny m bo rng khng tn ti cc i tng Mark l ph
thuc ca mt i tng Student no m i tng Student ny li khng tn ti
hay b xo.

3.3.5. Mt s T kho v Phng thc m rng cho CSDL


ObjectStore cung cp mt s cc khai bo v phng thc m rng h tr
cho vic qun l, truy xut v thao tc CSDL
V d t kho OS_DB_EXT_CLASS c thm vo u khai bo cc lp, v
G trong khai bo lp Student: class OS_DB_EXT_CLASS Student. T kho ny
nhm m rng hay khai bo mt lp trong ngn ng lp trnh hng i tng l mt
Op trong CSDL hng i tng, cho php h thng sinh ra cc m rng ca lp i
Wng trong CSDL.
0t s phng thc m rng nh GetExtents hay UpdateExtends, cho php
Oy hay cp nht gi tr ca Root (Lm vo CSDL, c sinh trong phn sinh m
i tng):

GetExtents: tr v tp tt c cc i tng ca lp tng ng trong CSDL,


hay tr v gi tr ca Root. Tp i tng tr v c th l mt trong cc kiu
P rng ca ObjectStore (os_Collection, os_Array, os_Bag, os_List,

TH&XD CSDL HT 45 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

os_Set), ph thuc vo kiu m rng Root ca lp . V d, phng thc


GetExtents ca lp Student c dng:
os_Set<Student*> *GetExtents(os_database* pdb);
V tr v tp hp os_Set tt c cc i tng Student c trong CSDL c
tr bi con tr pdb.

UpdateExtents: cp nht thm vo, hay loi b mt i tng ca lp trong


CSDL. V d:
void UpdateExtents(Student* pStudent, int add,
os_database* pdb = NULL);
1u tham s cp nht add = 1, phng thc s cp nht mt i tng
Student c xc nh bi con tr pStudent vo CSDL pdb, v s loi bi
Wng khi CSDL hin thi ang cha n nu tham s cp nht l add =
0.

3.3.6. Ci t ni dung phng thc ca cc lp i tng


M ngun cc lp i tng c ObjectStore Component Wizard sinh ra c
y tn, thnh vin d liu, phng thc v cc quan h nh c thit k. Tuy
nhin cc phng thc do ngi dng nh ngha mi chc sinh dng khung
Pu, cha c ni dung. Do vy, cn ci t ni dung cho cc phng thc ny bng
ngn ng lp trnh. V d vi phng thc tnh Lm trung bnh getAverageMark() ca
Op Student, m ngun phng thc c ci t nh sau:

float Student::getAverageMark(os_database * osdb){


float AverageMark = 0;
//TODO: Add your code here

// tp cc i tng Mark ca Student


os_Set <Mark*> aMarkSet = *this->get_hasMarks();

// c l mt con tr kiu Mark n tp aMarkSet


os_Cursor<Mark*> c (aMarkSet);

Mark * m;
float sum=0.0;
int count =0;
// con tr c duyt trong tp hp
for (m=c.first(); c.more(); m = c.next()){
sum = sum + m->Mark1; // tnh tng cc Lm

TH&XD CSDL HT 46 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

count = count + 1; // sLm


}
if (count !=0) { AverageMark = sum/count; }
return AverageMark;
}

Phng thc trn duyt trn tt c cc i tng Mark c quan h vi i tng


Student hin thi, tnh v tr vLm trung bnh ca cc i tng Mark ny.
m bo tnh ton vn i tng v ton vn d liu trong CSDL, cc hnh
vi cp nht d liu ca cc i tng cng cn c ci t thc hin nhng thao
tc hp l. V d, m bo d liu Mark1 Fa i tng Mark l mt s nm trong
khong t 0 n 10, hnh vi set_Mark1 Fp nht d liu Mark1 Fa i tng Mark
Fn phi kim tra gi tr truyn vo, nu gi tr l khng hp l, th phi bo li hoc
c th thit lp v gi tr mc nh:
void set_Mark1(int value){
if ((value<0) || (value>10)) Mark1 = 0;
else Mark1 = value;
};
Lu ny m bo tnh an ton hay ton vn d liu cho i tng v CSDL.

3.3.7. Bin dch CSDL


Sau khi ci t, m ngun cc lp i tng c bin dch xy dng nn
cc i tng thc thi cho CSDL. Do CSDL Qun l Hc tp minh ho vic ci t
chng trnh truy xut v thao tc CSDL da trn cc giao din ActiveX, nn kiu d
n c chn bin dch l OSAX/PSE Server, cu hnh bin dch l Win32 Release.

Hnh 21: Bin dch CSDL di dng OSAX/PSE Server

TH&XD CSDL HT 47 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

Cc file lc , file DLL cho CSDL, file m trung gian ca cc lp i tng


v cc file cha cc thnh phn giao din ActiveX ca CSDL c sinh ra, cung cp
cc cu trc CSDL, cu trc cc lp i tng thc thi, v cc h tr khc cho vic
truy xut v thao tc CSDL.

Hnh 22: Cc file c to sau khi bin dich CSDL

TH&XD CSDL HT 48 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

Chng 4. Ci t V Thc Thi Chng Trnh ng Dng


CSDL

4.1. Ci t Chng Trnh ng Dng CSDL


Sau khi cu trc CSDL v cc lp i tng thc thi c to ra, cc chng
trnh ng dng c th truy xut hoc thao tc cc i tng trong CSDL thng qua cc
ngn ng lp trnh. minh ho, mt chng trnh ng dng sc xy dng, truy
xut v thao tc cc d liu i tng trong CSDL Qun L Hc Tp.
Chng trnh ng dng xy dng mt d n LearningManager trong mi
trng Visual Basic, thng qua cc giao din thnh phn ActiveX thao tc CSDL.
ng dng c th tham chiu n cu trc ca CSDL v cc i tng trong c s
G liu ObjectDB_Server xy dng, cn phi kt ni hay tham chiu n file th
vin lin kt ng ObjectDB_Server (ObjectDB_Server.dll) ca CSDL, bng cch
ng k cc thnh phn ActiveX (ActiveX Component), t menu Project\References:

Hnh 23: Tham chiu n cc thnh phn ActiveX ca CSDL

TH&XD CSDL HT 49 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

4.1.1. To giao din chng trnh ng dng


7 mi trng Visual Basic, to cc giao din cho chng trnh ng dng, bao
Jm cc giao din cho vic hin th thng tin, truy vn, cp nht v tng tc vi
CSDL hay cc i tng d liu trong CSDL.
V d, giao din cho cc tng tc vi i tng Student c to nh hnh
sau:

Hnh 24: To giao din tng tc vi i tng Student

Do d liu l cc i tng, nn cc trng thng tin nn c xp xp theo


cc thnh phn chnh ca mt i tng, nh gp cc trng thng tin tng ng vi
cc thnh vin d liu (Data Member), cc hnh vi i tng (Behaviour), cc tng
tc (Interaction), v cc quan hi tng (Relationship).

4.1.2. Khai bo cc bin truy xut CSDL


Sau khi ng k cc thnh phn ActiveX, cc bin CSDL v i tng c th
c khai bo cho vic truy xut v thao tc CSDL, vi kiu gi tr l cc thnh phn
ActiveX. Lu , cc thnh phn ActiveX c t tn theo quy c: vi mi kiu hay
i tng trong ObjectStore (C++), thm mt k t I vo trc tn kiu thu c

TH&XD CSDL HT 50 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

Pt giao din ActiveX. V d vi kiu (i tng) Student trong ObjectStore (C++),


giao din ActiveX tng ng ca i tng Student l IStudent.
V d khai bo cc bin:
Dim ObjectDB As IOSAXDatabase
Dim aStudent As Istudentt
Dim aClass As Iclass

Hnh 25: Khai bo cc bin CSDL v i tng

Khi ObjectDB s l mt bin c kiu l giao din ActiveX ca mt CSDL, aStudent


v aClass l giao din ca mt i tng Student v Class. Visual Basic h tr lit k
cc giao din ActiveX nh hnh trn.

4.1.3. To v m mt CSDL
m hay kt ni n mt CSDL, ObjectStore cung cp phng thc
OpenDatabase vi ba tham s chnh l: Name, ReadOnly, CreateMode. Gi tr tr v
Fa phng thc ny l mt CSDL v c thc gn cho mt bin CSDL. V d:
Set ObjectDB = ObjectStore.OpenDatabase(App.Path &
"\LearningManager.db", 0, 1)
Tham s CreateMode c dng to mi CSDL nu n khng tn ti, hay cng c
th to mi mt CSDL bng phng thc CreateDatabase vi cc tham s Name,
CreateMode, Overwrite:
Set ObjectDB = ObjectStore.CreateDatabase(App.Path &
"\LearningManager.db", 0, 1)

TH&XD CSDL HT 51 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

4.1.4. Thit lp cc giao tc trong CSDL


m bo tnh an ton v ton vn d liu trong CSDL, mi thao tc lm
thay i CSDL nn c t trong cc giao tc (Transaction). Ch khi tt c cc thao
tc thay i d liu trong mt giao tc c hon tt, cc thay i mi c cp nht
v lu tr thc s trong CSDL. ObjectStore cung cp cc hm thit lp mt giao
tc, bao gm hm bt u v kt thc giao tc nh sau:
ObjectStore.BeginTrans
// cc thao tc CSDL trong giao tc
ObjectStore.CommitTrans
Trong trng hp gp li thao tc hoc gp cc s c khng mong mun, cc
thao tc thay i CSDL s b hu b bng:
ObjectStore.Rollback

4.1.5. To i tng v thit lp cc d liu thnh vin


to mi mt i tng, ObjectStore cung cp cc phng thc Create, c
Gng Create<Class> hoc Create<Class>Empty, vi <Class> l tn ca lp cn to
i tng hay th hin. Phng thc Create<Class> gi phng thc to Constructor
Fa i tng vi tt c cc tham s truyn vo cho i tng. Cn hm
Create<Class>Empty s to mt i tng m khng cn tham s, tt c cc thnh
vin d liu ca i tng sc thit lp rng hoc theo mc nh.
V d: i tng Student trong CSDL Qun L Hc Tp c thnh vin d liu
l StudentID, tha k d liu Gender, Phone, Email t lp Person. Cu lnh sau to
Pi mt i tng aStudent trong CSDL ObjectDB c StudentID = 0122177 v
Gender = Male, Phone = 038811393, Email = caoxuanvinhit@yahoo.com,
c lu tr lu di trong CSDL:
Set aStudent = CreateStudent(ObjectDB, 0122177, Male,
038811393, caoxuanvinhit@yahoo.com, 1)
&ng c thc to mt i tng Student rng:
Set aStudent = CreateStudentEmpty(ObjectDB, 1)
v cp nht, thit lp gi tr cho cc thnh vin d liu ca i tng. Vic truy cp v
gn gi tr cho cc thnh vin d liu c thc hin theo biu thc ng i nh
trong ngn ng lp trnh hng i tng. V d:

TH&XD CSDL HT 52 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

aStudent .StudentID = 0122177


aStudent .Name.LastName = Vinh
V d sau minh ho th tc to mi mt i tng Student: mt i tng
Student mi sc to khi click vo nt lnh cmdCreate trong giao din Form ca
i tng Student. Cc trng thng tin ca i tng s c thit lp bng cc
thng tin c nhp vo trong cc Lu kin (control) tng ng ca Form nh
txtStudentID, txtFirstName, cboGender Hm OsStr(), OsNumber() l cc hm
chuyn i kiu String v ly gi tr s t ngn ng VB sang ObjectStore (hay C++).

Private Sub cmdCreate_Click()


On Error GoTo RB:

Dim aStudent As IStudent


Dim aClass As IClass
Set aClass = getClassHasName(txtClass)

ObjectStore.BeginTrans

Set aStudent = ObjectDB_Server.CreateStudentEmpty(ObjectDB, 1)


With aStudent
.StudentID = OsStr(txtStudentID)

.Name.FirstName = OsStr(txtFirstName)
.Name.MidName = OsStr(txtMidName)
.Name.LastName = OsStr(txtLastName)

.Birthday.Day = OsNumber(txtDay)
.Birthday.Month = OsNumber(txtMonth)
.Birthday.Year = OsNumber(txtYear)

.Gender = OsStr(cboGender.Text)

.Address.DoorNo = OsStr(txtNo)
.Address.Street = OsStr(txtStreet)
.Address.City = OsStr(txtCity)
.Address.Province = OsStr(txtProvince)
.Address.Phone = OsStr(txtPhone)
.Address.Email = OsStr(txtEmail)

If Not aClass Is Nothing Then


Set aStudent.belongToClass = aClass
End If

TH&XD CSDL HT 53 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

End With
ObjectStore.CommitTrans
Exit Sub

RB:
MsgBox Err.Description
ObjectStore.Rollback
End Sub

Trong th tc trn c s dng hm getClassHasName() vi tham s txtClass,


tr v mt i tng Class c tn l txtClass, t thit lp mi quan h gia i
Wng Student c to v i tng Class. Hm ny minh ho qu trnh duyt v truy
xut CSDL tm ra i tng Class da trn kho chnh ca i tng, hay chnh l
vic duyt trn tp cc i tng l Lm vo CSDL ca lp Class truy xut n cc
i tng thnh vin. Hm ny c dng nh sau:

Private Function getClassHasName(Name As String) As IClass

Set getClassHasName = Nothing


Dim aClass As IClass

ObjectStore.BeginTrans
For Each aClass In CClass.GetExtents(ObjectDB)
If aClass.Name = Name Then
Set getClassHasName = aClass
Exit For
End If
Next
ObjectStore.CommitTrans

End Function

4.1.6. Thc thi cc hnh vi i tng


thc thi hnh vi ca mt i tng, c th gi trc tip hnh vi t chnh i
Wng . V d, nu aStudent l mt i tng ca lp Student c cc hnh vi l
getInfo(), getAverageMark(), v cha i tng Birthday c hnh vi getAge(). Khi ,
cc hnh vi c thc thc thi bng li gi:
aStudent.getInfo

TH&XD CSDL HT 54 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

aStudent.getAverageMark()
aStudent.Birthday.getAge()
1u mt hnh vi khng cn cc tham s, ch cn gi tn hnh vi , nu hnh vi yu
Fu cc tham s, th cc tham s cn c truyn vo tng t nh cc li gi hm
trong ngn ng lp trnh.

4.1.7. Thit lp cc quan h trong CSDL


Cc quan hc thit lp bng cch thit lp cc gi tr cho cc thnh vin
G liu trong quan h ca cc i tng.
V d, thit lp quan h gia aStudent v aClass l hai i tng thuc lp
Student v Class:
Set aStudent.belongToClass = aClass
Cu lnh trn thc hin vic thit lp thnh vin d liu belongToClas Fa i
Wng aStudent trn i tng aClass. Lu do mi quan h l hai chiu nn chiu
ngc li ca quan h cng sc thit lp, do d liu thnh vin hasStudents Fa
i tng aClass cng s c thm i tng aStudent. Nu ph b quan h ny theo
Pt chiu no , th mi quan h theo chiu ngc li cng b ph b. V d nu thit
Op li quan h ca aStudent:
Set aStudent.belongToClass = otheClass
Th mi quan h gia aStudent vi aClass s b ph hu, tp i tng Student
trong hasStudents ca aClass cng s bt i i tng aStudent, ng thi quan h
gia aStudent vi otheClass c thit lp.
i vi cc quan h m thnh vin d liu cha mt tp cc i tng khc,
cc quan hc thit lp bng cch s dng cc phng thc trong tp i tng
thm hoc bt mt quan h vo tp cc quan h trong thnh vin d liu. V d lp
Student c quan h mt - nhiu vi lp i tng Mark, thnh vin d liu quan h l
hasMarks, do thit lp mt quan h t aStudent n aMark, s dng phng
thc Add:
aStudent.hasMarks.Add aMark
hu b mi quan h, s dng phng thc Remove:
aStudent.hasMarks.Remove aMark

TH&XD CSDL HT 55 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

0t v d khc thit lp mi quan h nhiu-nhiu gia lp Teacher v lp


Department. Vi Teacher1, Teacher2 l hai i tng thuc lp Teacher, v Dep1,
Dep2 l hai i tng thuc lp Department, cc cu lnh sau thit lp cc quan h th
hin rng c hai i tng Teacher1 v Teacher2 u l thnh vin ca hai i tng
Dep1, Dep2:
Teacher1.memberOfDep.Add Dep1
Dep1.hasTeachers.Add Teacher2

Teacher2.memberOfDep.Add Dep2
Dep2.hasTeachers.Add Teacher1

4.1.8. Cp nht v Xo mt i tng trong CSDL


Vic cp nht thng tin ca mt i tng c thc hin tng t khi thit
Op gi tr cho cc thnh vin d liu. Vic xo mt i tng c thc hin bng
cch loi bi tng khi tp cc i tng trong gc Root ca lp trong CSDL.
0t gc Root ca mt lp trong CSDL c th thu c bng cch s dng cc phng
thc m rng ca lp, v d CStudent.GetExtents(ObjectDB) s tr gc Root ca lp
Student, cha tt c cc i tng Student trong CSDL ObjectDB. Do vy xo mt
i tng aStudent ra khi CSDL, c th s dng phng thc Remove:
CStudent.GetExtents(ObjectDB).Remove aStudent
&ng c th s dng phng thc loi b tnh lu tr lu di ca i tng aStudent ra
khi CSDL:
CStudent.Update_Extents(aStudent, 0, ObjectDB)

4.2. Thc Thi Chng Trnh ng Dng


4.2.1. Menu chng trnh
Chng trnh ng dng minh ho ca CSDL Qun L Hc Tp gm mt Form
chnh c cc Menu cho php qun l, truy vn, thao tc CSDL v cc i tng trong
CSDL.
0t s Menu chnh bao gm:

File > New Database: Wo mi mt CSDL


File > Open Database: m mt CSDL tn ti
File > Save Database: ghi li cc thay i CSDL
File > Close Database:ng kt ni ti CSDL

TH&XD CSDL HT 56 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

Edit > Undo: hu b thao tc CSDL va thc hin


Edit > Redo: thc hin li thao tc va Undo
Edit > Undo Marker: nh du mt trng thi CSDL, cho php khi
phc li trng thi ny bng lnh Undo.

View > Database Browser: xem cc i tng v quan h trong


CSDL mc tng th

Object > Student Object: qun l i tng Student


Object > Teacher Object: qun l i tng Teacher
Object > Class Object: qun l i tng Class
Object > Faculty Object: qun l i tng Faculty
Object > Subject Object: qun l i tng Subject
Object > Mark Object: qun l i tng Mark

Search > Search Student: tm kim i tng Student theo cc


trng thng tin
Search > Search Teacher: tm kim i tng Teacher theo cc
trng thng tin

Hnh 26: Giao din chng trnh ng dng CSDL

TH&XD CSDL HT 57 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

4.2.2. Qun l cc i tng d liu


0i lp i tng trong CSDL c mt Form qun l thng tin, bao gm danh
sch cc i tng, thng tin chi tit vi tng, cc thnh vin d liu, cc hnh vi
v cc quan h. C th to mi cc i tng d liu, cp nht, hoc xo i tng d
liu.
V d: Form thc thi ca chng trnh ng dng thao tc vi i tng
Student c dng nh hnh sau. List of Student cha danh sch tt c cc i tng
Student trong CSDL. Khung Data Member hin th cc thng tin d liu thnh vin
Fa i tng, hoc cho php nhp thng tin khi to mi, cp nht i tng. Khung
DB Interaction cha cc nt lnh cho cc giao tc CSDL: Create, Update, v Delete
i tng.

Hnh 27: Form qun l i tng Student

4.2.3. Thc thi cc hnh vi i tng


Cc hnh vi i tng c thc gi thc thi thit lp cc gi tr cho i
Wng, hoc tr v cc gi trc yu cu.
V d: trong khung Behaviour ca Form Student, kch nt Get Information,
hoc Get Average Mark thc thi hnh vi getInfo(), getAverageMark() ca i tng

TH&XD CSDL HT 58 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

Student hin thi, gi tr tr v ca cc hnh vi ny l thng tin vi tng, v Lm


trung bnh ca cc i tng Mark c quan h vi i tng Student hin thi:

Hnh 28: Thc thi cc hnh vi i tng

4.2.4. Thit lp quan hi tng v kim tra tnh ton vn tham
chiu
V d, thit lp quan h hai chiu gia mt i tng Student v mt i
Wng Class, trong khung Relationship, nhp tn Name ca i tng Class vo
Belong To Class. Khi nu mt i tng Student c to mi, hu b, hoc cp
nht, th quan h cng s c thit lp tng ng. ng thi, chiu ngc li ca
quan h, Has Students Fa i tng Class cng c tng cp nht.

TH&XD CSDL HT 59 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

Hnh 29: Thit lp quan h hai chiu, kim tra chiu ngc li

0t v d khc kim tra tnh ton vn tham chiu trong CSDL khi thay i
gi tr kho chnh. Xt mt i tng Class, i tng ny c cc thnh vin d liu l
Head Teacher tham chiu n mt i tng Teacher v Monitor tham chiu n mt
i tng Student. Nu i TeacherID ca i tng Teacher, v StudentID ca i
Wng Student th cc gi tr ID tng ng ca Head Teacher v Monitor ca i tng
Class cng s tng c thay i tng ng, hay cc quan h vn c duy tr gia
cc i tng v khng ph thuc vo gi tr kho chnh.

TH&XD CSDL HT 60 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

Hnh 30: Thit lp v kim tra cc quan h

TH&XD CSDL HT 61 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

Chng 5. Tng kt

0c d cn nhiu thiu xt v hn ch, nhng ti cng thu c mt s


Nt qu trong vic Tm hiu v Xy dng CSDL hng i tng. Mt s kt qu
chnh, c th l:
Th nht, ti chng tc CSDL hng i tng l mt vn quan
trng, cn nghin cu, tm hiu k c v t tng v quy trnh, k thut xy dng cc
CSDL hng i tng. Ch ra c cc u Lm ca CSDL hng i tng so vi
CSDL quan h, c bit l trong cc h thng vi cc d liu phc tp.
Th hai, ti a ra mt s cc khi nim c bn, l c s cho vic xy dng
cc CSDL hng i tng. Ngoi ra, ti cng gii thiu c mt sc Lm ca
chun CSDL hng i tng ODMG, hay cc h qun tr CSDL hng i tng
nh ObjectStore PSE Pro.
Th ba, ti xy dng c mt v d, minh ho quy trnh v k thut xy
Gng CSDL hng i tng. Bao gm vic nh ngha, thit k, xy dng CSDL, v
minh ho bng mt chng trnh ng dng c th. Lu ny nhm c th ho mt
minh ho CSDL hng i tng, nhm th hin trc quan v chc t tnh thc t, c
th thc hin c ca CSDL hng i tng cng nh cc li ch m CSDL hng
i tng mang li.
Trn y mi ch l mt s vn khi u ca vic tm hiu v xy dng
CSDL hng i tng. ti cn tip tc c tm hiu su hn c v t tng ln
N thut, cng nh vic p dng CSDL hng i tng vo thc t. Trong tng lai
khng xa, chc chn CSDL hng i tng sc pht trin nhanh chng v c
ng dng rng ri trong cc h thng thng tin, cc chng trnh, phn mm ng
Gng, trong khoa hc cng ngh v ci sng

TH&XD CSDL HT 62 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

Ph lc A

Giao din mt s Form qun l i tng


trong chng trnh ng dng

1. Form Student:

2. Form Teacher:

TH&XD CSDL HT 63 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

TH&XD CSDL HT 64 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

3. Form Class:

4. Form Subject:

TH&XD CSDL HT 65 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

5. Form Mark:

6. Form Department:

TH&XD CSDL HT 66 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

7. Form Search Student:

8. Form Database Browser:

TH&XD CSDL HT 67 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

Ph lc B

M ngun chng trnh ng dng trong VB


Qun l mt si tng

9. Form Student:

Private Sub cmdCreate_Click()


On Error GoTo RB:

If txtStudentID = "" Then


MsgBox "The Student ID can not be empty!"
Exit Sub
End If

If CheckExistedID(txtStudentID) Then
MsgBox "The Student ID has existed, Please use anothe ID"
Exit Sub
End If

Dim aStudent As IStudent


Dim aClass As IClass
Set aClass = getClassHasName(cboClass.Text)

ObjectStore.BeginTrans

Set aStudent = ObjectDB_Server.CreateStudentEmpty(ObjectDB, 1)


With aStudent
.StudentID = OsStr(txtStudentID)

.Name.FirstName = OsStr(txtFirstName)
.Name.MidName = OsStr(txtMidName)
.Name.LastName = OsStr(txtLastName)

.Birthday.Day = OsNumber(txtDay)
.Birthday.Month = OsNumber(txtMonth)
.Birthday.Year = OsNumber(txtYear)

.Gender = OsStr(cboGender.Text)

.Address.DoorNo = OsStr(txtNo)
.Address.Street = OsStr(txtStreet)
.Address.City = OsStr(txtCity)

TH&XD CSDL HT 68 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

.Address.Province = OsStr(txtProvince)
.Phone = OsStr(txtPhone)
.Email = OsStr(txtEmail)

If aClass Is Nothing Then


Else
aStudent.belongToClass = aClass
End If

End With
ObjectStore.CommitTrans

lstStudentRefresh
setSelectedList (aStudent.StudentID)
Exit Sub

RB:
MsgBox "Error: " & Err.Description
ObjectStore.Rollback
End Sub

Private Sub cmdDelete_Click()


On Error GoTo RB
Dim aStudent As IStudent
Set aStudent = getCurrentStudent

ObjectStore.BeginTrans
'aStudent.belongToClass = Nothing
CStudent.GetExtents(ObjectDB).Remove aStudent

ObjectStore.CommitTrans
lstStudentRefresh
Exit Sub

RB:
MsgBox "Error: " & Err.Description
ObjectStore.Rollback
End Sub

Private Sub cmdGetFullName_Click()


Dim aStudent As IStudent
Set aStudent = getCurrentStudent
ObjectStore.BeginTrans
MsgBox aStudent.Name.getFullName
ObjectStore.CommitTrans

TH&XD CSDL HT 69 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

End Sub

Private Sub cmdRefresh_Click()


lstStudentRefresh
End Sub

Private Sub cmdShowMark_Click()


Dim aForm As New treeHasMarks
aForm.Show

Dim aStudent As IStudent


Set aStudent = getCurrentStudent

aForm.lblTitle = aStudent.StudentID
aForm.TreeRefresh aStudent.hasMarks
End Sub

Private Sub cmdUpdate_Click()


Dim aStudent As IStudent
Set aStudent = getCurrentStudent

Dim aClass As IClass


Set aClass = getClassHasName(cboClass.Text)

On Error GoTo RB
ObjectStore.BeginTrans

With aStudent
.StudentID = OsStr(txtStudentID)

.Name.FirstName = OsStr(txtFirstName)
.Name.MidName = OsStr(txtMidName)
.Name.LastName = OsStr(txtLastName)

.Birthday.Day = OsNumber(txtDay)
.Birthday.Month = OsNumber(txtMonth)
.Birthday.Year = OsNumber(txtYear)

.Gender = OsStr(cboGender.Text)

.Address.DoorNo = OsStr(txtNo)
.Address.Street = OsStr(txtStreet)
.Address.City = OsStr(txtCity)
.Address.Province = OsStr(txtProvince)
.Phone = OsStr(txtPhone)

TH&XD CSDL HT 70 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

.Email = OsStr(txtEmail)

If Not aClass Is Nothing Then


aStudent.belongToClass = aClass
End If

End With
ObjectStore.CommitTrans

lstStudentRefresh
setSelectedList (aStudent.StudentID)
Exit Sub

RB:
MsgBox "Error: " & Err.Description
ObjectStore.Rollback
End Sub

Private Sub cmdGetAvgMark_Click()


On Error GoTo er:
Dim aStudent As IStudent
Set aStudent = getCurrentStudent

MsgBox aStudent.getAverageMark, , "Behaviour:


Student.getAverageMark()"
Exit Sub
er:
MsgBox Err.Description
End Sub

Private Sub cmdGetInfo_Click()


On Error GoTo er:
Dim aStudent As IStudent
Set aStudent = getCurrentStudent
ObjectStore.BeginTrans
MsgBox aStudent.getInfo, , "Behaviour: Student.getInfo()"
ObjectStore.CommitTrans
Exit Sub
er:
MsgBox Err.Description
End Sub

Private Sub Form_Load()

lstStudentRefresh

TH&XD CSDL HT 71 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

ObjectDB.SetUndoMarker
End Sub

Private Sub lstStudent_Click()


loadStudentInfo getCurrentStudent

End Sub

Public Function lstStudentRefresh()


On Error GoTo er
cboClass.Clear
ObjectStore.BeginTrans
Dim aClass As IClass
For Each aClass In CClass.GetExtents(ObjectDB)
cboClass.AddItem (aClass.Name)
Next
ObjectStore.Rollback

lstStudent.Clear
ObjectStore.BeginTrans
Dim aStudent As IStudent
For Each aStudent In CStudent.GetExtents(ObjectDB)
lstStudent.AddItem (aStudent.StudentID & ": " &
aStudent.Name.FirstName & " " & aStudent.Name.MidName & " " &
aStudent.Name.LastName)
Next
ObjectStore.Rollback

If lstStudent.ListCount = 0 Then
DisableBtn
Else
EnableBtn
lstStudent.ListIndex = 0
End If
loadStudentInfo getCurrentStudent
Exit Function
er:
MsgBox Err.Description
ObjectStore.Rollback
End Function

Private Function loadStudentInfo(aStudent As IStudent)


On Error GoTo EX:
If aStudent Is Nothing Then ClearText

TH&XD CSDL HT 72 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

With aStudent
txtStudentID.Text = .StudentID

txtFirstName = .Name.FirstName
txtMidName = .Name.MidName
txtLastName = .Name.LastName

txtDay = .Birthday.Day
txtMonth = .Birthday.Month
txtYear = .Birthday.Year

cboGender.Text = .Gender

txtNo = .Address.DoorNo
txtStreet = .Address.Street
txtCity = .Address.City
txtProvince = .Address.Province
txtPhone = .Phone
txtEmail = .Email
cboClass.Text = ""
If .belongToClass Is Nothing Then
cboClass.Text = ""
Else
cboClass.Text = aStudent.belongToClass.Name
End If
End With

EX:
End Function

Private Function getCurrentStudent() As IStudent


Dim sID As String
sID = lstStudent.List(lstStudent.ListIndex)
sID = Left$(sID, InStr(1, sID, ":", vbTextCompare) - 1)

Set getCurrentStudent = getStudentHasID(sID)


End Function

Private Function setSelectedList(sID As String)

Dim getID As String


For i = 0 To lstStudent.ListCount - 1
getID = lstStudent.List(i)
getID = Left$(getID, InStr(1, getID, ":", vbTextCompare) - 1)
If getID = sID Then

TH&XD CSDL HT 73 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

lstStudent.Selected(i) = True
Exit For
End If
Next
End Function

Private Sub cmdFirst_Click()


lstStudent.ListIndex = 0
End Sub

Private Sub cmdLast_Click()


lstStudent.ListIndex = lstStudent.ListCount - 1
End Sub

Private Sub cmdNext_Click()


If lstStudent.ListIndex = lstStudent.ListCount - 1 Then
lstStudent.ListIndex = 0
Else
lstStudent.ListIndex = lstStudent.ListIndex + 1
End If
End Sub

Private Sub cmdPrev_Click()


If lstStudent.ListIndex = 0 Then
lstStudent.ListIndex = lstStudent.ListCount - 1
Else
lstStudent.ListIndex = lstStudent.ListIndex - 1
End If
End Sub

Private Sub DisableBtn()


cmdUpdate.Enabled = False
cmdDelete.Enabled = False
End Sub

Private Sub EnableBtn()


cmdUpdate.Enabled = True
cmdDelete.Enabled = True
End Sub

Private Function CheckExistedID(ID As String) As Boolean


CheckExistedID = False

ObjectStore.BeginTrans
Dim aStudent As IStudent

TH&XD CSDL HT 74 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

For Each aStudent In CStudent.GetExtents(ObjectDB)


If aStudent.StudentID = ID Then
CheckExistedID = True
Exit For
End If
Next
ObjectStore.CommitTrans

End Function

Public Sub ClearText()


txtCity.Text = ""
txtDay.Text = ""
txtEmail.Text = ""
txtFirstName.Text = ""
txtLastName.Text = ""
txtMidName.Text = ""
txtMonth.Text = ""
txtNo.Text = ""
txtPhone.Text = ""
txtProvince.Text = ""
txtStreet.Text = ""
txtStudentID.Text = ""
txtYear.Text = ""
cboClass.Clear
cboGender.Clear
End Sub

TH&XD CSDL HT 75 Cao Xun Vinh


Kho lun Tt nghip i hc H Cng Ngh - HQGHN

Ti liu tham kho:

[1]. David W Emplay. Object Database Development, Concepts and


Principles.
[2]. ActiveX Interface for PSE Pro C++. Document, ObjectStore PSE Pro for
C++ 3.0
[3]. ObjectStore PSE Pro for C++ Collections User Guide. Document,
ObjectStore PSE Pro for C++ 3.0
[4]. PSE/PSE Pro for C++ API User Guide. Document, ObjectStore PSE Pro
for C++ 3.0
[5]. PSE/PSE Pro for C++ Building Applications. Document, ObjectStore
PSE Pro for C++ 3.0
[6]. Rapid Database Development for PSE Pro C++. Document, ObjectStore
PSE Pro for C++ 3.0
[7]. Website: http://objectstore.net
[8]. An Vn Minh. Pht trin phn mm ng dng theo m hnh Hng i
Wng. Lun vn tt nghip i hc. H ni 2001.
[9]. Nguyn Th Phi Nga. M hnh C s d liu Hng i tng. Lun vn
Wt nghip i hc. H ni 2002.

TH&XD CSDL HT 76 Cao Xun Vinh

You might also like