Tải bản đầy đủ (.pdf) (138 trang)

QUẢN LÍ HỆ THỐNG THÔNG TIN ĐỊA LÍ

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.51 MB, 138 trang )


TR姶云NG A萎I H窺C KHOA H窺C T衛 NHIÊN
KHOA CÔNG NGH烏 THÔNG TIN
D浦 MÔN CÔNG NGH烏 PH井N M陰M
& 
NGUY右N TH卯 LÝ - NGUY右N SAO K
永NG D影NG PH井N M陰M MÃ NGU唄N M雲 H烏 QU謂N
TR卯 C愛 S雲 D頴 LI烏U H姶閏NG A渦I T姶営NG PERST
XÂY D衛NG 永NG D影NG QU謂N LÝ H烏 TH渦NG
THÔNG TIN A卯A LÝ THÀNH PH渦 HCM
KHÓA LU一N C盈 NHÂN TIN H窺C
TpHCM, 2005

- 2 -
TR姶云NG A萎I H窺C KHOA H窺C T衛 NHIÊN
KHOA CÔNG NGH烏 THÔNG TIN
D浦 MÔN CÔNG NGH烏 PH井N M陰M
& 
NGUY右N TH卯 LÝ - 0112187
NGUY右N SAO K- 0112186
永NG D影NG PH井N M陰M MÃ NGU唄N M雲 H烏 QU謂N
TR卯 C愛 S雲 D頴 LI烏U H姶閏NG A渦I T姶営NG PERST
XÂY D衛NG 永NG D影NG QU謂N LÝ H烏 TH渦NG
THÔNG TIN A卯A LÝ THÀNH PH渦 HCM
KHÓA LU一N C盈 NHÂN TIN H窺C
GIÁO VIÊN H姶閏NG D郁N
Th.s NGUY右N MINH NAM
NIÊN KHOÁ 2001-2005

- 3 -
N云I C謂M 愛N


Chúng em chân thành cám 挨n Khoa Công ngh羽 Thông tin, tr逢運ng A衣i h丑c
Khoa h丑c T詠 nhiên t衣o 8k隠u ki羽n cho chúng em th詠c hi羽n 8隠 tài lu壱n v<n t嘘t
nghi羽p này.
Chúng em chân thành cám 挨n th亥y Nguy宇n Minh Nam 8ã t壱n tình h逢噂ng
f磯n, ch雨 b違o chúng em trong su嘘t th運i gian th詠c hi羽n 8隠 tài.
Chúng em chân thành cám 挨n quý th亥y cô trong khoa 8ã t壱n tình gi違ng
f衣y, trang b鵜 cho chúng em nh英ng ki院n th泳c quý báu trong nh英ng n<m h丑c
x瑛a qua.
Chúng con xin nói lên lòng bi院t 挨n sâu s逸c 8嘘i v噂i cha m姻, nh英ng ng逢運i
8ã ch<m sóc, nuôi d衣y chúng con thành ng逢運i và luôn 8瓜ng viên tinh th亥n
cho chúng con.
Và cng chân thành cám 挨n các anh ch鵜 và b衣n bè 8ã 栄ng h瓜, giúp 8叡, trao
8鰻i ki院n th泳c, kinh nghi羽m và 8瓜ng viên chúng em trong th運i gian h丑c t壱p và
nghiên c泳u.
O員c dù chúng em 8ã c嘘 g逸ng hoàn thành lu壱n v<n trong ph衣m vi và kh違
p<ng cho phép nh逢ng ch逸c ch逸n s胤 không tránh kh臼i nh英ng sai sót. Chúng
em kính mong nh壱n 8逢嬰c s詠 c違m thông và t壱n tình ch雨 b違o c栄a quý th亥y cô
và các b衣n.
Tp.H欝 Chí Minh, tháng 7 n<m 2005
Nguy宇n Th鵜 Lý – 0112187
Nguy宇n Sao K - 0112186

- 4 -
TÓM T溢T LU一N V;N
Lu壱n v<n 8逢嬰c t鰻 ch泳c thành các ph亥n chính nh逢 sau:
Ch逢挨ng 1: Gi噂i thi羽u t亥m quan tr丑ng, m映c tiêu, ph衣m vi c栄a 8隠 tài, các c挨 s荏 lý
thuy院t và h逢噂ng ti院p c壱n.
Ch逢挨ng 2: Cách t鰻 ch泳c c挨 s荏 d英 li羽u h逢噂ng 8嘘i t逢嬰ng PERST và nh英ng so
sánh v噂i các cách t鰻 ch泳c c挨 s荏 d英 li羽u quan h羽 và các h羽 c挨 s荏 d英 li羽u h逢噂ng
8嘘i t逢嬰ng khác.

Ch逢挨ng 3: Gi噂i thi羽u v隠 mô hình Topology: nêu lên nh英ng khái ni羽m c挨 b違n,
các 8嘘i t逢嬰ng trong Topology và các c医p Topology.
Ch逢挨ng 4: Gi噂i thi羽u v隠 GIS: gi噂i thi羽u t鰻ng quan v隠 GIS, các gi違i pháp và 泳ng
f映ng v隠 GIS và 泳ng d映ng GIS trên PocketPC
Ch逢挨ng 5: Gi噂i thi羽u v隠 chu育n OpenGIS
Ch逢挨ng 6: T鰻ng quan v隠 PocketPC: Các v医n 8隠 và gi違i pháp trên thi院t b鵜. Tình
tr衣ng b瓜 nh噂, t衣o c挨 s荏 d英 li羽u và 泳ng d映ng b違n 8欝 trên PocketPC.
Ch逢挨ng 7: 永ng d映ng b違n 8欝: mô hình phân tích thi院t k院.
Ch逢挨ng 8: K院t lu壱n, 8ánh giá và h逢噂ng phát tri吋n
Ch逢挨ng 9: Nh英ng tài li羽u tham kh違o khi th詠c hi羽n 8隠 tài
Ch逢挨ng 10:Nêu nh英ng thu壱t toán chính trong ch逢挨ng trình

- 5 -
O影C L影C
N云I C謂M 愛N 3
TÓM T溢T LU一N V;N 4
DANH SÁCH CÁC HÌNH 8
DANH SÁCH CÁC B謂NG 10
O浦T S渦 KHÁI NI烏M, THU一T NG頴 VÀ T洩 VI蔭T T溢T 11
CH姶愛NG 1 : Hi羽n tr衣ng và yêu c亥u 15
1.1 Hi羽n tr衣ng: 15
1.2 Gi違i quy院t bài toán: 16
CH姶愛NG 2 : T鰻ng quan v隠 Perst 17
2.1 Gi噂i thi羽u: 17
2.2 A員c tính: 18
2.2.1 Persistency by reachability: 18
2.2.2 Semi transparent object loading: 21
2.2.3 Automatic scheme evaluation 23
2.2.4 Relation: 24
2.2.5 Index: 25

2.2.6 Giao tác (Transaction): 29
2.3 Transparent API: 31
2.3.1 Dùng.NET Remoting API: 31
2.3.2 Dùng các thu瓜c tính 違o (virtual properties): 32
2.4 C挨 ch院 th詠c hi羽n giao tác (Transaction): 33
2.5 Nh英ng tr逢運ng h嬰p nên dùng PERST: 37
2.6 Các thông s嘘 c栄a PERST: 38
2.7 S挨 l逢嬰c v隠 RTree: 44
2.7.1 Gi噂i thi羽u: 44
2.7.2 S挨 l逢嬰c v隠 d英 li羽u không gian (spatial data) và các gi違i pháp: 44
2.8 So sánh v噂i các h羽 qu違n tr鵜 c挨 s荏 d英 li羽u h逢噂ng 8嘘i t逢嬰ng khác: 45
CH姶愛NG 3 : Gi噂i thi羽u v隠 mô hình Topology 50
3.1 Gi噂i thi羽u: 50
3.2 Các khái ni羽m c挨 b違n trong Topology: 50
3.3 Các lo衣i 8嘘i t逢嬰ng trong Topology: 51
3.4 Các c医p c栄a Topology: 53

- 6 -
3.5 MBR – Minimum Bounding Rectangle: 59
CH姶愛NG 4 : Gi噂i thi羽u v隠 GIS 60
4.1 Gi噂i thi羽u v隠 các 泳ng d映ng và gi違i pháp v隠 GIS: 60
4.2 Mô hình d英 li羽u c栄a thông tin 8鵜a lý: 61
4.3 Thu th壱p d英 li羽u: 64
4.4 Các gi違i thu壱t nghiên c泳u v隠 GIS: 66
4.5 Các c医u trúc d英 li羽u không gian trong GIS: 67
4.5.1 Cây t泳 phân (Quad Tree): 67
4.5.2 k-d Tree: 68
4.5.3 R-Tree: 69
4.5.4 R*-Tree: 70
4.5.5 R

+
-Tree: 71
4.6 永ng d映ng b違n 8欝: 72
4.6.1 Các ki吋u b違n 8欝: 72
4.6.2 Các 8嘘i t逢嬰ng c栄a b違n 8欝: 72
4.7 永ng d映ng GIS trên PocketPC: 73
CH姶愛NG 5 : Gi噂i thi羽u v隠 chu育n OpenGIS 75
5.1 Các ki吋u d英 li羽u hình h丑c c栄a OpenGIS: 75
5.2 OpenGIS Specification (8員c t違 OpenGIS): 76
5.2.1 Các khái ni羽m: 76
5.2.2 Nh英ng d鵜ch v映 OpenGIS (OpenGIS Services ): 78
5.2.3 M瓜t mô hình nh英ng c瓜ng 8欝ng thông tin (Information Communities Model ): 79
5.2.4 A員c 8k吋m: 79
5.2.5 Phân lo衣i: 81
5.3 OpenGIS Abstract Specification: 82
5.3.1 Essential Model (mô hình b違n ch医t ): 83
5.3.2 Abstract Model: 85
CH姶愛NG 6 : T鰻ng quan v隠 PocketPC 89
6.1 T鰻ng quan v隠 PocketPC: 89
6.2 Kh違 n<ng l壱p trình trên PocketPC: 89
6.3 M瓜t s嘘 v医n 8隠 khi l壱p trình 泳ng d映ng trên PocketPC: 89
6.3.1 T嘘c 8瓜 và các h厩 tr嬰 kh違 n<ng hi吋n th鵜
:
89
6.3.2 Kh違 n<ng và hình th泳c l逢u tr英
:
90
6.3.3 T逢挨ng tác gi英a ng逢運i s穎 d映ng và thi院t b鵜
:
91

6.4 Các gi違i pháp cho 泳ng d映ng b違n 8欝 trên PocketPC: 92
6.4.1 Yêu c亥u chung: 92

- 7 -
6.4.2 V医n 8隠 t嘘i 逢u t嘘c 8瓜 hi吋n th鵜
:
93
6.5 T鰻 ch泳c d英 li羽u b違n 8欝 trên PocketPC: 93
CH姶愛NG 7 : 永ng d映ng b違n 8欝: 95
7.1 Phân tích và xác 8鵜nh yêu c亥u: 95
7.2 Phân tích - thi院t k院: 96
7.2.1 S挨"8欝 s穎 d映ng: 96
7.2.2 A員c t違 Use-Case chính: 97
7.2.2.1 Tìm ki院m 8逢運ng 8i: 97
7.2.2.2 Tìm ki院m Region: 98
7.2.2.3 Tìm 8逢運ng 8i ng逸n nh医t: 99
7.2.2.4 Tìm chu trình t嘘i 逢u: 101
7.2.3 S挨"8欝 l噂p Class Diagram: 102
7.2.3.1 S挨"8欝 t鰻ng quát: 102
7.2.3.2 S挨"8欝 l噂p d英 li羽u: 103
7.2.3.3 S挨"8欝 l噂p v胤: 103
7.2.3.4 S挨"8欝 s詠 ki羽n: 104
7.2.4 Mô t違 các l噂p: 104
7.2.5 Các l逢u 8欝 ho衣t 8瓜ng: 111
7.3 Thi院t k院 giao di羽n: 124
7.3.1 Giao di羽n trên Desktop: 124
7.3.2 Giao di羽n trên PocketPC: 131
7.4 Cài 8員t: 131
CH姶愛NG 8 : K院t Lu壱n, Aánh giá và h逢噂ng phát tri吋n 132
8.1 K院t lu壱n, 8ánh giá: 132

8.2 H逢噂ng phát tri吋n: 132
CH姶愛NG 9 : Tài li羽u tham kh違o 133
CH姶愛NG 10 : Ph映 l映c 134
10.1 Bài toán tìm 8逢運ng 8i ng逸n nh医t gi英a hai 8k吋m: 134
10.1.1 Phát bi吋u bài toán: 134
10.1.2 Gi違i quy院t bài toán: 134
10.2 Bài toán tìm chu trình t嘘i 逢u 136
10.2.1 Phát bi吋u bài toán 136
10.2.2 Gi違i quy院t bài toán: 137

- 8 -
DANH SÁCH CÁC HÌNH
Hình 3.2-1 Các 8嘘i t逢嬰ng trong mô hình Topology 51
Hình 3.4-1 Quan h羽 Topology c医p 0 56
Hình 3.4-2 Quan h羽 Topology c医p 1 và 2 57
Hình 3.4-3 Quan h羽 Topology c医p 3 58
Hình 4.2-1 Thông tin c亥n l逢u tr英 61
Hình 4.2-2 So sánh Raster và Vector 64
Hình 4.3-1 Ph逢挨ng pháp Scanning 65
Hình 4.5.1-1 Cây t泳 phân 67
Hình 4.5.2-1 K-D Tree 68
Hình 4.5.3-1 R-Tree 69
Hình 4.5.5-1 R+-Tree 71
Hình 4.6.2-1 Các 8嘘i t逢嬰ng chính trong b違n 8欝 73
Hình 5.1-1 H羽 phân c医p các ki吋u d英 li羽u hình h丑c c栄a OpenGIS. 76
Hình 5.3.1-1 L噂p khái ni羽m 85
Hình 7.2.1-1 S挨"8欝 s穎 d映ng t鰻ng quát 96
Hình 7.2.2.1-1 Use Case - Tìm ki院m Edge 97
Hình 7.2.2.2-1 Use Case: Tìm ki院m Region 98
Hình 7.2.2.3-1 Use Case – Tìm 8逢運ng 8i ng逸n nh医t 99

Hình 7.2.2.4-1 Use-Case - Tim chu trình t嘘i 逢u 101
Hình 7.2.3.1-1 S挨"8欝 t鰻ng quát 102
Hình 7.2.3.2-1 S挨 l噂p d英 li羽u 103
Hình 7.2.3.3-1 S挨"8欝 l噂p v胤 103
Hình 7.2.3.4-1 S挨"8欝 s詠 ki羽n 104
Hình 7.2.4-1 L噂p CNode 106
Hình 7.2.4-2 L噂p CEdge 109
Hình 7.2.5-1 Sequense Diagram: Hi吋n th鵜 b違n 8欝 112
Hình 7.2.5-2 Collabration Diagram: Hi吋n th鵜 b違n 8欝 113
Hình 7.2.5-3 Sequence Diagram: Tìm 8逢運ng ng逸n nh医t 113
Hình 7.2.5-4 Collabration Diagram: Tìm 8逢運ng ng逸n nh医t 114
Hình 7.2.5-5 Sequence Diagram: Tìm Edge 115
Hình 7.2.5-6 Collabration Diagram: Tìm Edge 116
Hình 7.2.5-7 Sequence Diagram: Tìm chu trình t嘘i 逢u 117
Hình 7.2.5-8 Collabrotion Diagram: Tìm chu trình t嘘i 逢u 118
Hình 7.2.5-9 Sequence Diagram: D鵜ch chuy吋n vùng nhìn 119

- 9 -
Hình 7.2.5-10 Collabrotion Diagram: Di chuy吋n vùng nhìn 120
Hình 7.2.5-11 Sequence Diagram: T雨 l羽 l衣i b違n 8欝 120
Hình 7.2.5-12 Collaboration Diagram: T雨 l羽 l衣i b違n 8欝 121
Hình 7.2.5-13 Sequence Diagram: Tìm 8鵜a 8k吋m 121
Hình 7.2.5-14 Collaboration Diagram: Tìm 8鵜a 8k吋m 122
Hình 7.2.5-15 Sequence Diagram: Tìm giao l瓜 123
Hình 7.2.5-16 Collaboration Diagram: Tìm giao l瓜 123
Hình 7.3.1-1 Khung nhìn t鰻ng quát v隠 giao di羽n 124
Hình 7.3.1-2 Toolbar c栄a ch逢挨ng trình 124
Hình 7.3.1-3 Các ch泳c n<ng chính trên thanh công c映 127
Hình 7.3.1-4 Thanh th詠c 8挨n File 128
Hình 7.3.1-5 Thanh th詠c 8挨n View 128

Hình 7.3.1-6 Khung nhìn b違n 8欝 thu nh臼 130
Hình 7.3.1-7 Khung Layer 130
Hình 7.3.1-8 Khung hi吋n th鵜 thông tin 8嘘i t逢嬰ng 131

- 10 -
DANH SÁCH CÁC B謂NG
D違ng 2.2.4-1 Các m嘘i quan h羽 gi英a 2 l噂p A va B 25
D違ng 2.2.5-1 Các ki吋u Index 8逢嬰c PERST h厩 tr嬰: 29
D違ng 2.6-1 H茨ng s嘘"8逢嬰c 8鵜nh ngha s印n trong l噂p StorageImpl 42
D違ng 2.8-1 So sánh các 8員c tính c栄a các h羽 qu違n tr鵜 47
D違ng 2.8-2 B違ng so sánh k院t qu違 c栄a các h羽 qu違n tr鵜 c挨 s荏 d英 li羽u h逢噂ng 8嘘i t逢嬰ng 49
D違ng 3.4-1 Các c医p Topology trong các l噂p VPF 55
D違ng 3.4-2 Các c瓜t 8逢嬰c yêu c亥u 8吋"8鵜nh ngha quan h羽 Topology trong VPF 56
D違ng 3.5-1. A鵜nh ngha khung ch英 nh壱t nh臼 nh医t MBR 59
D違ng 4.2-1 B違ng so sánh ki吋u d英 li羽u Raster va Vector 64
D違ng 7.1-1 Các ch泳c n<ng chính 96
D違ng 7.2.4-1 L噂p CDatabase 105
D違ng 7.2.4-2 L噂p CMapView 105
D違ng 7.2.4-3 L噂p CMapEvent 106
D違ng 7.2.4-4 Thu瓜c tính l噂p CNode 107
D違ng 7.2.4-5 Ph逢挨ng th泳c l噂p CNode 108
D違ng 7.2.4-6 Thu瓜c tính l噂p CEdge 110
D違ng 7.2.4-7 Ph逢挨ng th泳c l噂p CEdge 111
D違ng 7.3.1-1 Các ch泳c n<ng chính trên thanh th詠c 8挨n 129

- 11 -
O浦T S渦 KHÁI NI烏M, THU一T NG頴 VÀ T洩 VI蔭T T溢T
Khái ni羽m A鵜nh ngha Ghi chú
OODBMS (Object-
Oriented Database

Management System)
J羽 qu違n tr鵜 c挨 s荏 d英 li羽u
j逢噂ng 8嘘i t逢嬰ng
PERST
Là m瓜t h羽 qu違n tr鵜 c挨 s荏
f英 li羽u h逢噂ng 8嘘i t逢嬰ng
Nhúng - -Embedded
Có ngha là PERST 8逢嬰c
tích h嬰p ch員t vào ch逢挨ng
trình, g亥n nh逢 kho違ng
cách gi英a database và
ch逢挨ng trình r医t nh臼,
PERST tr詠c ti院p l逢u d英
li羽u trong các 8嘘i t逢嬰ng
e栄a ch逢挨ng trình và
không c亥n có nh英ng 8q衣n
mã làm công vi羽c chuy吋n
f英 li羽u t瑛 c挨 s荏 d英 li羽u
thành 8嘘i t逢嬰ng và ng逢嬰c
n衣i
Topology
Là c医u trúc cho mô hình
o衣ng l逢噂i giao thông
GIS ( Geography J羽 th嘘ng thông tin 8鵜a

- 12 -
Information System )
lý. Là m瓜t công ngh羽
f詠a trên máy tính 8吋 xây
f詠ng b違n 8欝, phân tích

và x穎 lý các 8嘘i t逢嬰ng
v欝n t衣i và các s詠 ki羽n
z違y ra trên trái 8医t.
Thông tin không gian
Thông tin v隠 nh英ng 8員c
8k吋m liên quan 8院n hình
f衣ng, v鵜 trí, quan h羽 c栄a
các 8嘘i t逢嬰ng 8鵜a lý.
Bao g欝m hai d衣ng:
̋
F衣ng hình h丑c:
mô t違 các 8員c 8k吋m
hình d衣ng, v鵜 trí. Ví
f映 nh逢 t丑a 8瓜 c栄a
8k吋m, 8逢運ng…
̋
D衣ng Topology:
mô t違 quan h羽 gi英a
các 8嘘i t逢嬰ng hình
j丑c. Ví d映 nh逢
nh英ng vùng nào k隠
x噂i m瓜t vùng xác
8鵜nh.
Thông tin phi không gian
( thông tin thu瓜c tính )
Thông tin v隠 nh英ng 8員c
8k吋m liên quan 8院n th嘘ng
kê, thông tin s嘘, thông
tin 8員c tr逢ng gán cho
o厩i thu瓜c tính c栄a 8嘘i

Ví d映 nh逢 tên 8逢運ng
ph嘘, dân s嘘…

- 13 -
v逢嬰ng
PDA ( Personal Digital
Assistant )
Thi院t b鵜" 8k羽n t穎 h厩 tr嬰
cá nhân, giúp ng逢運i s穎
f映ng l逢u tr英 các thông
tin cá nhân, công vi羽c
e亥n thi院t cng nh逢 các
ph亥n m隠m t嘘i thi吋u trên
o瓜t thi院t b鵜 nh臼 g丑n
Pocket PC
Khái ni羽m này có th吋
dùng 8吋 ch雨:
+ H羽" 8k隠u hành
nhúng Pocket PC do
Microsoft phát tri吋n
f詠a trên nhân c栄a H羽
8k隠u hành Windows
CE
+ Các thi院t b鵜
PDA s穎 d映ng h羽"8k隠u
hành Pocket PC
Edge
A嘘i t逢嬰ng c衣nh trong mô
hình Topology
Trong bài, Edge t逢挨ng

8逢挨ng v噂i 8逢運ng. Khi nh逸c
v噂i Edge, hay 8逢運ng có th吋
hi吋u ngha nh逢 nhau.

- 14 -
Region A嘘i t逢嬰ng vùng
荏" 8ây không 8隠 c壱p 8院n
qu壱n huy羽n nh逢ng có th吋
hi吋u Region là qu壱n huy羽n.
ID A鵜nh danh c栄a 8嘘i t逢嬰ng
Trong bài không nh逸c t噂i
tên 8逢運ng, qu壱n huy羽n mà
ch雨 nh逸c t噂i ID vì c挨 s荏 d英
li羽u không 8栄 thông tin tên
8逢運ng. Và khi nh逸c t噂i tên
e栄a 8嘘i t逢嬰ng b医t k thì
hi吋u là ID.

- 15 -
CH姶愛NG 1 :
Hi羽n tr衣ng và yêu c亥u
1.1 Hi羽n tr衣ng:
Trên th院 gi噂i hi羽n nay 8ã có nhi隠u ph亥n m隠m gi違i quy院t các bài toán v隠
d違n 8欝 giao thông nh逢: RouteSmart, BusStops, Arclogistics, Routronic 2000,
DynaRoute…雲 Vi羽t Nam nói riêng cng có m瓜t s嘘 công ty nh逢 DolSoft, Hài
Hoà, … 8ã có m瓜t s嘘 s違n ph育m v隠 GIS nh逢 Street Finder, SmartMap…. Các
u違n ph育m trên 8a ph亥n s穎 d映ng c挨 s荏 d英 li羽u 8逢嬰c t鰻 ch泳c trên các h羽 qu違n
tr鵜 c挨 s荏 d英 li羽u quan h羽 ho員c t詠 t衣o. Tuy nhiên v磯n có v医n 8隠"8逢嬰c 8員t ra:
1.Chi phí c栄a càc h羽 qu違n tr鵜 c挨 s荏 d英 li羽u th逢挨ng m衣i n院u có dùng.
2.S詠 khó kh<n và có khi là “r逸c r嘘i” trong cách l壱p trình giao ti院p v噂i các

e挨 s荏 d英 li羽u ph泳c t衣p có nhi隠u b違ng, quan h羽…
Th壱t ra, hai v医n 8隠 trên có th吋"8逢嬰c gi違i quy院t t逢挨ng 8嘘i t嘘t b茨ng cách s穎
f映ng h羽 qu違n tr鵜 c挨 s荏 d英 li羽u h逢噂ng 8嘘i t逢嬰ng PERST (mã ngu欝n m荏).
PERST là m瓜t h羽 c挨 s荏 d英 li羽u t逢挨ng 8嘘i nh臼 (so v噂i các h羽 c挨 s荏 d英 li羽u
khác) v噂i ph亥n lõi ch雨 g欝m kho違ng 5000 dòng mã. Yêu c亥u c医u hình c栄a
PERST t逢挨ng 8嘘i th医p. H挨n n英a, PERST cng không c亥n 8院n “s詠 qu違n tr鵜”
th逢運ng th医y 荏 các h羽 c挨 s荏 d英 li羽u. M員c dù 8挨n gi違n nh逢 v壱y nh逢ng PERST
x磯n h厩 tr嬰"8亥y 8栄 tính ACID trong vi羽c th詠c hi羽n giao tác (transaction) và h厩
tr嬰 vi羽c ph映c h欝i (recovery) t逢挨ng 8嘘i nhanh khi h羽 th嘘ng g員p s詠 c嘘.
Không ch雨 d瑛ng l衣i 荏"8ó mà PERST có h厩 tr嬰 c違 vi羽c phát tri吋n trên môi
tr逢運ng compact.NET framework nên có kh違 n<ng phát tri吋n 泳ng d映ng trên
các thi院t b鵜 di 8瓜ng dùng WinCE hay PocketPC.

- 16 -
Vì v壱y, ta có th吋 th医y vi羽c dùng PERST 8吋 gi違i quy院t bài toán v隠 qu違n lý
j羽 th嘘ng thông tin 8鵜a lý (GIS) là hoàn toàn kh違 thi.
1.2 Gi違i quy院t bài toán:
O瓜t trong các y院u t嘘 quan tr丑ng quy院t 8鵜nh s詠 thành công hay th医t b衣i c栄a
o瓜t h羽 th嘘ng thông tin 8鵜a lí là vi羽c l詠a ch丑n mô hình c医u trúc d英 li羽u thích
j嬰p, cho phép l逢u tr英 và khai thác thông tin m瓜t cách hi羽u qu違. Và mô hình
Topology th吋 hi羽n t嘘t nh英ng 8òi h臼i trên (Mô hình này s胤"8逢嬰c 8隠 c壱p sau
trong lu壱n v<n). Vì d英 li羽u Topology trên PERST không có s印n nên chúng ta
e亥n xây d詠ng l衣i d英 li羽u theo mô hình Topology. D英 li羽u thô (d英 li羽u ngu欝n)
8逢嬰c dùng trong 泳ng d映ng này là các t壱p tin text.
Bài toán s胤"8逢嬰c gi違i quy院t ch栄 y院u b茨ng s詠 ph嘘i h嬰p các ki院n th泳c v隠
GIS,PERST và 8欝 ho衣.

- 17 -
CH姶愛NG 2 :
V鰻ng quan v隠 PERST

2.1 Gi噂i thi羽u:
PERST là m瓜t h羽 c挨 s荏 d英 li羽u “nhúng” dành cho các 泳ng d映ng c亥n tính
p<ng l逢u tr英. PERST 8逢嬰c thi院t k院 dành riêng cho l壱p trình và không có giao
di羽n 8欝 h丑a 8吋 qu違n tr鵜. Vi羽c s穎 d映ng PERST khá 8挨n gi違n và 8衣t 8逢嬰c hi羽u
p<ng t逢挨ng 8嘘i cao. A員c 8k吋m chính d宇 th医y nh医t c栄a PERST là s詠 tích h嬰p
ch員t ch胤 c栄a PERST v噂i m瓜t ngôn ng英 l壱p trình xác 8鵜nh. Hi羽n t衣i PERST
ch雨 h厩 tr嬰 cho 2 ngôn ng英 l壱p trình là Java và C#.
Không gi嘘ng v噂i các h羽 qu違n tr鵜 c挨 s荏 d英 li羽u h逢噂ng 8嘘i t逢嬰ng khác
(OODBMSes), PERST không c亥n dùng 8院n các b瓜 biên d鵜ch hay các b瓜 ti隠n
z穎 lý 8員c bi羽t khác. Nh逢 v壱y, PERST có kh違 n<ng cung c医p 8逢嬰c “tính trong
su嘘t” trong l壱p trình 荏 m泳c 8瓜 cao. Các hàm API c栄a PERST ti羽n l嬰i, d宇 s穎
f映ng và có t嘘c 8瓜 cao. Có th吋 l医y ví d映 khi so sánh v噂i Ozone (m瓜t h羽 c挨 s荏
f英 li羽u h逢噂ng 8嘘i t逢嬰ng khác vi院t b茨ng Java). V噂i gi噂i h衣n (benchmark)
007, PERST t衣o database nhanh g医p 100 l亥n và th詠c hi羽n phép duy羽t qua các
8嘘i t逢嬰ng trong c挨 s荏 d英 li羽u nhanh g医p 10 l亥n so v噂i Ozone. Và khi so v噂i
o瓜t h羽 c挨 s荏 d英 li羽u h逢噂ng 8嘘i t逢嬰ng th逢挨ng m衣i khác là ObjectStore PSE
Pro, PERST nhanh h挨n g医p 4 l亥n.
PERST là m瓜t h羽 c挨 s荏 d英 li羽u t逢挨ng 8嘘i nh臼 (so v噂i các h羽 c挨 s荏 d英 li羽u
khác) v噂i ph亥n lõi ch雨 g欝m kho違ng 5000 dòng mã. Yêu c亥u c医u hình c栄a
PERST t逢挨ng 8嘘i th医p. H挨n n英a, PERST cng không c亥n 8院n “s詠 qu違n tr鵜”
th逢運ng th医y 荏 các h羽 c挨 s荏 d英 li羽u. M員c dù 8挨n gi違n nh逢 v壱y nh逢ng PERST
x磯n h厩 tr嬰"8亥y 8栄 tính ACID trong vi羽c th詠c hi羽n giao tác (transaction) và h厩
tr嬰 vi羽c ph映c h欝i (recovery) t逢挨ng 8嘘i nhanh khi h羽 th嘘ng g員p s詠 c嘘.

- 18 -
Có hai b違n cài 8員t c栄a PERST, m瓜t b茨ng ngôn ng英 Java và m瓜t b茨ng C#.
D違n cài 8員t trên C# 8逢嬰c chuy吋n t瑛 Java dùng b瓜 chuy吋n 8鰻i Java sang C#
(m員c dù ph違i có nhi隠u thay 8鰻i c亥n th詠c hi羽n m噂i có 8逢嬰c b違n hoàn ch雨nh).
O員c dù b違n cài 8員t dùng C# h厩 tr嬰 nhi隠u ki吋u “nguyên th栄y” h挨n (g欝m có
ki吋u s嘘 nguyên không d医u và ki吋u li羽t kê (enum)) nh逢ng trong các ph逢挨ng

di羽n khác, các tính n<ng c栄a hai b違n là nh逢 nhau. Riêng PERST.NET có h厩
tr嬰 c違 vi羽c phát tri吋n trên môi tr逢運ng compact.NET framework nên có kh違
p<ng phát tri吋n 泳ng d映ng trên các thi院t b鵜 di 8瓜ng dùng WinCE hay
PocketPC.
2.2 A員c tính:
Trong ph亥n này chúng ta s胤" 8i vào các tính ch医t quan tr丑ng nh医t c栄a
PERST. C映 th吋 chúng ta s胤 tìm hi吋u phiên b違n cài 8員t trên môi tr逢運ng.NET
(g丑i t逸t là PERST.NET). 雲"8ây các tính ch医t có t瑛 nguyên g嘘c ti院ng Anh s胤
8逢嬰c gi英 nguyên do không có t瑛 ti院ng Vi羽t thay th院 ng逸n g丑n mà 8úng
ngha
2.2.1 Persistency by reachability:
Trong 泳ng d映ng dùng PERST, m丑i 8嘘i t逢嬰ng c栄a các l噂p 8逢嬰c d磯n xu医t t瑛
n噂p Persistent"8隠u có kh違 n<ng l逢u tr英 (persistent hay còn d鵜ch là b隠n v英ng).
M吋 t瑛 bây gi運, ta s胤 g丑i t逸t các 8嘘i t逢嬰ng này là các 8嘘i t逢嬰ng persistent. Các
8嘘i t逢嬰ng này 8逢嬰c t詠"8瓜ng l逢u vào database khi nó 8逢嬰c tham chi院u t瑛 m瓜t
8嘘i t逢嬰ng persistent khác và ph逢挨ng th泳c store c栄a 8嘘i t逢嬰ng khác 8ó 8逢嬰c
i丑i. Có ngha là ta không c亥n ph違i g丑i tr詠c ti院p, t逢運ng minh ph逢挨ng th泳c
store c栄a m瓜t 8嘘i t逢嬰ng khi mu嘘n l逢u 8嘘i t逢嬰ng 8ó.

- 19 -
Database có m瓜t 8嘘i t逢嬰ng 8員c bi羽t g丑i là root. A嘘i t逢嬰ng root này là 8嘘i
v逢嬰ng duy nh医t 8逢嬰c truy xu医t m瓜t cách 8員c bi羽t (dùng ph逢挨ng th泳c
Storage.getRoot). Còn các 8嘘i t逢嬰ng persistent khác 8逢嬰c truy xu医t theo
cách bình th逢運ng: ho員c truy xu医t b茨ng tham chi院u t瑛 các 8嘘i t逢嬰ng persistent
nh逢 trên ho員c truy xu医t b茨ng cách dùng các 8嘘i t逢嬰ng bao ch泳a (container
class) nh逢 Index,Link hay Relation. Không gi嘘ng nh逢 các h羽 c挨 s荏 d英 li羽u
j逢噂ng 8嘘i t逢嬰ng khác, ch雨 có th吋 có duy nh医t m瓜t 8嘘i t逢嬰ng root trong c挨 s荏
f英 li羽u.
PERST yêu c亥u m厩i l噂p persistent"8隠u ph違i d磯n xu医t t瑛 l噂p Persistent. Có
ngha là các l噂p “ngo衣i lai” (không d磯n xu医t t瑛 l噂p Persistent) không th吋

8逢嬰c l逢u trong database. Aây chính là cái giá ph違i tr違 c栄a s詠"8挨n gi違n và
không dùng 8院n các b瓜 biên d鵜ch hay ti隠n x穎 lý 8員c bi羽t. Và các thành ph亥n
e栄a các l噂p persistent cng b鵜 gi噂i h衣n trong các ki吋u sau:
Ki吋u vô h逢噂ng
(scalar type):
Bool, int, short, double, enum …
Ki吋u chu厩i
: Ki吋u System.String.
Ki吋u ngày tháng
: Ki吋u System.DateTime.
Ki吋u tham chi院u 8院n các 8嘘i t逢嬰ng persistent
: các l噂p k院 th瑛a t瑛 l噂p
Persistent hay các giao di羽n (interface) k院 th瑛a t瑛 giao di羽n IPersistent.
Ki吋u giá tr鵜
(value type): Các ki吋u giá tr鵜 c栄a C#. Các giá tr鵜 này
8逢嬰c l逢u tr詠c ti院p trong 8嘘i t逢嬰ng ch泳a chúng.
Ki吋u d英 li羽u nh鵜 phân thô
: Các l噂p c栄a C# k院 th瑛a t瑛 giao di羽n
IPersistent hay t瑛 giao di羽n IValue và 8逢嬰c 8ánh d医u là Serializable. C挨
ch院 Serialization chu育n s胤" 8逢嬰c dùng 8吋" 8óng gói d英 li羽u c栄a các 8嘘i

- 20 -
v逢嬰ng thành các m違ng byte và l逢u chúng vào database. Các l噂p này s胤
8逢嬰c 8ánh d医u là Serializable và không 8逢嬰c ch泳a các tham chi院u 8院n các
8嘘i t逢嬰ng persistent khác.
Ki吋u m違ng
: Các m違ng m瓜t chi隠u v噂i thành ph亥n là các ki吋u d英 li羽u
8逢嬰c nêu trên.
Ki吋u Link
: 8衣i di羽n cho quan h羽 m瓜t-nhi隠u trong mô hình c挨 s荏 d英

li羽u. Hay nhìn theo góc 8瓜 l壱p trình 8ây chính là ki吋u m違ng 8瓜ng ch泳a các
8嘘i t逢嬰ng persistent.
Có m瓜t v医n 8隠 là PERST không t詠 bi院t 8逢嬰c r茨ng li羽u m瓜t 8嘘i t逢嬰ng
persistent nào 8ó 8ã có thay 8鰻i gì ch逢a trong quá trình làm vi羽c. Mu嘘n bi院t
8逢嬰c 8k隠u 8ó ch雨 có cách là ta t詠 so sánh t瑛ng field c栄a tr衣ng thái c và m噂i
x噂i nhau. Nh逢ng nh逢 v壱y chi phí r医t cao. Vì th院 nên trong PERST, l壱p trình
viên hoàn toàn ch鵜u trách nhi羽m v隠 vi羽c l逢u 8嘘i t逢嬰ng nào vào c挨 s荏 d英 li羽u.
Có hai cách trong PERST 8吋 ta có th吋 l逢u m瓜t 8嘘i t逢嬰ng vào c挨 s荏 d英
li羽u:
Cách th泳 nh医t là dùng ph逢挨ng th泳c Persistent.Store
. Ph逢挨ng th泳c này khi
8逢嬰c g丑i b荏i 8嘘i t逢嬰ng nào s胤 l逢u b違n thân 8嘘i t逢嬰ng 8ó và các 8嘘i t逢嬰ng
8逢嬰c tham chi院u t瑛 nó m瓜t cách tr詠c ti院p hay không tr詠c ti院p mà ch逢a 8逢嬰c
n逢u. Có ngha là n院u ta g丑i ph逢挨ng th泳c Store này 8嘘i v噂i 8嘘i t逢嬰ng g嘘c c栄a
o瓜t cây thì l亥n l逢嬰t t医t c違 các 8嘘i t逢嬰ng c栄a cây này s胤"8逢嬰c l逢u xu嘘ng b瓜
nh噂 ph映.
Cách th泳 hai là dùng ph逢挨ng th泳c Persistent.Modify
: Ph逢挨ng th泳c này ch雨
8ánh d医u các 8嘘i t逢嬰ng r茨ng chúng 8ã b鵜 thay 8鰻i ch泳 không l逢u ngay l壱p t泳c
vào database. Cách này 8員c bi羽t h英u d映ng khi 8嘘i t逢嬰ng 8逢嬰c thay 8鰻i nhi隠u

- 21 -
n亥n trong m瓜t giao tác. Lúc 8ó, thao tác ghi 8a ch雨 ph違i th詠c hi羽n m瓜t l亥n
vào cu嘘i giao tác, t<ng hi羽u su医t lên 8áng k吋.
2.2.2 Semi transparent object loading:
Nh逢"8ã 8隠 c壱p 荏 trên, PERST không dùng b医t c泳 b瓜 biên d鵜ch hay ti隠n x穎
lý 8員c bi羽t nào. Và vì C# không cung c医p thông tin v隠 các tr衣ng thái
(behavior) hay s詠 thay 8鰻i tr衣ng thái các 8嘘i t逢嬰ng trong th運i gian th詠c thi
(runtime) nên không th吋 cài 8員t c挨 c医u l逢u tr英 c栄a PERST hoàn toàn “trong
su嘘t” (transparent) 8逢嬰c (ngha là không th吋 truy xu医t các 8嘘i t逢嬰ng 8逢嬰c

n逢u tr英 và không 8逢嬰c l逢u tr英 m瓜t cách hoàn toàn gi嘘ng nhau vì ta không th吋
phân bi羽t 8逢嬰c khi nào ta 8ang truy xu医t vào 8嘘i t逢嬰ng 8逢嬰c l逢u tr英 hay
không 8逢嬰c l逢u tr英). Thay cho s詠 cài 8員t “trong su嘘t” hoàn toàn, PERST 8ã
e嘘 g逸ng cung c医p s詠 “trong su嘘t” trong 8a ph亥n các tr逢運ng h嬰p.
Giao di羽n IPersistent cung c医p cho chúng ta ph逢挨ng th泳c
recursiveLoading. Ph逢挨ng th泳c này m員c 8鵜nh 8逢嬰c cài 8員t b茨ng cách tr違 v隠
(return) giá tr鵜 true. Có ngha là PERST s胤 load (vào b瓜 nh噂 chính) m瓜t cách
8羽 quy các 8嘘i t逢嬰ng 8逢嬰c tham chi院u t瑛 m瓜t 8嘘i t逢嬰ng ngu欝n khi 8嘘i t逢嬰ng
ngu欝n này 8逢嬰c load. Có ngha là c挨 ch院 này s胤 gây ra vi羽c load ng亥m 8鵜nh
toàn b瓜 các 8嘘i t逢嬰ng vào b瓜 nh噂 chính. C挨 ch院 này t逢挨ng t詠 cách làm vi羽c
e栄a c挨 ch院 “chu厩i hóa” (serialization).
A吋 tránh v医n 8隠 tràn b瓜 nh噂 x違y ra khi load 8嘘i t逢嬰ng lên b瓜 nh噂 chính
(do c挨 ch院 recursiveLoading gây ra), chúng ta ph違i quá t違i (overload)
ph逢挨ng th泳c recursiveLoading trong m瓜t vài l噂p b茨ng cách tr違 v隠 (return)
giá tr鵜 false trong hàm. Các 8嘘i t逢嬰ng 8逢嬰c tham chi院u t瑛 các 8嘘i t逢嬰ng
thu瓜c các l噂p 8ã nói trên s胤 không 8逢嬰c load ng亥m 8鵜nh n英a mà ph違i 8逢嬰c

- 22 -
load m瓜t cách t逢運ng minh b茨ng ph逢挨ng th泳c Persistent.Load. V壱y ta th医y
t茨ng ph逢挨ng th泳c recursiveLoading có th吋 dùng 8吋" 8k隠u khi吋n cách th泳c
load các 8嘘i t逢嬰ng t瑛 b瓜 nh噂 ph映 vào b瓜 nh噂 chính.
N逢u ý r茨ng các 8嘘i t逢嬰ng dùng 8吋 ”ch泳a” các 8嘘i t逢嬰ng khác (container
class) nh逢 Link,Relation,Index… ch雨 load các 8嘘i t逢嬰ng mà nó ch泳a khi c亥n
thi院t, không load t医t c違 theo c挨 ch院 recusiveLoading. Ngoài ra, vi羽c truy xu医t
các 8嘘i t逢嬰ng thành ph亥n c栄a m瓜t l噂p ki吋u container" 8隠u thông qua các
ph逢挨ng th泳c c栄a nó.
PERST dùng ph逢挨ng th泳c kh荏i t衣o m員c 8鵜nh (không có tham s嘘) 8吋 kh荏i
v衣o b逢噂c ban 8亥u các 8嘘i t逢嬰ng 8逢嬰c load t瑛 b瓜 nh噂 ph映. Ak隠u này có ngha
là:
1.M丑i l噂p có kh違 n<ng l逢u tr英"8逢嬰c (persistent capable class) 8隠u nên có

ph逢挨ng th泳c kh荏i t衣o m員c 8鵜nh (ho員c là không có ph逢挨ng th泳c kh荏i t衣o nào,
khi 8ó trình biên d鵜ch s胤 t詠 t衣o ra cho ta). Ph逢挨ng th泳c này có th吋 có m丑i t亥m
truy xu医t có th吋"8逢嬰c (public, private,protected … ).
2.Ph逢挨ng th泳c kh荏i t衣o ch雨 kh荏i t衣o nh英ng thành ph亥n không b隠n v英ng,
không c亥n l逢u tr英 (transient) c栄a 8嘘i t逢嬰ng.
3.Ph逢挨ng th泳c kh荏i t衣o m員c 8鵜nh dùng 8吋 t衣o nh英ng th吋 hi羽n c栄a các 8嘘i
v逢嬰ng 8逢嬰c load t瑛 b瓜 nh噂 ph映. V壱y t衣i th運i 8k吋m ph逢挨ng th泳c kh荏i t衣o m員c
8鵜nh ho衣t 8瓜ng các thành ph亥n c栄a 8嘘i t逢嬰ng ch逢a 8逢嬰c gán các giá tr鵜"8逢嬰c
n逢u tr英 trong b瓜 nh噂 ph映. N院u ta mu嘘n các thành ph亥n này cng 8逢嬰c kh荏i
v衣o nh逢 các thành ph亥n transient nói trên, ta c亥n kh荏i t衣o chúng trong hàm
OnLoad, 8逢嬰c g丑i ngay khi các giá tr鵜 trong b瓜 nh噂 ph映"8逢嬰c load lên b瓜
nh噂 chính.

- 23 -
Tóm l衣i, các c挨 ch院 trên cho chúng ta s詠 thu壱n ti羽n, d宇 dàng và m隠m d飲o
trong l壱p trình, vì nó không yêu c亥u l壱p trình viên ph違i load t逢運ng minh các
8嘘i t逢嬰ng trong khi v磯n cho phép vi羽c này, nói cách khác là PERST h厩 tr嬰
n壱p trình viên trong vi羽c ki吋m soát vi羽c load các 8嘘i t逢嬰ng. Ch雨 có các l噂p
“ch泳a” các 8嘘i t逢嬰ng khác là ph違i load t逢運ng minh các 8嘘i t逢嬰ng mà nó
ch泳a (vì các l噂p này 8ã m員c 8鵜nh 8逢嬰c overload ph逢挨ng th泳c
recursiveLoading"8吋 có giá tr鵜 tr違 v隠 (return) false).
2.2.3 Automatic scheme evaluation
PERST h厩 tr嬰 “lazy automatic scheme evaluation”. Khi 8鵜nh ngha c栄a
o瓜t l噂p b鵜 thay 8鰻i (thay 8鰻i v隠 s嘘 l逢嬰ng bi院n thành viên, thay 8鰻i v隠 ki吋u
e栄a bi院n thành viên…), PERST s胤 chuy吋n các 8嘘i t逢嬰ng 8ã 8逢嬰c load sang
8鵜nh d衣ng m噂i. N院u 8嘘i t逢嬰ng 8ó trong quá trình ho衣t 8瓜ng có thay 8鰻i và
e亥n ph違i l逢u, nó s胤"8逢嬰c l逢u d逢噂i d衣ng m噂i. PERST có kh違 n<ng h厩 tr嬰 các
ki吋u thay 8鰻i 8鵜nh d衣ng sau:
1.Các thay 8鰻i “t逢挨ng thích” l磯n nhau gi英a các ki吋u d英 li羽u vô
j逢噂ng (thay 8鰻i mà không c逸t b噂t d英 li羽u). Ví d映 nh逢 thay 8鰻i t瑛 ki吋u int

sang float hay int sang long,… nh逢ng ng逢嬰c l衣i thì không 8逢嬰c.
2.Thay 8鰻i th泳 t詠 các thành ph亥n trong l噂p hay thêm, b噂t các thành
ph亥n trong l噂p này vào l噂p cha hay l噂p d磯n x医t c栄a nó.
3.Thêm vào hay b臼 l噂p kh臼i cây th瑛a k院 c栄a l噂p.
4.Thay 8鰻i 8鵜nh d衣ng c栄a l噂p b茨ng cách thay 8鰻i ý ngha c栄a các
giá tr鵜.
O丑i thay 8鰻i khác trong c医u trúc l噂p (8鰻i tên cho thành ph亥n, chuy吋n ki吋u
không t逢挨ng thích 8嘘i v噂i các thành ph亥n…) 8隠u không 8逢嬰c qu違n lý b荏i c挨

- 24 -
ch院 thay 8鰻i c医u trúc d英 li羽u t詠"8瓜ng c栄a PERST. Trong các tr逢運ng h嬰p này
ta có th吋 dùng c挨 ch院 xu医t nh壱p b茨ng XML c栄a PERST. C挨 s荏 d英 li羽u có th吋
8逢嬰c xu医t ra d衣ng XML b茨ng cách dùng ph逢挨ng th泳c Storage.exportXML,
v衣o l衣i c挨 s荏 d英 li羽u theo 8鵜nh d衣ng m噂i r欝i nh壱p d英 li羽u vào b茨ng ph逢挨ng
th泳c Storage.importXML c栄a PERST.
2.2.4 Relation:
O嘘i quan h羽 m瓜t-m瓜t gi英a các 8嘘i t逢嬰ng trong c挨 s荏 d英 li羽u 8逢嬰c th吋 hi羽n
d茨ng tham chi院u (references) trong C#. Nh逢ng trong nhi隠u tr逢運ng h嬰p chúng
ta c亥n 8院n quan h羽 m瓜t-nhi隠u hay quan h羽 nhi隠u-nhi隠u. PERST cung c医p
giao di羽n (interface) Link dùng cho các tr逢運ng h嬰p này. Giao di羽n này 8逢a ra
các ph逢挨ng th泳c thêm, xóa, tìm ki院m… các thành ph亥n c栄a m瓜t “b瓜”
(relation) các 8嘘i t逢嬰ng persistent. Các thành ph亥n c栄a “b瓜” (relation) này
có th吋" 8逢嬰c truy xu医t b茨ng index hay ta có th吋 chuy吋n chúng thành m瓜t
o違ng 8嘘i t逢嬰ng r欝i m噂i truy xu医t.
T壱p h嬰p (relation) có 2 d衣ng:
1. D衣ng “nhúng” (embedded relation): Các tham chi院u 8院n các 8嘘i
v逢嬰ng t瑛 m瓜t 8嘘i t逢嬰ng 8逢嬰c ch泳a trong chính 8嘘i t逢嬰ng 8ó.
2. D衣ng 8瓜c l壱p (standalone relation): Khi 8ó relation là m瓜t 8嘘i
v逢嬰ng riêng bi羽t, ch泳a các tham chi院u 8院n các 8嘘i t逢嬰ng.
C違 hai d衣ng trên 8隠u cài 8員t giao di羽n Link. C映 th吋 Embedded

relation" 8逢嬰c t衣o b茨ng cách dùng ph逢挨ng th泳c Storage.createLink, còn
Standalone relation thì dùng ph逢挨ng th泳c Storage.createRelation.
B違ng sau 8ây minh h丑a các m嘘i quan h羽 gi英a 2 l噂p A và B:

- 25 -
Ki吋u quan h羽 Object A Object B
O瓜t-m瓜t B bref; A aref;
O瓜t-nhi隠u Link bref; A aref;
Nhi隠u-m瓜t B bref; Link aref;
Nhi隠u-nhi隠u Link bref; Link aref;
D違ng 2.2.4-1 Các m嘘i quan h羽 gi英a 2 l噂p A va B
2.2.5 Index:
Thông th逢運ng 8嘘i t逢嬰ng 8逢嬰c truy xu医t t瑛 m瓜t 8嘘i t逢嬰ng khác b茨ng tham
chi院u hay b茨ng Link nh逢 trên. Tuy nhiên, chúng ta cng c亥n truy xu医t các 8嘘i
v逢嬰ng thông qua khóa. Trong môi tr逢運ng.NET, l噂p Hashtable là m瓜t ví d映
cho vi羽c truy xu医t theo khóa này. A嘘i v噂i c挨 s荏 d英 li羽u, vi羽c truy xu医t 8嘘i
v逢嬰ng theo khóa d nhiên là t逢挨ng 8嘘i ph泳c t衣p. Và vi羽c cài 8員t trong PERST
j鰯n m瓜t ch泳c n<ng d鵜ch các câu truy v医n SQL là không kh違 thi vì nó s胤 làm
cho PERST phình to ra và ch壱m 8i. Tuy nhiên trong ph亥n l噂n tr逢運ng h嬰p,
các 泳ng d映ng ch雨 th詠c hi羽n các l羽nh truy v医n d英 li羽u t逢挨ng 8嘘i 8挨n gi違n nh逢
tìm theo m瓜t khóa chính xác hay trong m瓜t kho違ng giá tr鵜 nào 8ó. Trong
PERST vi羽c này 8逢嬰c th詠c hi羽n b茨ng cách cài 8員t các giao di羽n (interface)
Index và FieldIndex. Giao di羽n Index dùng cho các khóa 8瓜c l壱p và các giá
tr鵜 t逢挨ng 泳ng c栄a khóa 8ó. Còn giao di羽n FieldIndex thì dùng 8吋 l壱p index
cho các 8嘘i t逢嬰ng v噂i khóa chính là m瓜t thành ph亥n c栄a 8嘘i t逢嬰ng.
Index 8逢嬰c t衣o trong PERST b茨ng ph逢挨ng th泳c Storage.createIndex"8嘘i
x噂i Index hay Storage.createFieldIndex" 8嘘i v噂i FieldIndex. Có th吋 có vài
cách cài 8員t Index nh逢ng hi羽n t衣i PERST ch雨 dùng B+Tree 8吋 cài 8員t

×