Translate

Sunday, August 7, 2016

Basisdata Temporal



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

 
Tabel 2.2 Beberapa versi baris pada relasi bitemporal PEG_BT dan DEPT_BT
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