bab10 database sekretaris bowling dengan rbase5000
DATABASE SEKRETARIS BOWLING DENGAN R:BASE5000
Bab ini berisikan tiga bagian infonnasi dan pembahasan utama: 1. daftar
sampel empat relasi yang menentukan bentuk database sekretaris jika digunakan
R:base 5000; 2. contoh tentang cara kerja perintah-perintah R:base 5000 yang dapat
digunakan dengan relasi-relasi ini untuk menjawab query yang banyak; dan 3.
pembahasan yang mendalam tentang satu set modul program yang dikendalikan
dengan menu yang menjawab query kompleks dengan menggunakan perintah R:base
5000 yang terdapat pada bahasa pemrograman R:base 5000. Implementasi data ini
dikembangkan oleh IBM PCdengan memori 320 K, dua doubled sided disk drive, dan
satu monitor monochrome. Disket sistem R:base 5000 selalu berada di drive A.
Sedangkan file database dan modul program terdapat di B.
10. 1
STUDI KASUS DATABASE R:BASE 5000
Sebelum memulai pembahasan queri khusus dan berbagai modul pemrograman, rela-sidatabase yang sesungguhnya akan kita bahas terlebih dahulu. Data
yang diuji dalam database dikembangkan dengan asumsi yang sarna seperti pada
Bab 9. Asumsi tersebut adalah :
1. Liga bowling mempunyai enam team.
2. Masing-masing team mempunyai empat anggota
134
3. Masa pertandingan hanya empat minggu
4. Data untuk keempat minggu dimasukkan dalam R:base 5000 yang standar.
5. Semua bowler bermain tiap kali perlombaan
Perubahan-perubahan yang mungkin dalam asumsi ini dibahas dalam latihan
masalah yang terdapat pada akhir bab ini.
R>list sched
tnumb
Table: schoo
Read Password: NO
Modify Password: NO
Column definitions
# Name
Type
Length
Key
Itnumb
2 week
3 lane
INTEGER
INTEGER
INTEGER
I value(s)
I value(s)
I value(s)
yes
Current number of rows: 24
(a)
week
1
2
3
4
5
6
I
2
3
4
5
6
1
2
3
4
5
6
I
2
tnumb
3
4
5
6
Gambar 10.1 (a) Struktur dan
tnumb
Table: team
Read Password: NO
Modify Password: NO
1
2
3
4
5
6
Column definitions
Type
Length
lane
1
2
4
3
6
5
4
5
2
6
1
3
3
6
.1
4
5
2
5
I
lane
3
2
4
6
(b) isi relasi SCHED
R>list team
# Name
1
1
1
1
1
1
2
2
2
2
2
2
3
3
3
3
3
3
4
4
week
4
4
4
4
(b)
tname
captn
AlleyCats
Inconsistents
TenPins
HighRollers
Splitters.
SandBaggers
Ann Jones
Bill Black
Lisa Moore.
Jill Miller
Roy Lane
Cindy Fox
Key
(b)
I tnumb INTEGER
2 tname TEXT
3 captn TEXT
I value(s)
yes
15 characters
15 characters
Current number of rows: 6
R>
(a)
Gambar 10.2 (a)Struktur dan (b) isi dari relasi TEAM
135
Garnbar 10.1 sarnpai 10.4 rnenunjukkan struktur dan data tes yang sebenarnya
untuk rnasing-rnasing relasi. Data yang disirnpan dalarn relasi-relasi ~nisarnadengan
data yang ada pada Bab 9, sehingga hasil dari dua pelaksanaan (irnplernentasi) ini
dapat dibandingkan.Narna database dalam pelaksanaan R:base 5000 adalah SDB.
Dengan rnelihatkernbali data dalam relasi BOWLER, (sepertidalarn Bab9) kita
ketahui bahwa akan muncul duplikat tentang data alarnatjalan dan nomor telpon. Hal
yang rnenarik adalah keinginan untuk menentukan bahwa telepon - > stret merupakan
FD yang benar. Kita hendaknya mengkaji kembali hal-hal yang menyebabkan FD
tidak benar, serta tidak teIjadinya pengulangan tentang data stret dan telepon seperti
pada Bagian 9.1
10.2
MENJAWAB QUERY SEKRETARIS DENGAN R:BASE
5000
Contoh-contoh pada bagian ini dimaksudkan untuk menggarnbarkan bahwa
query sederhana yang berhubungan dengan data dalam database sekretaris bowling
dapat dibuat dengan rnenggunakan perintah R:base 5000, tanpa harus rnenyisipkan
perintah tersebut ke dalam bahasa penerirna. Semua query dalam bagian ini meliputi
relasi spesifik yang terdapat dalam Gambar 10.1 sampai 10.4. Kita hendaknya
melaksanakan database dan mengisinya dengan data percobaan serta rnemeriksa
query yang tengah dibahas. Dalam banyak kasus dua atau tiga perintah secara
berturut-turut diperlukan untuk menjawab query yang nampak relatif sederhana.
Contoh-contoh berikut merupakan contoh bahwa pemakai menggunakan
tingkatan perintah R:base 5000 dengan R> prompt.
R>lislleam
bname
Table: learn
Read Password: NO
Modify Password: NO
Column definitions
#
Name
Type
I
2
3
4
5
bname TEXT
Lnumb INTEGER
phone TEXT .
TEXT.
stret
INTEGER
Slavg
Current number of rows :
Lenglh
Key
15
I
8
20
1
yes
characters
value(s)
characters
characters
value(s)
6
R>
(a)
Garnbar 10. 3
(a) Struktur
(b) Isi dari relasi BOWLER
136
Lnumb
Jeam adams
5
Slcve adams
5
Bill Black
2
Bonnie Black
2
Bo Blow
2
Jo Blow
2
Joe Brown
3
Sue Brown
3
6
Cindy Fox
6
Randy Fox
Ann Jones
I
John Jones
I
5
Joy Lane
5
Roy Lane
4
Jill Miller
Paul Miller
4
Lisa Moore
3
3
Mike Moore
Jim Smith
I
1
Mary Smith
bname
Lnumb
Ruth Taylor
Dan White
Jan While
Russel Taylor
6
4
4
6
phone
Slrel
689-1234
689-1234
689-2345
689-2345
689-3456
689-3456
689-4567
689-4567
689-5678
689-5678
689-4365
689-4365
689--6789
689--6789
689-7890
689-7890
689-890 I
689-8901
689-9list scores
bname
Table: scores
Read Password: NO
Modify Password: NO
Jeams Adams
Steve Adams
Bill Black
Bonnie Black
Bo Blow
Jo Blow
Jim Smith
Mary Smith
Ann Jones
John Jones
Joe Brown
Sue Brown
Cindy Fox
Randy Fox
Russel Taylor
Ruth Taylor
Joy Lane
Roy Lane
Jill Miller
Paul Miller
bname
Dan White
Jan White
Lisa Moore
Mike MOore
Column definitions
# Name
2
3
4
5
bname
week
game I
game2
game2
Type
Length
Key
TEXT
INTEGER
INTEGER
INTEGER
INTEGER
15
I
I
I
I
yes
Current number of rows:
R>
(a)
characters
value(s)
value(s)
value(s)
value(s)
96
week
gamel
game2
game3
I
I
I
I
week
119
112
137
120
160
101
160
120
98
145
140
121
119
143
167
110
]26
]45
III
180
game I
120
140
155
125
145
91
150
110
110
150
127
128
110
150
150
125
127
180
101
196
game2
94
138
155
115
125
93
146
115
107
134
129
124
83
148
166
122
122
176
112
134
game3
I
I
I
I
156
130
99
150
163
125
120
149
154
108
III
121
I
1
1
1
1
I
1
1
I
1
1
I
I
I
]
]
(b)
Gambar 10.4 (a) Struktur dan (b) isi relasi SCORES. (Hanya nilai dalam satu
minggu. Lihat Gambar 9.4 untuk mengetahui isi selama empat minggu.)
Juga diasumsikan bahwa database sekretaris bowling dibuka dengan perintah:
R> OPEN b:sdb
QUERY #1: "Daftar nama semua team dalam kelompok."
Query ini sangat mudah untuk dijawab karena dua hal: pertama, semua
informasi yang diperlukan untuk menjawab query terletak pada satu relasi; kedua,
tidak terdapat kualifikasi (klausa WHERE) yang diperlukan. Jawaban query ini dapat
diperoleh dengan perintah berikut:
R> SELECT tname FROM team
atau
R> SELECT tname +
R> FROM team
Untuk jenis kedua, perintah tunggal telah berada pada dua baris sehingga
memungkinkan untuk menggunakan karakter "+" sebagai simbol kontinuitas.
Sedangkan pelaksanaan jenis lainnya akan berpengaruh terhadap pendaftaran namanama keenam team dalam liga tersebut.
QUERY #2: "Siapakah nama kapten team nomor empat?"
Penyelesaian terhadap query ini hanya sedikit lebih sukar dibandingkan Query
#1 hal ini disebabkan dalam Query #2 diperlukan klausa WHERE.
137
R> SELECT captn +
R> FROM team +
R> WHERE TNUMB = 4
Respon DBMS adalah =Jill Miller
QUERY #3:
"Carilah nama semua pemain bowling yang mempunyai rata-rata
permulaankurangdari 100."
.
Bentuk penyelesaian query ini sangat mirip dengan penyelesaian Query#2:
R> select bname +
R> FROM bowler +
R> WHERE stavg < 100
Jawabannya adalah nama tunggal: Jo Blow
QUERY #4:
"Siapakah nama serta berapa nOnlor telepon semua anggota team
nomor tiga?"
Solusinya adalah
R> SELECT bname,phone +
R> FROM bowler +
R> WHERE tnumb = 3
Responsenya adalah:
I
bname
,
Joe Brown
Sue Brown
Lisa Moore
Mike Moore
phone
689-4567
689-4567
689-8901
689-8901
I
QUERY #5:
"Pada jalur manakah team nomor lima bermain selama minggu ke
tiga dalam masa pertandingan tersebut?"
Pemecahan query ini menuntut klause WHERE dengan suatu set yang
menggunkan beberapa syarat:
R> SELECT lane +
R> FROM sched +
R> WHERE tnumb = 5 AND week = 3
Respon terhadap query ini adalah = 5
QUERY #6:
"Cari semua nama pemain yang tinggal di Robin St."
.
Olehkarenaalamatdalamdatabasedisimpandalambentukstring"21 Robin
St" maka solusi dari QUERY #6 memerlukan suatu pencarian, di dalam field stret
pada n:tasing-masingtupel yang terdapat dalam relasi BOWLER, untuk mengetahui
138
apakah karakter string "Robin St" telah muncul. Pencarian ini dapat dilakukan
dengan menggunakan operator CONTAINS dalam klausa WHERE. Bet>erapa
kemungkinan pemecahannya adalah
R> SELECT bname +
R> FROM bowler +
R> WHERE stret CONTAINS "Robin St"
atau
R> SELECT bname +
R> FROM bowler +
R> WHERE stret CONTAINS "Robin St"
atau
R> SET VAR subsrt TO Robin & St
R> SELECT bname +
R> FROM bowler +
R> WHERE stret CONTAINS .substr
Respon terhadap ketiga kasus di atas memberikan hasil yang sarna:
bname
Jean Adams
Steve Adams
Jill Miller
Paul Miller
Dan White
Jan White
Perbedaan antara ke tiga solusi itu meliputi cara membuat spesifikasi "Robin
St". Dalam dua solusi pertama, pemakai harus meyakinkan bahwa satu tempat yang
tepat terdapat di antara dua string "Robin" dab "S1". Beginilah cara menyimpan
alamat jalan dalam database. Dalam kasus terakhir operator "&" menyebabkan
sistem meduduki hanya satu tempat antara dua string. Satu keuntungan dari bentuk
terakhir ini adalah bahwa bentuk tersebut menekankan kondisi satu tempat bagi kita
yang mengkaji ulang solusi ini.
QUERY#7 ;
"Berapa banyak tiga seri permainan yang lebih besar dari pada 550
dilakukan sampai sekarang?"
Solusi ini rumit, karena R:base 5000 hanya menunjukkan operasi aritmatik
tunggal dalam suatu ekpresi. Sebagai contoh ekspresi dari bentuk umum:
varl+var2
dapat ditempatan ke dalam bentuk legal dengan R:base 5000, sementara tidak
terdapat cara ekspresi dengan dua operator seperti:
139
varl + var2 +var3
dapat ditempatkan dalam satu perintah. Ramifikasi pembatasan terhadap query
khusus ini adalah bahwa satu set lokasi temporer harus dibuat dengan menyimpan
kalkulasi intennediate. Salah satu cara untuk membuat lokasi temporer ini adalah
dengan menambahkan satu kolom ke relasi yang datanya sedang dianalisis. Jika
jawaban akhir telah didapat maka kolom itu dihilangkan dari relasi. Total solusi
memerlukan urutan tatap-tahap:
R> EXPAND scores WITH total INTEGER
R>
R>
R>
R>
R>
R>
R>
ASSIGWtotal TO gamel + game2 IN scores
ASSIGN total TO total + game3 IN scores
COMPUTE number AS COUNT total +
FROM scores +
WHERE tatal > 550
SHOW VAR number
REMOVE COLUMN total FROM scores
Perintah EXPAND akan menambah kolom barn ke ralasi SCORES, memberi
nama total kolom, sena menuliskannya sebagai integer. Dua perintah ASSIGN akan
menghitungjumlah (game 1+ game 2 + game 3) untuk tiap-tiap tupel dalam SCORES
dan menempatkan masing-masing jumlah dalam total field yang berhubungan.
Dalam posisi ini total field pada tiap-tiap tupel be:risikanjumlah tiga nilai pennainan
tunggal. Tiga baris berikutnya dalam sofusi ini adalah perintah: "COMPUTEFROM-WHERE". Perintah ini akan menghitung jumlah tupel dumana total nilai
lebih besar dari 550 dan menempatkan hitungan ini dalam angka variabel. Nilai ini
kemudian dicetak dengan perintah SHOW VAR. Akhimya kolom yang ditambahkan
ke relasi SCORES dihilangkan dengan perintah REMOVE COLUMN. Jawaban
akhir terhadap-query ini adalah angka = 2
Solusi yan'gJuga diajukan untuk Query #7 ini mempunyai satu solusi. Selain
solusi itu dapat menyebabkan kerugian yang serius: solusi akan mengubah struktur
dasar dari relasi SCORES dengan menambah dan kemudian menghilangkan kolom
yang baru. Banyak pemakai tidak menyukai query yang mengubah struktur relasi
dalam database, jika database telah dibuat. Mereka beralasan bahwa relasi temporer
dalam satu kolom atau lebih (atribut) hendaknya dibuat untuk menampung data
temporer selama kalkulasi berlangsung, dari pada harus membuat kolom barn dalam
salah satu relasi disain. pengan cara ini, jika selama pelaksanaan solusi terdapat
sesuatu yang hHangmaka database yang asli masih ada. Dengan posisi demikian kita
punya keuntungan namun kita hendaknya merencanakan cara memecahkan query
terakhir dengan c.arayang tidak mengubah struktur dasar relasi SCORES
140
QUERY #8 :
"Siapakah pemimpin lawan team nomor lima selama minggu ke
tiga?"
Query ini paling tepat dijawab dengan proses dua tahap. Pertama, Query #5
dapat dipakai untuk menentukan bahwa team nomor lima ada pada jalur=5 selama
minggu ke tiga. Ini berarti bahwa lawan pada malam tersebut akan bermain padajalur
6. Dengan menggunakan informasi ini nomor team yang bermain pada jalur enam
selama minggu ke tiga dapat ditemukan dan disimpan dalam sebuah variabel,
misalnya "team".
R> SETVAR ternTO tnumbIN sched+
R> WHERE lane = 6 and week= 3
Nilai yang disimpan dalam variabel tern sekarang dapat dipakai untuk meneptukan nama pemimpin.
R> SET VAR ans TO captn IN team +
R> WHERE tnumb = .tem
R> SHOW VAR ans
Jawabannya adalah = Bill Black
"Buat daftar nama semua anggota liga bowling yang bukan anggota
Sand Baggers".
Solusi ini, seperti solusi yang terakhir, menuntut adanya daftar informasi yang
diperoleh dari satu relasi ke relasi ke dua untuk memperoleh jawaban yang benar.
Dalam contoh ini operator aljabar relasional JOIN akan digunakan.
R> PROJECTtempr FROM team USING tnumb +
R> WHERE tname SandBaggers
R> RENAME COLUMN tnumb TO ttnumb IN tempr
R> JOIN tempr USING ttnJlmb +
R> WITH bowler USING tnumb +
R> FORMING result
R> SELECT bname +
R> FROM result
R> REMOVE result
R> REMOVE tempr
Keluaran ini akan berupa daftar dua puluh nama. Solusi terakhir adalah sebagai
berikut: (1) Relasi baru disebut TEMPR adalah hasil dari relasi TEAM. TEMPR
hanya mempunyai satu kolom, tnum. TEMPR memuat nomor team dari semua team
kecuali Sand Baggers. (2) Hanya kolom TEMPR diberi nama kembali ke ttnumb,
sehingga akan berbeda dengan kolom nomor team dalam relasi BOWLER. Selama
operasi JOIN, R:base 5000 menghendaki kolom-kolom yang sedang digabungkan/
joined dengan nomor-nomor yang berbeda. (3) TEMPR dan digabungkan/JOIN
untuk membentuk relasi ke tiga, RESULT. Kolom bname dalam RESULT memuat
QUERY #9:
141
nama-nama anggota liga yang dikehendaki. (4) Perintah SELECT menunjukkan
solusipada query tersebut. (5) Dua relasi temporer, RESULT dan TEMPR dihilangkan dari database.
QUERY # 10: "Berapa total pin yang diperoleh Bill Black pada akhir minggu ke
tiga?"
Solusi query ini dapat berupa sebagai berikut:
R> COMPUTE tot AS SUM game 1 FROM scores +
R> WHERE week COMPUTE s2 AS SUM game 2 FROM scores +
R> WHERE week COMPUTE s3 AS SUM game 3 FROM scores +
R> WHERE week SET VAR tot TO .tot + .s2
R> SET VAR tot TO .tot + .s3
R> SHOW VAR tot
Keluaran
akhir di sini adalah tot
= 1381
Dalam solusi ini, perintah COMPUTE pertama menambah semua nilai game1
Bill Black pada tiga minggu pertama, dan menyimpanjumlah tersebutdalam variabel
tot. Dua perintah COMPUTE berikutnya akan mengulangi proses untuk permainan
2 dan permainan 3,dengan menyimpan masing-masingjumlah dalam variabel s2 dan
s3. Perintah SET VAR akan menambahkan nilai ke tiga variabel ini bersama-sama
untuk mendapatkan hasil akhir. Perintah SHOW VAR akan menghasilkan jawaban
akhir.
QUERY # 11 : "Berapa anggota liga bowling yang telah bermain paling tidak satu
permainan .lebih 50?"
R> PROJECT tempr FROM scores USING bname+
R> WHERE game 1 > 150 OR game3 > 150
R> DELETE DUPLICATES FROM tempr
R> COMPUTE ans AS ROWS FROM tempr
R> SHOW VAR ams
R:> RMOVE tempr
Solusi terhadap query ini adalah ans= 11
Dalam solusi ini ralsi temporei-,TEMPR, di-PROJEK-kan dari relasi nilai.
TEMPR hanya mempunyai satu kolom dan bname. Terdapat satu tupel dalam relasi
ini untuk tiap tupel dalam relasi SCORES dimana terdapat paling tidak satu nilai
tunggal di atas 150. Oleh karena satu orang yang sa,madapat bermain lebih dari 150
pada malam yang berbeda, maka mungkin bahwa nama yang sarna akan muncul
beberapa kali dalam TEMPR. Perintah DELETE DUPLICATES akan menghilangkan semua nama duplikat dari TEMPR. Nama-nama lainnya kemudian dihitung
dengan menggunakan perintah COMPUTE untuk memperoleh jawaban terakhir.
142
Dalam TEMPR, mungkin terdapat adanya tupel duplikat, ini berarti bahwa
R:base 5000's PROJECf bukan merupakan operator aljabarrelasional yang sesungguhnya, dan TEMPR pun demikian. Seperti yang dinyatakan dalam bab sebelumnya
bahwa tak ada sistem manajemen database relasional yang didasarkan mikro komputer yang semuanya relasional, dan ini harus kita pertimbangkan pada saat membuat
query. R:base 5000 lebih mendekati DBMS yang benar-bnar relasional dari pada
sebagian besar sistem manajemen yang didasarkan pada mikrokomputer.
Dalam solusi query di atas, hendaknya perlu kita perhatikan bahwa solusi ini
tidak bersifat unik. Biasanya terdapat beberapa cara untuk memperoleh solusi query.
Beberapa solusi dapat dipakai dengan kecepatan yangjauh lebih tinggi dari pada yang
lainnya, dan beberapa solusijuga mempunyai logika yangjauh lebih gampang untuk
diikuti. Cara terbaik untuk mempelajari cara menulis solusi yang baik adalah dengan
mempelajari solusi yang ditulis oleh orang lain dan kemudian kita tulis beberapa
solusi kita sendiri dengan menggunakan beberapa metode yang berbeda untuk
masing-masing masalah
10. 3
MENU
UT AMA
TERPROGRAM
UNTUK
SOL US I
QUERY
Query pada bagian 10.2 merupakan query yang ditanyakan oleh sekretaris
bowling yang khusus dan, kebanyakan, solusi query mudah dipahami dan jumlah
pernyataan R:base 5000 tidak terlalu panjang yang digunakn untuk menjawab
pertanyaan. Kita asumsikan bahwa sekretaris bowling akan memasukkan solusi
secara manual, meskipun panjang dari beberapa solusi dapat dengan mudah menimbulkan kesalahan dalam memasukkannya. Lebih lanjut sekretaris bowling hendaknya mempunyai pengetahuan yang cukup tentang teori database, dan sintak
R:base 5000 untuk menjabarkan solusi tersebut, bukan hanya sekedar menyalin.
Untuk membantu sekretaris dari kesulitan menjabarkan kembali sebuah solusi query
tiap waktu query tertcacahkan, sebuah menu yang sering digunakan query disimpan,
dan penyelesaian yang telah diprogram untuk setiap permintaan yang dilaksanakan
setiap saat untuk permintaan yang telah dipilih. Bagian berikut pada bab ini merupakan kerangka yang rinci tentang menu khusus serta program yang berhubungan
dengan menu itu.
Seperti yang terlihat oleh sekretaris, menu ini disajikan dalam Gambar 10.5.
Sedangkan modul program yang menguraikan menu, menerima pilihan menu, dan
kemudian mentransfer kontrol ke modul program terdapatpada Gambar 10.6:modul
ini dinamakan secdb.app.
143
MONDAY NIGHT IRREGULAR BOWLING LEAGUE QUERY MENU
(1)
DISPLAY STATISTICS FOR AN INDIVIDUAL BOWLER
(2)
DISPLAY TOTAL PINS FOR EACH TEAM
(3)
DISPLAY TEAM STANDING
(4)
DISPLAY SCHEDULE FOR A GIVEN WEEK
(5)
GENERATE AN END-OF-SEASON REPORT
(6)
RETURN TO RBASE 5000
Gambar 10.5 Menu utama yang dijabarkan oleh secdb.apx.
.COMMAND
SECDB
SETMESSAGE OFF
OPEN SDB
SET ERROR MESSAGE OFF
SET BAR PICKI INT
LABEL STARTAPP
NEWPAGE
CHOOSE PICK] ('J{OMsdbmain IN SECDB. APX
IF PICKI EQ
I THEN
J{UNbwlrsl. com
GO TO STARTAPP
ENDIF
IF PICKI EQ
2 THEN
RUN leampns IN SECOR. APX
GOTOSTARTAPP
ENDIF
IF PICKI EQ
3 THEN
RUN teampns IN SECDB. APX
GOTO STARTAPP
ENDIF
IF PICKI EQ
4 THEN
RUN wkschdl IN SECDB. APX
GO TO STARTAPP
ENDIF
IF PICKI EQ
5 THEN
RUN eosrpt. com
GOTO STARTAPP
ENDIF
IF PICKI EQ
6 THEN
GOTO ENDAPP
ENDIF
GOTO STARTAPP
LABEL ENDAPP
CLEAR PICK I
RETURN
-MENU
sdbmain
COLUMN MONDAY NIGHT IRREGULARS BOWLING LEAGUE QUERY MENU
DISPLA Y STATISTICS FOR AN INDIVIDUAL BOWLER
DISPLA Y TOTAL I'INS FOR EACH TEAM
DISPLA Y TEAM STANDINGS
DISPLA Y SCHEDULE FOR A GIVEN WEEK
GENERATE AN END-OF-SESAON
REPORT
RETURN TO RBASE 5000
Gambar 10.6 Modul program menu utama
144
Secdb.app dikembangkan dengan menggunakan APPLICATION EXPRESS,
paket utilitas perangkat lunak yang merupakan bagian dari R:base 5000. Untuk
menambah kecepatan, secdb.app dipadukan ke dalam modul yang mudah pelaksanaannya dengan nama secdb.apx. Jika R: base 5000 dibawa ke tingkat perintah
program menu ctilaksanakandengan urutan perintah sbb:
R>B:
R> RUN secdb IN secdb.apx
Jika salah satu dari 5pilihan pertama diambil, maka modul program yang ditulis
dalam bahasa pemprograman R: 5000 akan dilaksanakan. Pada gilirannya sebagian
dari modul ini akan memanggil submodullainnya. Modul program yang dipanggil ini
akan dibahas secara rinei pada bagian berikut. Pelaksanaan program yang dipakai
untuk menjabarkan keluaran yang ada pada bagian ini adalahjenis & program sumber
yang digabungkan.
10. 4
R: BASE 5000 PROGRAM MODUL BWLRST.PRG
Modul ini dipanggil oleh program menu utama pada saat pilihan menu adalah
"DISPLAY STATISTICS FOR AN INDIVIDUAL BOWLER". Pelaksanaan modul
ini mempengaruhi perhitungan dan keluaran berupa statistic untuk pemain individual. Statistik ini dapat diperoleh pada setiap minggu dalam masa perlombaan, sampai
dan meliputi minggu ke akhir dimana nilai di masukkan ke dalam database (logika
yang terdapat dalam modul ini ada pada gambar 10.7 programnya terdapat pada
gambar 10.8sedangkan keluaran khusus dari modul ini ada pada gambar 10.9)hanya
bagian logika BWRST.PRG yang perlu di tekankan adalah bagian kalkulasi hambatan (handicap) yang berisi dua peryataan.
SET VAR hndkp TO 200 - .bavg
SET VAR hndkp TO .hndkp X 0.75
"hndkp" Merupakan variabel yang dinyatakan sebagai I N T E G E R dan dipakai
untuk menampung hambatan yang ada sekarang untuk tiap individual "baug" juga
variabel INTEGER menampung rata-rata akhir pemain. Kedua peryataan tersebut
akan memecahkan persamaan tersebut dimana TRUNC merupakan fungsi trunkasi
(truncation)
handicap =TRUNC«200-currencaverage)*0.75)
145
1.
Determine the last week for which scores have been entered into the
SCORES relation. Store the week as "max_wk".
2.
Input the weekof the season for which statistics are desired as "wk", and
check the value for validity.
Input the name ofthe bowler for which statistics are desired as "name,"
and check the name for validity.
Using the SET POINTER feature of R:base 5000, identify aUtuples in
the SCORES relation that will be used in the calculations. (The
condition is that bname =name AND week .glb THEN
ASSIGN wins TOwins + 1.0 IN tstats WHERE !numb = .teamb
ASSIGN losses TOlosses + 1.0 IN tstats WHERE !numb
.teama
ELSE
.
IF glb
> .gla THEN
WHERE !numb
ASSIGN wins TOwins + 1.0 IN !Slats
WHERE !numb
ASSIGN losses TOlosses + 1.0 IN tstats
ELSE
ASSIGN wins TOwins + 0.5 IN tstats
+
WHERE !numb
.teama OR tnumb = .teamb
ASSIGN losses TOlosses + 0.5 IN tstats
+
WHERE !numb
.teama OR tnumb = .teamb
ENDIF
ENDIF
=
= .teama
= .teamb
=
=
.
.
(
)
IF g2a > .g2b THEN
ASSIGN wins TOwins + 1.0 IN tstats WHERE !numb = .teamb
ASSIGN losses TO losses + 1.0 IN tstats WHERE !numb = .teama
ELSE
IF g2b > .g2a TII EN
WHERE
!numb = .teama
ASSIGN wins TOwins + 1.0 IN tslats
ASSIGN losses TO losses + 1.0 IN lslats
WHERE
tnumb = .teamb
ELSE
ASSIGN wins TOwins + 0.5 1:'\ lstats
+
WHERE tnumb = .tcama OR tnumb = .leamb
ASSIGN losses TO losses + 0.5 1]\ tstals
+
WIIERE tnumb= .teama OR tnumb = .teamb
ENDIF
.
ENDIF
( )
IF g3a > .g3b THBN
ASSIGN wins TOwins + 1.0 IN !Slats WHERE tnumb .teamb
ASSIGN losses TOlosses + 1.0 IN !SIalS WHERE !numb
.teama
ELSE
IF g3b > .g3a THEN
WHERE !numb = .leama
ASSIGN wins TO wins + 1.0 IN lstats
ASSIGN losses TOlosses + 1.0 IN tstats
WHERE !numb :teamb
ELSE
+
ASSIGN wins TOwins + 0.5 IN tstats
WHERE !numb = .teama OR tnumb = .teamb
+
ASSIGN losses TOlosses + 0.5 IN tstats
WHERE !numb = .teama OR tnumb = .leamb
ENDIF
ENDIF
( )
SET VAR IOta TO .gla + .g2a
SET VAR tota TO .tota + .g3a
SET VAR tota TO .gIb + .g2b
SET VAR tota TO .totb + .g3b
IF tota > .totb THEN
ASSIGN wins TO wins + 1.0 Ub tstats WHERE tnumb = .teama
=
=
=
.
Gambar
10.21 (c) Bagian ketiga dari modul program teamstd.prg
161
ASSIGNlosses TO losses + 1.0 IN tstats WHEREtnumb = .teamb
ELSE
IF totb > .tota THEN
ASSIGN wins TO wins + 1.0 IN
Bab ini berisikan tiga bagian infonnasi dan pembahasan utama: 1. daftar
sampel empat relasi yang menentukan bentuk database sekretaris jika digunakan
R:base 5000; 2. contoh tentang cara kerja perintah-perintah R:base 5000 yang dapat
digunakan dengan relasi-relasi ini untuk menjawab query yang banyak; dan 3.
pembahasan yang mendalam tentang satu set modul program yang dikendalikan
dengan menu yang menjawab query kompleks dengan menggunakan perintah R:base
5000 yang terdapat pada bahasa pemrograman R:base 5000. Implementasi data ini
dikembangkan oleh IBM PCdengan memori 320 K, dua doubled sided disk drive, dan
satu monitor monochrome. Disket sistem R:base 5000 selalu berada di drive A.
Sedangkan file database dan modul program terdapat di B.
10. 1
STUDI KASUS DATABASE R:BASE 5000
Sebelum memulai pembahasan queri khusus dan berbagai modul pemrograman, rela-sidatabase yang sesungguhnya akan kita bahas terlebih dahulu. Data
yang diuji dalam database dikembangkan dengan asumsi yang sarna seperti pada
Bab 9. Asumsi tersebut adalah :
1. Liga bowling mempunyai enam team.
2. Masing-masing team mempunyai empat anggota
134
3. Masa pertandingan hanya empat minggu
4. Data untuk keempat minggu dimasukkan dalam R:base 5000 yang standar.
5. Semua bowler bermain tiap kali perlombaan
Perubahan-perubahan yang mungkin dalam asumsi ini dibahas dalam latihan
masalah yang terdapat pada akhir bab ini.
R>list sched
tnumb
Table: schoo
Read Password: NO
Modify Password: NO
Column definitions
# Name
Type
Length
Key
Itnumb
2 week
3 lane
INTEGER
INTEGER
INTEGER
I value(s)
I value(s)
I value(s)
yes
Current number of rows: 24
(a)
week
1
2
3
4
5
6
I
2
3
4
5
6
1
2
3
4
5
6
I
2
tnumb
3
4
5
6
Gambar 10.1 (a) Struktur dan
tnumb
Table: team
Read Password: NO
Modify Password: NO
1
2
3
4
5
6
Column definitions
Type
Length
lane
1
2
4
3
6
5
4
5
2
6
1
3
3
6
.1
4
5
2
5
I
lane
3
2
4
6
(b) isi relasi SCHED
R>list team
# Name
1
1
1
1
1
1
2
2
2
2
2
2
3
3
3
3
3
3
4
4
week
4
4
4
4
(b)
tname
captn
AlleyCats
Inconsistents
TenPins
HighRollers
Splitters.
SandBaggers
Ann Jones
Bill Black
Lisa Moore.
Jill Miller
Roy Lane
Cindy Fox
Key
(b)
I tnumb INTEGER
2 tname TEXT
3 captn TEXT
I value(s)
yes
15 characters
15 characters
Current number of rows: 6
R>
(a)
Gambar 10.2 (a)Struktur dan (b) isi dari relasi TEAM
135
Garnbar 10.1 sarnpai 10.4 rnenunjukkan struktur dan data tes yang sebenarnya
untuk rnasing-rnasing relasi. Data yang disirnpan dalarn relasi-relasi ~nisarnadengan
data yang ada pada Bab 9, sehingga hasil dari dua pelaksanaan (irnplernentasi) ini
dapat dibandingkan.Narna database dalam pelaksanaan R:base 5000 adalah SDB.
Dengan rnelihatkernbali data dalam relasi BOWLER, (sepertidalarn Bab9) kita
ketahui bahwa akan muncul duplikat tentang data alarnatjalan dan nomor telpon. Hal
yang rnenarik adalah keinginan untuk menentukan bahwa telepon - > stret merupakan
FD yang benar. Kita hendaknya mengkaji kembali hal-hal yang menyebabkan FD
tidak benar, serta tidak teIjadinya pengulangan tentang data stret dan telepon seperti
pada Bagian 9.1
10.2
MENJAWAB QUERY SEKRETARIS DENGAN R:BASE
5000
Contoh-contoh pada bagian ini dimaksudkan untuk menggarnbarkan bahwa
query sederhana yang berhubungan dengan data dalam database sekretaris bowling
dapat dibuat dengan rnenggunakan perintah R:base 5000, tanpa harus rnenyisipkan
perintah tersebut ke dalam bahasa penerirna. Semua query dalam bagian ini meliputi
relasi spesifik yang terdapat dalam Gambar 10.1 sampai 10.4. Kita hendaknya
melaksanakan database dan mengisinya dengan data percobaan serta rnemeriksa
query yang tengah dibahas. Dalam banyak kasus dua atau tiga perintah secara
berturut-turut diperlukan untuk menjawab query yang nampak relatif sederhana.
Contoh-contoh berikut merupakan contoh bahwa pemakai menggunakan
tingkatan perintah R:base 5000 dengan R> prompt.
R>lislleam
bname
Table: learn
Read Password: NO
Modify Password: NO
Column definitions
#
Name
Type
I
2
3
4
5
bname TEXT
Lnumb INTEGER
phone TEXT .
TEXT.
stret
INTEGER
Slavg
Current number of rows :
Lenglh
Key
15
I
8
20
1
yes
characters
value(s)
characters
characters
value(s)
6
R>
(a)
Garnbar 10. 3
(a) Struktur
(b) Isi dari relasi BOWLER
136
Lnumb
Jeam adams
5
Slcve adams
5
Bill Black
2
Bonnie Black
2
Bo Blow
2
Jo Blow
2
Joe Brown
3
Sue Brown
3
6
Cindy Fox
6
Randy Fox
Ann Jones
I
John Jones
I
5
Joy Lane
5
Roy Lane
4
Jill Miller
Paul Miller
4
Lisa Moore
3
3
Mike Moore
Jim Smith
I
1
Mary Smith
bname
Lnumb
Ruth Taylor
Dan White
Jan While
Russel Taylor
6
4
4
6
phone
Slrel
689-1234
689-1234
689-2345
689-2345
689-3456
689-3456
689-4567
689-4567
689-5678
689-5678
689-4365
689-4365
689--6789
689--6789
689-7890
689-7890
689-890 I
689-8901
689-9list scores
bname
Table: scores
Read Password: NO
Modify Password: NO
Jeams Adams
Steve Adams
Bill Black
Bonnie Black
Bo Blow
Jo Blow
Jim Smith
Mary Smith
Ann Jones
John Jones
Joe Brown
Sue Brown
Cindy Fox
Randy Fox
Russel Taylor
Ruth Taylor
Joy Lane
Roy Lane
Jill Miller
Paul Miller
bname
Dan White
Jan White
Lisa Moore
Mike MOore
Column definitions
# Name
2
3
4
5
bname
week
game I
game2
game2
Type
Length
Key
TEXT
INTEGER
INTEGER
INTEGER
INTEGER
15
I
I
I
I
yes
Current number of rows:
R>
(a)
characters
value(s)
value(s)
value(s)
value(s)
96
week
gamel
game2
game3
I
I
I
I
week
119
112
137
120
160
101
160
120
98
145
140
121
119
143
167
110
]26
]45
III
180
game I
120
140
155
125
145
91
150
110
110
150
127
128
110
150
150
125
127
180
101
196
game2
94
138
155
115
125
93
146
115
107
134
129
124
83
148
166
122
122
176
112
134
game3
I
I
I
I
156
130
99
150
163
125
120
149
154
108
III
121
I
1
1
1
1
I
1
1
I
1
1
I
I
I
]
]
(b)
Gambar 10.4 (a) Struktur dan (b) isi relasi SCORES. (Hanya nilai dalam satu
minggu. Lihat Gambar 9.4 untuk mengetahui isi selama empat minggu.)
Juga diasumsikan bahwa database sekretaris bowling dibuka dengan perintah:
R> OPEN b:sdb
QUERY #1: "Daftar nama semua team dalam kelompok."
Query ini sangat mudah untuk dijawab karena dua hal: pertama, semua
informasi yang diperlukan untuk menjawab query terletak pada satu relasi; kedua,
tidak terdapat kualifikasi (klausa WHERE) yang diperlukan. Jawaban query ini dapat
diperoleh dengan perintah berikut:
R> SELECT tname FROM team
atau
R> SELECT tname +
R> FROM team
Untuk jenis kedua, perintah tunggal telah berada pada dua baris sehingga
memungkinkan untuk menggunakan karakter "+" sebagai simbol kontinuitas.
Sedangkan pelaksanaan jenis lainnya akan berpengaruh terhadap pendaftaran namanama keenam team dalam liga tersebut.
QUERY #2: "Siapakah nama kapten team nomor empat?"
Penyelesaian terhadap query ini hanya sedikit lebih sukar dibandingkan Query
#1 hal ini disebabkan dalam Query #2 diperlukan klausa WHERE.
137
R> SELECT captn +
R> FROM team +
R> WHERE TNUMB = 4
Respon DBMS adalah =Jill Miller
QUERY #3:
"Carilah nama semua pemain bowling yang mempunyai rata-rata
permulaankurangdari 100."
.
Bentuk penyelesaian query ini sangat mirip dengan penyelesaian Query#2:
R> select bname +
R> FROM bowler +
R> WHERE stavg < 100
Jawabannya adalah nama tunggal: Jo Blow
QUERY #4:
"Siapakah nama serta berapa nOnlor telepon semua anggota team
nomor tiga?"
Solusinya adalah
R> SELECT bname,phone +
R> FROM bowler +
R> WHERE tnumb = 3
Responsenya adalah:
I
bname
,
Joe Brown
Sue Brown
Lisa Moore
Mike Moore
phone
689-4567
689-4567
689-8901
689-8901
I
QUERY #5:
"Pada jalur manakah team nomor lima bermain selama minggu ke
tiga dalam masa pertandingan tersebut?"
Pemecahan query ini menuntut klause WHERE dengan suatu set yang
menggunkan beberapa syarat:
R> SELECT lane +
R> FROM sched +
R> WHERE tnumb = 5 AND week = 3
Respon terhadap query ini adalah = 5
QUERY #6:
"Cari semua nama pemain yang tinggal di Robin St."
.
Olehkarenaalamatdalamdatabasedisimpandalambentukstring"21 Robin
St" maka solusi dari QUERY #6 memerlukan suatu pencarian, di dalam field stret
pada n:tasing-masingtupel yang terdapat dalam relasi BOWLER, untuk mengetahui
138
apakah karakter string "Robin St" telah muncul. Pencarian ini dapat dilakukan
dengan menggunakan operator CONTAINS dalam klausa WHERE. Bet>erapa
kemungkinan pemecahannya adalah
R> SELECT bname +
R> FROM bowler +
R> WHERE stret CONTAINS "Robin St"
atau
R> SELECT bname +
R> FROM bowler +
R> WHERE stret CONTAINS "Robin St"
atau
R> SET VAR subsrt TO Robin & St
R> SELECT bname +
R> FROM bowler +
R> WHERE stret CONTAINS .substr
Respon terhadap ketiga kasus di atas memberikan hasil yang sarna:
bname
Jean Adams
Steve Adams
Jill Miller
Paul Miller
Dan White
Jan White
Perbedaan antara ke tiga solusi itu meliputi cara membuat spesifikasi "Robin
St". Dalam dua solusi pertama, pemakai harus meyakinkan bahwa satu tempat yang
tepat terdapat di antara dua string "Robin" dab "S1". Beginilah cara menyimpan
alamat jalan dalam database. Dalam kasus terakhir operator "&" menyebabkan
sistem meduduki hanya satu tempat antara dua string. Satu keuntungan dari bentuk
terakhir ini adalah bahwa bentuk tersebut menekankan kondisi satu tempat bagi kita
yang mengkaji ulang solusi ini.
QUERY#7 ;
"Berapa banyak tiga seri permainan yang lebih besar dari pada 550
dilakukan sampai sekarang?"
Solusi ini rumit, karena R:base 5000 hanya menunjukkan operasi aritmatik
tunggal dalam suatu ekpresi. Sebagai contoh ekspresi dari bentuk umum:
varl+var2
dapat ditempatan ke dalam bentuk legal dengan R:base 5000, sementara tidak
terdapat cara ekspresi dengan dua operator seperti:
139
varl + var2 +var3
dapat ditempatkan dalam satu perintah. Ramifikasi pembatasan terhadap query
khusus ini adalah bahwa satu set lokasi temporer harus dibuat dengan menyimpan
kalkulasi intennediate. Salah satu cara untuk membuat lokasi temporer ini adalah
dengan menambahkan satu kolom ke relasi yang datanya sedang dianalisis. Jika
jawaban akhir telah didapat maka kolom itu dihilangkan dari relasi. Total solusi
memerlukan urutan tatap-tahap:
R> EXPAND scores WITH total INTEGER
R>
R>
R>
R>
R>
R>
R>
ASSIGWtotal TO gamel + game2 IN scores
ASSIGN total TO total + game3 IN scores
COMPUTE number AS COUNT total +
FROM scores +
WHERE tatal > 550
SHOW VAR number
REMOVE COLUMN total FROM scores
Perintah EXPAND akan menambah kolom barn ke ralasi SCORES, memberi
nama total kolom, sena menuliskannya sebagai integer. Dua perintah ASSIGN akan
menghitungjumlah (game 1+ game 2 + game 3) untuk tiap-tiap tupel dalam SCORES
dan menempatkan masing-masing jumlah dalam total field yang berhubungan.
Dalam posisi ini total field pada tiap-tiap tupel be:risikanjumlah tiga nilai pennainan
tunggal. Tiga baris berikutnya dalam sofusi ini adalah perintah: "COMPUTEFROM-WHERE". Perintah ini akan menghitung jumlah tupel dumana total nilai
lebih besar dari 550 dan menempatkan hitungan ini dalam angka variabel. Nilai ini
kemudian dicetak dengan perintah SHOW VAR. Akhimya kolom yang ditambahkan
ke relasi SCORES dihilangkan dengan perintah REMOVE COLUMN. Jawaban
akhir terhadap-query ini adalah angka = 2
Solusi yan'gJuga diajukan untuk Query #7 ini mempunyai satu solusi. Selain
solusi itu dapat menyebabkan kerugian yang serius: solusi akan mengubah struktur
dasar dari relasi SCORES dengan menambah dan kemudian menghilangkan kolom
yang baru. Banyak pemakai tidak menyukai query yang mengubah struktur relasi
dalam database, jika database telah dibuat. Mereka beralasan bahwa relasi temporer
dalam satu kolom atau lebih (atribut) hendaknya dibuat untuk menampung data
temporer selama kalkulasi berlangsung, dari pada harus membuat kolom barn dalam
salah satu relasi disain. pengan cara ini, jika selama pelaksanaan solusi terdapat
sesuatu yang hHangmaka database yang asli masih ada. Dengan posisi demikian kita
punya keuntungan namun kita hendaknya merencanakan cara memecahkan query
terakhir dengan c.arayang tidak mengubah struktur dasar relasi SCORES
140
QUERY #8 :
"Siapakah pemimpin lawan team nomor lima selama minggu ke
tiga?"
Query ini paling tepat dijawab dengan proses dua tahap. Pertama, Query #5
dapat dipakai untuk menentukan bahwa team nomor lima ada pada jalur=5 selama
minggu ke tiga. Ini berarti bahwa lawan pada malam tersebut akan bermain padajalur
6. Dengan menggunakan informasi ini nomor team yang bermain pada jalur enam
selama minggu ke tiga dapat ditemukan dan disimpan dalam sebuah variabel,
misalnya "team".
R> SETVAR ternTO tnumbIN sched+
R> WHERE lane = 6 and week= 3
Nilai yang disimpan dalam variabel tern sekarang dapat dipakai untuk meneptukan nama pemimpin.
R> SET VAR ans TO captn IN team +
R> WHERE tnumb = .tem
R> SHOW VAR ans
Jawabannya adalah = Bill Black
"Buat daftar nama semua anggota liga bowling yang bukan anggota
Sand Baggers".
Solusi ini, seperti solusi yang terakhir, menuntut adanya daftar informasi yang
diperoleh dari satu relasi ke relasi ke dua untuk memperoleh jawaban yang benar.
Dalam contoh ini operator aljabar relasional JOIN akan digunakan.
R> PROJECTtempr FROM team USING tnumb +
R> WHERE tname SandBaggers
R> RENAME COLUMN tnumb TO ttnumb IN tempr
R> JOIN tempr USING ttnJlmb +
R> WITH bowler USING tnumb +
R> FORMING result
R> SELECT bname +
R> FROM result
R> REMOVE result
R> REMOVE tempr
Keluaran ini akan berupa daftar dua puluh nama. Solusi terakhir adalah sebagai
berikut: (1) Relasi baru disebut TEMPR adalah hasil dari relasi TEAM. TEMPR
hanya mempunyai satu kolom, tnum. TEMPR memuat nomor team dari semua team
kecuali Sand Baggers. (2) Hanya kolom TEMPR diberi nama kembali ke ttnumb,
sehingga akan berbeda dengan kolom nomor team dalam relasi BOWLER. Selama
operasi JOIN, R:base 5000 menghendaki kolom-kolom yang sedang digabungkan/
joined dengan nomor-nomor yang berbeda. (3) TEMPR dan digabungkan/JOIN
untuk membentuk relasi ke tiga, RESULT. Kolom bname dalam RESULT memuat
QUERY #9:
141
nama-nama anggota liga yang dikehendaki. (4) Perintah SELECT menunjukkan
solusipada query tersebut. (5) Dua relasi temporer, RESULT dan TEMPR dihilangkan dari database.
QUERY # 10: "Berapa total pin yang diperoleh Bill Black pada akhir minggu ke
tiga?"
Solusi query ini dapat berupa sebagai berikut:
R> COMPUTE tot AS SUM game 1 FROM scores +
R> WHERE week COMPUTE s2 AS SUM game 2 FROM scores +
R> WHERE week COMPUTE s3 AS SUM game 3 FROM scores +
R> WHERE week SET VAR tot TO .tot + .s2
R> SET VAR tot TO .tot + .s3
R> SHOW VAR tot
Keluaran
akhir di sini adalah tot
= 1381
Dalam solusi ini, perintah COMPUTE pertama menambah semua nilai game1
Bill Black pada tiga minggu pertama, dan menyimpanjumlah tersebutdalam variabel
tot. Dua perintah COMPUTE berikutnya akan mengulangi proses untuk permainan
2 dan permainan 3,dengan menyimpan masing-masingjumlah dalam variabel s2 dan
s3. Perintah SET VAR akan menambahkan nilai ke tiga variabel ini bersama-sama
untuk mendapatkan hasil akhir. Perintah SHOW VAR akan menghasilkan jawaban
akhir.
QUERY # 11 : "Berapa anggota liga bowling yang telah bermain paling tidak satu
permainan .lebih 50?"
R> PROJECT tempr FROM scores USING bname+
R> WHERE game 1 > 150 OR game3 > 150
R> DELETE DUPLICATES FROM tempr
R> COMPUTE ans AS ROWS FROM tempr
R> SHOW VAR ams
R:> RMOVE tempr
Solusi terhadap query ini adalah ans= 11
Dalam solusi ini ralsi temporei-,TEMPR, di-PROJEK-kan dari relasi nilai.
TEMPR hanya mempunyai satu kolom dan bname. Terdapat satu tupel dalam relasi
ini untuk tiap tupel dalam relasi SCORES dimana terdapat paling tidak satu nilai
tunggal di atas 150. Oleh karena satu orang yang sa,madapat bermain lebih dari 150
pada malam yang berbeda, maka mungkin bahwa nama yang sarna akan muncul
beberapa kali dalam TEMPR. Perintah DELETE DUPLICATES akan menghilangkan semua nama duplikat dari TEMPR. Nama-nama lainnya kemudian dihitung
dengan menggunakan perintah COMPUTE untuk memperoleh jawaban terakhir.
142
Dalam TEMPR, mungkin terdapat adanya tupel duplikat, ini berarti bahwa
R:base 5000's PROJECf bukan merupakan operator aljabarrelasional yang sesungguhnya, dan TEMPR pun demikian. Seperti yang dinyatakan dalam bab sebelumnya
bahwa tak ada sistem manajemen database relasional yang didasarkan mikro komputer yang semuanya relasional, dan ini harus kita pertimbangkan pada saat membuat
query. R:base 5000 lebih mendekati DBMS yang benar-bnar relasional dari pada
sebagian besar sistem manajemen yang didasarkan pada mikrokomputer.
Dalam solusi query di atas, hendaknya perlu kita perhatikan bahwa solusi ini
tidak bersifat unik. Biasanya terdapat beberapa cara untuk memperoleh solusi query.
Beberapa solusi dapat dipakai dengan kecepatan yangjauh lebih tinggi dari pada yang
lainnya, dan beberapa solusijuga mempunyai logika yangjauh lebih gampang untuk
diikuti. Cara terbaik untuk mempelajari cara menulis solusi yang baik adalah dengan
mempelajari solusi yang ditulis oleh orang lain dan kemudian kita tulis beberapa
solusi kita sendiri dengan menggunakan beberapa metode yang berbeda untuk
masing-masing masalah
10. 3
MENU
UT AMA
TERPROGRAM
UNTUK
SOL US I
QUERY
Query pada bagian 10.2 merupakan query yang ditanyakan oleh sekretaris
bowling yang khusus dan, kebanyakan, solusi query mudah dipahami dan jumlah
pernyataan R:base 5000 tidak terlalu panjang yang digunakn untuk menjawab
pertanyaan. Kita asumsikan bahwa sekretaris bowling akan memasukkan solusi
secara manual, meskipun panjang dari beberapa solusi dapat dengan mudah menimbulkan kesalahan dalam memasukkannya. Lebih lanjut sekretaris bowling hendaknya mempunyai pengetahuan yang cukup tentang teori database, dan sintak
R:base 5000 untuk menjabarkan solusi tersebut, bukan hanya sekedar menyalin.
Untuk membantu sekretaris dari kesulitan menjabarkan kembali sebuah solusi query
tiap waktu query tertcacahkan, sebuah menu yang sering digunakan query disimpan,
dan penyelesaian yang telah diprogram untuk setiap permintaan yang dilaksanakan
setiap saat untuk permintaan yang telah dipilih. Bagian berikut pada bab ini merupakan kerangka yang rinci tentang menu khusus serta program yang berhubungan
dengan menu itu.
Seperti yang terlihat oleh sekretaris, menu ini disajikan dalam Gambar 10.5.
Sedangkan modul program yang menguraikan menu, menerima pilihan menu, dan
kemudian mentransfer kontrol ke modul program terdapatpada Gambar 10.6:modul
ini dinamakan secdb.app.
143
MONDAY NIGHT IRREGULAR BOWLING LEAGUE QUERY MENU
(1)
DISPLAY STATISTICS FOR AN INDIVIDUAL BOWLER
(2)
DISPLAY TOTAL PINS FOR EACH TEAM
(3)
DISPLAY TEAM STANDING
(4)
DISPLAY SCHEDULE FOR A GIVEN WEEK
(5)
GENERATE AN END-OF-SEASON REPORT
(6)
RETURN TO RBASE 5000
Gambar 10.5 Menu utama yang dijabarkan oleh secdb.apx.
.COMMAND
SECDB
SETMESSAGE OFF
OPEN SDB
SET ERROR MESSAGE OFF
SET BAR PICKI INT
LABEL STARTAPP
NEWPAGE
CHOOSE PICK] ('J{OMsdbmain IN SECDB. APX
IF PICKI EQ
I THEN
J{UNbwlrsl. com
GO TO STARTAPP
ENDIF
IF PICKI EQ
2 THEN
RUN leampns IN SECOR. APX
GOTOSTARTAPP
ENDIF
IF PICKI EQ
3 THEN
RUN teampns IN SECDB. APX
GOTO STARTAPP
ENDIF
IF PICKI EQ
4 THEN
RUN wkschdl IN SECDB. APX
GO TO STARTAPP
ENDIF
IF PICKI EQ
5 THEN
RUN eosrpt. com
GOTO STARTAPP
ENDIF
IF PICKI EQ
6 THEN
GOTO ENDAPP
ENDIF
GOTO STARTAPP
LABEL ENDAPP
CLEAR PICK I
RETURN
-MENU
sdbmain
COLUMN MONDAY NIGHT IRREGULARS BOWLING LEAGUE QUERY MENU
DISPLA Y STATISTICS FOR AN INDIVIDUAL BOWLER
DISPLA Y TOTAL I'INS FOR EACH TEAM
DISPLA Y TEAM STANDINGS
DISPLA Y SCHEDULE FOR A GIVEN WEEK
GENERATE AN END-OF-SESAON
REPORT
RETURN TO RBASE 5000
Gambar 10.6 Modul program menu utama
144
Secdb.app dikembangkan dengan menggunakan APPLICATION EXPRESS,
paket utilitas perangkat lunak yang merupakan bagian dari R:base 5000. Untuk
menambah kecepatan, secdb.app dipadukan ke dalam modul yang mudah pelaksanaannya dengan nama secdb.apx. Jika R: base 5000 dibawa ke tingkat perintah
program menu ctilaksanakandengan urutan perintah sbb:
R>B:
R> RUN secdb IN secdb.apx
Jika salah satu dari 5pilihan pertama diambil, maka modul program yang ditulis
dalam bahasa pemprograman R: 5000 akan dilaksanakan. Pada gilirannya sebagian
dari modul ini akan memanggil submodullainnya. Modul program yang dipanggil ini
akan dibahas secara rinei pada bagian berikut. Pelaksanaan program yang dipakai
untuk menjabarkan keluaran yang ada pada bagian ini adalahjenis & program sumber
yang digabungkan.
10. 4
R: BASE 5000 PROGRAM MODUL BWLRST.PRG
Modul ini dipanggil oleh program menu utama pada saat pilihan menu adalah
"DISPLAY STATISTICS FOR AN INDIVIDUAL BOWLER". Pelaksanaan modul
ini mempengaruhi perhitungan dan keluaran berupa statistic untuk pemain individual. Statistik ini dapat diperoleh pada setiap minggu dalam masa perlombaan, sampai
dan meliputi minggu ke akhir dimana nilai di masukkan ke dalam database (logika
yang terdapat dalam modul ini ada pada gambar 10.7 programnya terdapat pada
gambar 10.8sedangkan keluaran khusus dari modul ini ada pada gambar 10.9)hanya
bagian logika BWRST.PRG yang perlu di tekankan adalah bagian kalkulasi hambatan (handicap) yang berisi dua peryataan.
SET VAR hndkp TO 200 - .bavg
SET VAR hndkp TO .hndkp X 0.75
"hndkp" Merupakan variabel yang dinyatakan sebagai I N T E G E R dan dipakai
untuk menampung hambatan yang ada sekarang untuk tiap individual "baug" juga
variabel INTEGER menampung rata-rata akhir pemain. Kedua peryataan tersebut
akan memecahkan persamaan tersebut dimana TRUNC merupakan fungsi trunkasi
(truncation)
handicap =TRUNC«200-currencaverage)*0.75)
145
1.
Determine the last week for which scores have been entered into the
SCORES relation. Store the week as "max_wk".
2.
Input the weekof the season for which statistics are desired as "wk", and
check the value for validity.
Input the name ofthe bowler for which statistics are desired as "name,"
and check the name for validity.
Using the SET POINTER feature of R:base 5000, identify aUtuples in
the SCORES relation that will be used in the calculations. (The
condition is that bname =name AND week .glb THEN
ASSIGN wins TOwins + 1.0 IN tstats WHERE !numb = .teamb
ASSIGN losses TOlosses + 1.0 IN tstats WHERE !numb
.teama
ELSE
.
IF glb
> .gla THEN
WHERE !numb
ASSIGN wins TOwins + 1.0 IN !Slats
WHERE !numb
ASSIGN losses TOlosses + 1.0 IN tstats
ELSE
ASSIGN wins TOwins + 0.5 IN tstats
+
WHERE !numb
.teama OR tnumb = .teamb
ASSIGN losses TOlosses + 0.5 IN tstats
+
WHERE !numb
.teama OR tnumb = .teamb
ENDIF
ENDIF
=
= .teama
= .teamb
=
=
.
.
(
)
IF g2a > .g2b THEN
ASSIGN wins TOwins + 1.0 IN tstats WHERE !numb = .teamb
ASSIGN losses TO losses + 1.0 IN tstats WHERE !numb = .teama
ELSE
IF g2b > .g2a TII EN
WHERE
!numb = .teama
ASSIGN wins TOwins + 1.0 IN tslats
ASSIGN losses TO losses + 1.0 IN lslats
WHERE
tnumb = .teamb
ELSE
ASSIGN wins TOwins + 0.5 1:'\ lstats
+
WHERE tnumb = .tcama OR tnumb = .leamb
ASSIGN losses TO losses + 0.5 1]\ tstals
+
WIIERE tnumb= .teama OR tnumb = .teamb
ENDIF
.
ENDIF
( )
IF g3a > .g3b THBN
ASSIGN wins TOwins + 1.0 IN !Slats WHERE tnumb .teamb
ASSIGN losses TOlosses + 1.0 IN !SIalS WHERE !numb
.teama
ELSE
IF g3b > .g3a THEN
WHERE !numb = .leama
ASSIGN wins TO wins + 1.0 IN lstats
ASSIGN losses TOlosses + 1.0 IN tstats
WHERE !numb :teamb
ELSE
+
ASSIGN wins TOwins + 0.5 IN tstats
WHERE !numb = .teama OR tnumb = .teamb
+
ASSIGN losses TOlosses + 0.5 IN tstats
WHERE !numb = .teama OR tnumb = .leamb
ENDIF
ENDIF
( )
SET VAR IOta TO .gla + .g2a
SET VAR tota TO .tota + .g3a
SET VAR tota TO .gIb + .g2b
SET VAR tota TO .totb + .g3b
IF tota > .totb THEN
ASSIGN wins TO wins + 1.0 Ub tstats WHERE tnumb = .teama
=
=
=
.
Gambar
10.21 (c) Bagian ketiga dari modul program teamstd.prg
161
ASSIGNlosses TO losses + 1.0 IN tstats WHEREtnumb = .teamb
ELSE
IF totb > .tota THEN
ASSIGN wins TO wins + 1.0 IN