2.1 Basisdata Temporal
Basisdata temporal dalam pengertian
yang umum adalah meliputi semua aplikasi yang memerlukan informasi waktu ketika
semua data diatur dalam basisdata. Aplikasi basisdata temporal telah
dikembangkan sejak dahulu ketika penggunaan basisdata ditemukan. Ada banyak aplikasi yang
memerlukan data waktu untuk memelihara informasi dalam basisdata. Misalnya
Rumah Sakit yang membutuhkan pemeliharaan riwayat penyakit pasien, reservation (hotel, perusahaan
penerbangan, persewaan mobil, dan lain-lain) yang mencatat waktu dan tanggal
pemesanan, asuransi yang membutuhkan pemeliharaan riwayat klaim dan riwayat
kecelakaan. Dalam basisdata perusahaan misalnya, suatu perusahaan akan
memelihara data tentang pekerjaan, gaji dan proyek dari seorang pegawai. Dalam
aplikasi FRS online juga memelihara data tentang nilai, matakuliah yang diambil
oleh mahasiswa tiap semester per tahun ajaran. Fakta-fakta diatas menunjukkan
bahwa secara nyata sebagian aplikasi basisdata memiliki beberapa informasi
temporal.
2.1.1 Kalender dan Dimensi Waktu
Dalam basisdata temporal, waktu
dianggap sebagai sequence atau
deretan titik dalam granularitas yang ditentukan oleh aplikasi. Seandainya
beberapa aplikasi temporal tidak pernah memerlukan unit-unit waktu yang lebih
kecil dari satu detik, maka setiap titik waktu bisa ditunjukkan dalam satu
detik dengan menggunakan granularitas ini. Namun dalam kenyataannya, setiap
detik adalah durasi pendek dari waktu, bukan titik, karena mungkin detik bisa
dibagi lagi kedalam bentuk yang lebih kecil yaitu milidetik, mikrodetik dan
seterusnya. Para ahli basisdata temporal telah
menggunakan istilah chronon sebagai
pengganti titik untuk menggambarkan granularitas minimal pada aplikasi
tertentu. Konsekuensi utama dengan memilih granularitas minimal adalah kejadian
yang terjadi pada saat yang bersamaan akan dianggap sebagai kejadian yang
simultan.
Karena tidak ada yang mengetahui waktu
waktu berawal dan berakhir, maka dibutuhkan suatu panduan yang menunjukkan
informasi tentang waktu. Berbagai kalender digunakan sebagai panduan waktu dan
bermacam-macam versi seperti kalender Gregorian, kalender Cina, kalender Islam,
dan lain-lain dengan acuan yang berbeda. Sebuah kalender mengorganisasikan
waktu menjadi unit-unit waktu yang berbeda. Kebanyakan kalender mengelompokkan
60 detik menjadi 1 menit, 60 menit menjadi 1 jam, 24 jam menjadi 1 hari
(berdasarkan rotasi bumi), dan 7 hari menjadi 1 minggu. Lebih jauh lagi
mengelompokkan hari menjadi minggu, mengelompokkan minggu menjadi bulan dan
bulan menjadi tahun. Pada kalender Gregorian, yang banyak digunakan oleh
negara-negara barat, sekumpulan hari dikelompokkan menjadi bulan dan satu bulan
bisa terdiri dari 28 hari, 29 hari, 30 hari atau 31 hari dan mengelompokkan 12
bulan menjadi 1 tahun.
Pada SQL2, tipe data temporal
menggunakan date yang menunjukkan
tahun, bulan, tanggal dengan format yyyy-mm-dd), time yang menunjukkan jam,
menit dan detik (hh:mm:ss) serta timestamp
yaitu kombinasi date dan time dengan pilihan pembagian detik ke
dalam sub-sub detik jika diperlukan. Oracle menyatakan timestamp dengan date.
2.1.2 Konsep Temporal
Sebuah basisdata temporal akan
menyimpan informasi ketika sebuah kejadian terjadi, atau ketika fakta tertentu
dianggap benar. Ada
beberapa jenis informasi temporal yang berbeda yaitu kejadian titik (point events) dan kejadian durasi (duration events).
Point
events adalah sebuah titik waktu tunggal dalam sebuah granularitas yang
dimasukkan ke dalam basisdata ketika fakta itu terjadi. Sebagai contoh kejadian
pada bank yang melayani deposito mungkin berhubungan dengan timestamp ketika transaksi deposito
terjadi. Duration events adalah
kebalikannya yaitu periode waktu tertentu dalam basisdata. Sebagai contoh
seorang pegawai mungkin sudah bekerja pada sebuah perusahaan dari tanggal 15
Agustus 1998 samapai dengan 20 Nopember 2004.
Periode waktu ditunjukkan oleh awal dan
akhir titik waktu [waktu-mulai, waktu-selesai]. Sebagai contoh suatu kejadian
ditunjukkan sebagai periode waktu [1998-8-15, 2004-11-20]. Periode waktu
demikian seringkali diartikan sebagai kumpulan titik-titik waktu dari
waktu-mulai sampai dengan waktu-selesai. Dengan menganggap granularitasnya hari
maka periode waktu [1998-8-15, 2004-11-20] menunjukkan himpunan semua hari dari
tanggal 15 Agustus 1998 sampai dengan 20 Nopember 2004.
2.1.3 Waktu Valid dan Waktu Transaksi
Fakta tertentu yang berhubungan
dengan titik waktu atau periode waktu dalam basisdata bisa diartikan
bermacam-macam. Arti yang paling alami dari waktu tersebut adalah waktu ketika
suatu kejadian terjadi atau periode waktu dimana sebuah kejadian dianggap benar
dalam dunia nyata. Jika pengertian ini digunakan maka waktu tersebut disebut
sebagai waktu valid. Basisdata temporal menggunakan arti ini sebagai valid time basisdata.
Terdapat
juga pengertian lain yaitu jika waktu menunjukkan saat informasi benar-benar
dimasukkan kedalam basisdata yaitu nilai dari jam sistem ketika informasi
trsebut valid di dalam sistem. Pada kasus ini, waktu tersebut disebut sebagai
waktu transaksi. Basisdata temporal menggunakan arti ini sebagai transaction time basisdata.
Dua
pengertian diatas dianggap yang paling umum dan ditunjuk sebagai
dimensi-dimensi waktu. Pada beberapa aplikasi hanya satu dari dimensi itu yang
digunakan dan dalam kasus lain kedua dimensi waktu tersebut digunakan.
Basisdata temporal yang menggunakan kedua dimensi waktu tersebut disebut
sebagai basisdata bitemporal.
2.1.4 Baris Versioning
Pada basisdata relasional bisa
ditambahkan atribut waktu yang menandai setiap perubahan pada baris. Penambahan
ini dinamakan baris versioning. Menurut kebutuhannya, pembuatan baris
versioning berkembang sebagai relasi waktu valid (valid time relation), relasi waktu transaksi (transaction time relation) dan relasi waktu bitemporal (bitemporal relation).
2.1.4.1 Relasi Waktu Valid
Sekarang akan dilihat perbedaan jenis
basisdata temporal yang ditunjukkan pada model relasional. Pertama, misal akan
disertakan riwayat perubahan sebagaimana yang terjadi pada dunia nyata.
Contohnya basisdata pada gambar 2.3
PEGAWAI
NAMA
|
NIP
|
GAJI
|
DNO
|
DEPARTEMEN
DEP_NAMA
|
DNO
|
MGR_NIP
|
Gambar 2.3 Contoh basisdata PERUSAHAAN
Diasumsikan untuk aplikasi ini
menggunakan granularitas hari. Kemudian dari kedua relasi diatas PEGAWAI
dan DEPARTEMEN
diubah menjadi relasi waktu valid dengan cara menambahkan atribut VST
(Valid Start Time) dan VET
(Valid End Time) yang tipe datanya
adalah date karena menggunakan granularitas hari. Hal ini ditunjukkan pada
gambar 2.3 dimana relasinya diganti menjadi PEG_VT dan DEPT_VT.
PEG_VT
NAMA
|
NIP
|
GAJI
|
DNO
|
VST
|
VET
|
DEPT_VT
DEP_NAMA
|
DNO
|
MGR_NIP
|
VST
|
VET
|
Gambar 2.4 Skema basisdata valid
time
Misal dibandingkan antara relasi PEG_VT
dengan relasi non temporal PEGAWAI pada gambar 2.3. Pada PEG_VT,
masing-masing baris V menyajikan informasi pegawai yang valid (di
dunia nyata) hanya selama periode waktu [V.VST, V.VET],
sementara pada PEGAWAI, masing-masing baris menyajikan hanya
informasi saat ini dari masing-masing pegawai. Pada PEG_VET,
informasi saat ini dari masing-masing pegawai memiliki nilai yang khusus yaitu now sebagai valid end time. Nilai now
adalah variabel temporal yang secara implisit menyajikan waktu saat ini. Pada
relasi non temporal PEGAWAI hanya akan melibatkan baris dari PEG_VT
yang VET-nya
adalah now.
PEG_VT
NAMA
|
NIP
|
GAJI
|
DNO
|
VST
|
VET
|
Andi
|
1234
|
20000
|
5
|
2000-06-15
|
2001-05-31
|
Andi
|
1234
|
25000
|
5
|
2001-06-01
|
Now
|
Jundi
|
1222
|
25000
|
4
|
1998-08-20
|
1999-01-31
|
Jundi
|
1222
|
30000
|
5
|
1999-02-01
|
2000-03-31
|
Jundi
|
1222
|
40000
|
5
|
2000-04-01
|
Now
|
Fathur
|
1231
|
28000
|
4
|
1998-05-01
|
1999-08-10
|
Umar
|
1331
|
38000
|
5
|
2000-08-01
|
Now
|
DEPT_VT
DEP_NAMA
|
DNO
|
MGR_NIP
|
VST
|
VET
|
Riset
|
5
|
1220
|
1998-09-20
|
1999-03-31
|
Riset
|
5
|
1222
|
1999-03-31
|
Now
|
Tabel 2.1 Beberapa versi baris pada relasi valid time PEG_VT dan DEPT_VT
Tabel
2.1 diatas menunjukkan beberapa baris pada relasi valid time PEG_VT dan DEPT_VT. Ada dua versi dari Andi,
tiga versi dari Jundi, satu versi dari Fathur dan satu versi dari Umar.
Sekarang dapat dilihat bagaimana relasi valid
time berlaku ketika informasi diubah. Ketika satu atau lebih atribut dari
pegawai diubah, maka tidak akan dilakukan penindasan data pada baris yang
diubah tersebut melainkan dengan cara membuat versi yang baru dan menutup versi
saat ini dengan cara mengubah VET menjadi waktu berakhir. Pada saat user mengubah gaji Andi pada tanggal 1
Juni 2001 menjadi 25000, versi kedua dari Andi telah dibuat. Pada saat data
diubah, versi pertama dari Andi adalah pada kolom VET berisi now, tetapi setelah diubah, now berubah menjadi 31 Mei 2001 (1 hari
sebelum tanggal 1 Juni karena menggunakan granularitas hari), untuk menunjukkan
bahwa versi tersebut telah ditutup atau tidak berlaku lagi dan versi yang kedua
adalah versi yang terbaru.
Perlu diperhatikan bahwa pada relsi
valid time, user harus menyediakan
waktu valid secara umum ketika terjadi perubahan data. Contohnya data gaji Andi
yang diubah masuk dalam basisdata pada tanggal 15 Mei 2001jam 8 pagi, walaupun
gaji baru yang diterima Andi secara nyata diterima tanggal 1 Juni 2001. Hal ini
disebut dengan proactive update,
karena data yang dimasukkan dalam basisdata adalah belum terjadi pada dunia
nyata. Jika data yang dimasukkan dalam basisdata adalah setelah terjadi pada
dunia nyata makan disebut dengan retroactive
update. Jika data yang dimasukkan dalam basisdata adalah bersamaan saat
terjadi di dunia nyata maka hal ini disebut dengan simultaneous update.
Operasi
menghapus pegawai dalam basisdata temporal dilakukan dengan menmbahkan valid time untuk menunjukkan bahwa versi
saat ini telah ditutup dan tidak berlaku lagi. Contohnya jika Andi meninggalkan
pekerjaannya pada 19 Januari 2001, kemudian VET akan diubah
dari now menjadi 2001-01-19. Pada
tabel 2.1 tidak ada versi saat ini dari Fathur karena dia meninggalkan
pekerjaannya pada 1999-08-10 dan secara logika data tersebut telah terhapus.
Tetapi karena menggunakan basisdata temporal, maka informasi Fathur yang lama
masih tersedia.
Operasi
insert pegawai baru dilakukan dengan
menciptakan baris versi pertama dari pegawai yang baru tersebut, dan membuat
versi saat ini, dengan VST menjadi waktu efektif ketika dia pertama
kali bekerja. Pada tabel 2.1 digambarkan Umar yang baru masuk kerja pada
2000-08-01.
Perlu
dicatat bahwa pada relasi valid time,
kunci (key) dari non temporal seperti
NIP
pada PEGAWAI,
tidak lagi menjadi unik pada masing-masing baris. Kunci dari relasi baru PEG_VT
adalah kombinasi dari kunci non temporal dan VST. Jadi digunakan
(NIP,
VST) sebagai primary key.
2.1.4.2 Relasi Waktu Transaksi
Pada basisdata transaction time, ketika terjadi perubahan pada basisdata,
timestamp yang sebenarnya dari waktu transaksi perubahan baik itu operasi insert, update maupun delete selalu dicatat. Jika basisdata
non temporal PEGAWAI pada contoh diatas diubah menjadi
basisdata transaction time, maka akan
ditambahkan dengan atribut TST (Transaction Start Time) dan TET (Transaction End Time) yang tipe datanya
adalah timestamp. Relasi PEGAWAI dan DEPARTEMEN diatas
diubah menjadi PEG_TST dan DEPT_TST, ini
ditunjukkan pada gambar 2.5
PEG_TT
NAMA
|
NIP
|
GAJI
|
DNO
|
TST
|
TET
|
DEPT_TT
DEP_NAMA
|
DNO
|
MGR_NIP
|
TST
|
TET
|
Gambar 2.5 Skema basisdata transaction
time
Pada PEG_TT,
masing-masing baris V menyajikan versi informasi dari pegawai
yang dibuat pada waktu yang sebenarnya yaitu V.TST dan secara
logika telah dihapus pada waktu yang sebenarnya yaitu V.TET. pada PEG_TT,
versi saat ini dari masing-masing pegawai memiliki nilai khusus yaitu uc (until change) yang menunjukkan waktu
transaksi berakhir dan menunjukkan bahwa baris tersebut adalah valid sampai
baris tersebut diubah oleh transaksi yang lain.
2.1.4.3 Relasi Waktu Bitemporal
Beberapa aplikasi membutuhkan baik valid time maupun transaction time. Basisdata yang menggunakan kedua dimensi waktu
tersebut dinamakan basisdata bitemporal. Contohnya terdapat pada gambar 2.6
yang menunjukkan skema relasi waktu bitemporal.
PEG_BT
NAMA
|
NIP
|
GAJI
|
DNO
|
VST
|
VET
|
TST
|
TET
|
DEPT_BT
DEP_NAMA
|
DNO
|
MGR_NIP
|
VST
|
VET
|
TST
|
TET
|
Gambar 2.6 Skema basisdata bitemporal
time
Pada gambar diatas menunjukkan bagaiman
PEGAWAI
dan DEPARTEMEN pada relasi non temporal menjadi relasi
bitemporal yaitu PEG_BT dan DEPARTEMEN_BT.
Tabel 2.2 dibawah menunjukkan beberapa baris dalam relasi bitemporal.
PEG_BT
|
NAMA
|
NIP
|
GAJI
|
DNO
|
VST
|
VET
|
TST
|
TET
|
v1
|
Andi
|
1234
|
20000
|
5
|
1997-06-15
|
now
|
1997-06-08,
13:05:58
|
1998-06-04,
08:56:12
|
v2
|
Andi
|
1234
|
20000
|
5
|
1997-06-15
|
1998-05-31
|
1998-06-04,
08:56:12
|
Uc
|
v3
|
Andi
|
1234
|
25000
|
5
|
1998-06-01
|
now
|
1998-06-04,
08:56:12
|
Uc
|
v4
|
Jundi
|
1222
|
30000
|
4
|
1996-05-01
|
now
|
1996-04-27,
16:22:05
|
1997-08-12,
10:11:07
|
v5
|
Jundi
|
1222
|
30000
|
4
|
1996-05-01
|
1997-08-10
|
1997-08-12,
10:11:07
|
Uc
|
v6
|
Umar
|
1331
|
38000
|
5
|
1998-08-01
|
now
|
1998-07-28,
09:25:37
|
Uc
|
DEPT_BT
|
D_NAMA
|
DNO
|
MGR_NIP
|
VST
|
VET
|
TST
|
TET
|
v7
|
Riset
|
5
|
1220
|
1996-09-20
|
now
|
1996-09-15,
14:52:12
|
1996-03-28,
09:23:57
|
v8
|
Riset
|
5
|
1220
|
1996-09-20
|
1997-03-31
|
1997-03-28,
09:23:57
|
Uc
|
v9
|
Riset
|
5
|
1221
|
1997-04-01
|
now
|
1997-03-28,
09:23:57
|
Uc
|
|
Pada tabel diatas, baris yang memiliki TET
uc adalah baris yang menunjukkan informasi valid saat ini, sementara baris yang
yang TET-nya
adalah timestamp maka baris tersebut valid sampai timestamp tersebut
dimasukkan. Atribut TST pada masing-masing baris adalah timestamp
yang menunjukkan kapan transaksi tersebut berawal.
Sekarang akan dibahas bagaimana operasi
update dilakukan pada relasi bitemporal. Pada model basisdata temporal, tidak
ada atribut yang secara fisik berubah pada setiap baris kecuali untuk atribut TET
dengan nilai uc. Untuk menggambarkan bagaiman menciptakan sebuah baris baru,
maka dicontohkan pada relasi PEG_BT. Versi saat ini V
pada pegawai memiliki uc pada atribut TET-nya. Jika suatu atribut misalnya
gaji akan diupdate, maka transaksi T yang menunjukkan operasi update
harus memiliki dua parameter yaitu nilai baru dari gaji dan VT
ketika gaji baru menjadi efektif pada dunia nyata. Diasumsikan bahwa VT- adalah
titik waktu sebelum VT diisi dengan nilai granularitas valid time
dan transaksi T memiliki timestamp TS(T).
Kemudian aturan dibawah ini menunjukkan bagaimana operasi update dilakukan pada
tabel PEG_BT:
1.
Membuat duplikat v2
pada versi V saat ini; set v2.VET
menjadi VT-, v2.TST
menjadi TS(T), v2.TET menjadi uc, dan insert v2 pada EMP_BT; v2 adalah
duplikat dari versi V setelah ditutup pada valid time VT-.
2.
Membuat duplikat v3
pada versi V saat ini; set v3.VST
menjadi VT, v3.VET
menjadi now, v3.GAJI
menjadi gaji yang baru, v3.TST menjadi TS(T), v3.TET menjadi uc dan insert v3
pada PEG_BT; v3 menunjukkan versi yang terbaru
saat ini.
3.
Set V.TET menjadi TS(T) karena versi yang sekarang sudah tidak menunjukkan
lagi informasi yang benar.
Seperti pada ilustrasi diatas,
dimisalkan 3 baris pertama disebut dengan v1, v2 dan v3
pada PEG_BT.
Sebelum gaji Andi berubah dari 20000 menjadi 25000, hanya v1 yang ada pada PEG_BT
dan merupakan versi yang saat itu berlaku, TET-nya adalah uc.
Kemudian transaksi T yang timestamp TS(T) adalah
1998-06-04, 08:56:12
melakukan update gaji menjadi 25000 dengan valid
time yang efektif 1998-06-01. Baris v2 tercipta, yang
merupakan duplikat v1 kecuali pada atribut VET
yang diset menjadi 1998-05-31, satu hari sebelum valid time yang terbaru dan TST-nya adalah
timestamp pada saat terjadi update gaji. Baris v3 juga tercipta,
yang memiliki gaji baru, VST-nya diset menjadi 1998-06-01, dan TST-nya
juga timestamp yang menunjukkan waktu transaksi update. Akhirnya, TET
dari v1
diset menjadi timestamp pada saat transaksi terjadi, 1998-06-04, 08:56:12. Sebagai catatan bahwa
operasi diatas menggunakan retroactive
update.
Untuk operasi delete pada model relasi
bitemporal digunakan contoh v4 dan v5 dari relasi PEG_BT
diatas. Disini pegawai yang bernama Jundi meninggalkan perusahaan pada 10
Agustus 1997, dan operasi delete secara logika ditunjukkan oleh transaksi T
dengan TS(T) = 1997-08-12, 10:11:07. Sebelumnya, v4 adalah versi
saat ini dan TET-nya adalah uc. Operasi delete secara
logika diimplementasikan dengan mengeset v9.TET menjadi
1997-08-12, 10:11:07, dan
menciptakan versi akhir v5 untuk Jundi dengan VET adalah
1997-08-10.
Untuk operasi insert versi pertama
untuk pegawai baru ditunjukkan oleh contoh v6. Disini pegawai
yang bernama Umar masuk ke perusahaan secara logika ditunjukkan oleh transaksi T(TS)
= 1998-07-28, 09:25:37,
dengan VET diset menjadi now dan TET diset menjadi
uc.
No comments:
Post a Comment
silahkan membaca dan berkomentar