Mengapa Waktu Penting
Basis data konvensional hanya menyimpan snapshot dunia nyata pada satu instan waktu (umumnya “sekarang”) — ketika sebuah atribut memperoleh nilai baru, nilai lama dihapus. Padahal waktu adalah aspek penting dari fenomena dunia nyata: peristiwa (event) terjadi pada titik waktu tertentu, tetapi objek dan relasi eksis sepanjang waktu.
Metode desain basis data konvensional tidak menyediakan cara untuk melacak perubahan setiap objek dari waktu ke waktu, padahal kemampuan menelusuri histori objek dibutuhkan untuk: melacak tren/mendeteksi anomali, dan membantu memahami peristiwa masa lalu.
Pendekatan lama menggunakan history file dan log file secara manual: membutuhkan penanganan khusus via program, lebih sulit dan lama untuk dikembangkan, serta rentan berubah bila kebutuhan data berubah. Akibatnya: sulit memvalidasi perubahan data dari waktu ke waktu, dan sulit menulis query SQL standar untuk memperoleh informasi historis.
Basis Data Temporal
Basis data temporal mendukung manajemen informasi yang berubah seiring waktu (time-varying information). Hampir tidak ada aplikasi yang benar-benar lepas dari data yang mereferensikan waktu.
Dua aspek temporal yang paling umum diminati:
- Valid time: kapan data tersebut benar/berlaku di dunia nyata.
- Transaction time: kapan data tersebut dicatat di dalam basis data.
Teknologi basis data konvensional hanya memberi dukungan minim terhadap kedua aspek ini. Tantangan utama basis data temporal adalah menyediakan dukungan built-in untuk konsep-konsep temporal (bukan ditangani manual oleh aplikasi).
Studi Kasus: Riwayat Gaji Pegawai
Misalkan skema awal: Employee(Name, Salary, Job). Query “berapa gaji Bob?” mudah dijawab dengan SQL biasa.
Ketika riwayat kepegawaian ingin disimpan, skema diperluas dengan periode berlaku:
Employee(Name, Salary, Job, Start DATE, End DATE)
Kolom Start dan End memodelkan waktu di mana fakta tersebut berlaku di dunia nyata (valid time).
Query gaji saat ini:
select Salary
from Employee
where Name = 'Bob'
and Start <= CURRENT_DATE
and CURRENT_DATE <= EndQuery riwayat gaji Bob (menampilkan periode maksimal untuk tiap nilai gaji yang konstan) ternyata jauh lebih sulit: query yang benar bukan sekadar menampilkan semua baris, melainkan harus melakukan coalescing — menggabungkan tuple yang berurutan (overlapping/berdekatan) dan value-equivalent (nilai gajinya sama) menjadi satu periode maksimal.
Beberapa alternatif solusi untuk masalah coalescing di atas:
- Pendekatan iteratif: pasangan tuple yang overlap/berdekatan dan value-equivalent digabungkan berulang.
- Seluruhnya dalam SQL menggunakan klausa
not existsbertingkat. - Menggunakan cursor dalam fungsi (PL/SQL).
- Menggunakan SQL window function untuk coalesce tabel.
- Reorganisasi skema (memisahkan informasi gaji dan jabatan ke relasi berbeda) — namun ini memunculkan kebutuhan temporal join ketika ingin menggabungkan kembali informasi gaji dan jabatan pada satu query.
Studi kasus ini menunjukkan bahwa menangani data temporal dengan model relasional biasa itu sulit dan tidak natural, sehingga dibutuhkan model data temporal khusus (lihat BCDM).
Domain Waktu (Time Domain)
Struktur
- Linear time: waktu berjalan dari masa lalu ke masa depan secara bertahap (langkah demi langkah).
- Branching time (possible future/model hipotesis): waktu linear dari masa lalu hingga “sekarang”, lalu bercabang menjadi beberapa jalur waktu di masa depan (struktur berupa pohon berakar di “sekarang”).
Kepadatan (Density)
- Discrete time: instan waktu adalah unit tak-terbagi dengan durasi positif, disebut chronon (durasi waktu terkecil yang dapat direpresentasikan). Isomorfik terhadap bilangan asli (natural numbers).
- Dense time: di antara dua instan waktu selalu ada instan lain. Isomorfik terhadap bilangan rasional.
- Continuous time: dense tanpa “celah” antar-instan berurutan; instan waktu tidak berdurasi (durationless). Isomorfik terhadap bilangan real.
Boundness dan Anchoring
- Boundness: waktu bisa dibatasi (bounded) di masa lalu dan/atau masa depan (ada instan pertama/terakhir).
- Relative (unanchored) vs absolute (anchored): “9 pagi 1 Januari 2000” adalah waktu absolut; “9 jam” adalah waktu relatif.
Model yang Umum Dipakai
Meskipun manusia mempersepsikan waktu sebagai kontinu, basis data temporal umumnya menggunakan model discrete, linear, unbounded karena alasan praktis: ukuran waktu umumnya dilaporkan dalam chronon, referensi bahasa alami kompatibel dengan chronon (mis. “jam 4:30 sore”), chronon memudahkan pemodelan durative event, implementasi memerlukan encoding waktu yang diskret, dan waktu terus bertambah tanpa batas atas. Tantangan: merepresentasikan gerakan kontinu (mis. objek bergerak dari titik A ke B) dalam waktu diskret — dibahas lebih lanjut di Moving Object Database.
Granularity (Granularitas)
Granularity adalah partisi garis waktu (chronon) menjadi himpunan segmen berhingga yang disebut granule — citra diskret dari waktu (yang mungkin kontinu), menyediakan satuan ukur yang ramah pengguna untuk data temporal (mis. tanggal lahir biasanya bergranularitas hari, janji temu bisnis bergranularitas jam).
Dua pendekatan menangani granularitas:
- Single database wide granularity: seluruh basis data direpresentasikan pada satu level granularitas optimum (chronon tunggal).
- Multiple granularities: dibutuhkan fungsi konversi dan perbandingan antar-granularitas yang berbeda.
Model Data Temporal
Model data secara umum: , dengan = himpunan struktur data, = bahasa query/update. Pada model relasional: = relasi, = SQL.
Beberapa aspek pemodelan waktu yang harus dipertimbangkan (dan tidak ada satu pilihan tunggal yang disepakati selama >20 tahun riset):
- Dimensi waktu mana yang dipakai? (transaction time, valid time, decision time, dsb)
- Tipe timestamp apa yang dipakai? (titik, periode, himpunan titik, dsb)
- Informasi apa yang di-timestamp? (objek, fakta, bagian dari objek, dsb)
Dimensi Waktu
Waktu bersifat multi-dimensional (valid time, transaction time, publication time, efficacy time, decision time, dsb), tetapi ada konsensus luas bahwa valid time dan transaction time adalah dua dimensi terpenting.
Valid Time
Waktu ketika sebuah fakta pernah/sedang/akan benar di dunia nyata yang dimodelkan. Contoh: “John dipekerjakan sejak 1 Oktober 2001”. Valid time menangkap keadaan dunia yang berubah terhadap waktu (time-varying states of the mini world). Semua fakta memiliki valid time secara definisi, meski mungkin tidak dicatat di basis data. Valid time independen dari kapan fakta itu dicatat. Bisa bounded (tidak sampai tak hingga) atau unbounded (sampai tak hingga).
Transaction Time
Waktu ketika sebuah fakta current/present di basis data sebagai data yang tersimpan. Contoh: fakta “John dipekerjakan sejak 1 Oktober 2001” disimpan di basis data pada 5 Oktober 2001, dan dihapus pada 31 Maret 2005. Transaction time memiliki durasi (dari insersi ke penghapusan), dan bisa terjadi berkali-kali (multiple insert/delete) untuk fakta yang sama. Konsekuensi semantik ini: penghapusan fakta bersifat logical — fakta tetap ada di basis data, tetapi berhenti menjadi bagian dari current state.
Transaction time selalu bounded pada kedua ujungnya: mulai saat basis data dibuat, dan tidak melampaui “sekarang” (tidak ada fakta yang diketahui akan disimpan di masa depan). Menjadi basis dukungan akuntabilitas dan ketertelusuran (mis. aplikasi finansial, hukum, medis). Bisa disediakan otomatis oleh DBMS.
Klasifikasi Model Data berdasar Dimensi
| Model | Dimensi yang Didukung |
|---|---|
| Snapshot | Tidak ada |
| Valid-time | Hanya valid time |
| Transaction-time | Hanya transaction time |
| Bitemporal | Valid time dan transaction time |
Snapshot data model: semua data dianggap current pada satu titik waktu (umumnya “sekarang”); update menghapus nilai lama. Mayoritas model data (relasional konvensional) termasuk kategori ini.
Transaction-time data model: model statis yang mengelola histori basis data di masa lalu, dengan mencatat transaction time tiap objek yang diindeks berdasarkan waktu mulainya transaksi; memberi informasi kapan data dimasukkan dan dihapus dari basis data.
Valid-time data model: mengelola waktu ketika data berlaku di dunia nyata, dengan mencatat semua state masa lalu; setiap state memiliki timestamp awal dan akhir validitas. Update menghapus nilai lama (berbeda dari transaction-time yang bersifat append-only).
Bitemporal data model: kombinasi transaction-time dan valid-time data model, mencatat kapan data berlaku di dunia nyata dan kapan data current di basis data. Secara umum, tidak ada keterkaitan langsung antara valid-time dan transaction-time suatu fakta. Jensen dan Snodgrass menciptakan klasifikasi formal untuk subset model bitemporal ini — dibahas di BCDM.
Timestamp: Tipe dan Cara Penempatan
Timestamp adalah nilai waktu yang diasosiasikan dengan nilai atribut atau tuple pada basis data, merepresentasikan aspek temporal (valid time/transaction time), direpresentasikan sebagai satu atau lebih atribut/kolom relasi.
Tiga Tipe Timestamp
- Time points (titik waktu)
- Time periods (periode waktu)
- Temporal elements (elemen temporal)
Point-Based Data Model
Setiap tuple di-timestamp dengan satu time point/instant. Model paling sederhana; timestamp dapat dibandingkan langsung dengan . Bila sebuah fakta berlaku pada beberapa titik waktu, dibutuhkan beberapa tuple. Model ini bersifat abstrak (tidak dimaksudkan untuk implementasi fisik), populer untuk studi teoretis karena kesederhanaan konsepnya. Kelemahan: rekonstruksi relasi asli tidak selalu mungkin — mis. tidak dapat membedakan apakah suatu peminjaman selama 4 hari berturut-turut merupakan satu transaksi 4 hari atau dua transaksi 2 hari yang kebetulan berurutan, kecuali ditambahkan atribut tambahan (mis. SeqNo).
Period-Based Data Model (Interval-Based)
Setiap tuple di-timestamp dengan satu periode waktu. Timestamp dapat dibandingkan menggunakan 13 relasi dasar Allen (before, meets, overlaps, starts, during, finishes, equals, dan invers-nya). Bila fakta berlaku pada beberapa periode terpisah, dibutuhkan beberapa tuple (atribut SeqNo tidak lagi diperlukan untuk membedakan tuple karena periode sudah unik). Model paling populer untuk implementasi. Periode tidak tertutup (not closed) terhadap semua operasi himpunan — mis. mengurangi dari menghasilkan dua periode .
Dua varian semantik model period-based:
- Weak period-based model: pandangan berbasis titik (point-based) secara semantik — periode hanya representasi ringkas dari himpunan titik waktu yang kontinu. Dua relasi yang berbeda secara sintaksis namun mewakili himpunan titik waktu yang sama dianggap setara (snapshot equivalent). Coalescing relasi menjadi masuk akal. Kelemahan: tidak bisa membedakan satu penyewaan 4 hari dari dua penyewaan 2 hari berurutan tanpa atribut tambahan.
- Strong period-based model: periode adalah unit atomik yang membawa makna/semantik sendiri (bukan sekadar sekumpulan titik). Dua relasi yang berbeda secara sintaksis dianggap berisi informasi berbeda — mis. satu penyewaan 4-hari berbeda dari dua penyewaan 2-hari berurutan (mis. relevan untuk perhitungan biaya berbeda). Model ini tidak memaksakan coalescing secara inheren.
Data Model dengan Temporal Elements
Setiap tuple di-timestamp dengan temporal element, yaitu union berhingga dari periode-periode. Seluruh histori sebuah fakta disimpan dalam satu tuple. Bisa memakai semantik point-based atau period-based (seperti model period-based). Di bawah pandangan point-based, relasi yang berbeda secara sintaksis namun merepresentasikan union periode yang sama dianggap ekuivalen.
Tuple Timestamping vs Attribute Value Timestamping
- Tuple timestamping: setiap tuple di-timestamp dengan satu set titik/periode waktu. Sesuai kaidah relasi standar (setiap atribut bersifat atomik → 1NF). Teori relasional konvensional masih dapat diterapkan pada level tertentu.
- Attribute value timestamping: setiap nilai atribut di-timestamp dengan sendiri-sendiri. Menangkap seluruh informasi tentang satu objek dunia nyata dalam satu tuple (mis. seluruh riwayat pelanggan dalam satu baris), tetapi informasi tentang objek lain (mis. tape/kaset) menjadi tersebar di berbagai tuple. Satu tuple bisa mencatat banyak fakta sekaligus — merupakan model non-1NF (nested/non-atomik).
Sumber
- T. Widagdo: “Temporal Databases”, course materials, Departemen Teknik Informatika ITB, 2003.
- J. Gamper: “Chapter 2: Conceptual Temporal Data Models”, TSDB course materials, Free University of Bozen, 2012.
- A. Dignos: “Introduction SL01”, TSDB course materials, Free University of Bozen, 2014/2015.
Flashcard
flashcards Apa perbedaan valid time dan transaction time? :: Valid time = kapan fakta benar/berlaku di dunia nyata; transaction time = kapan fakta tersebut dicatat sebagai current di basis data. Apa itu chronon? :: Unit waktu terkecil yang tidak dapat dibagi lagi (durasi positif) yang dapat direpresentasikan dalam model waktu diskret. Mengapa transaction time selalu bounded pada kedua ujungnya? :: Karena dimulai saat basis data dibuat dan tidak dapat melampaui “sekarang” (belum ada fakta yang diketahui akan disimpan di masa depan). Sebutkan empat klasifikasi model data berdasarkan dimensi waktu yang didukung :: Snapshot (tidak ada), valid-time (hanya valid time), transaction-time (hanya transaction time), dan bitemporal (keduanya). Apa perbedaan mendasar antara weak period-based model dan strong period-based model? :: Weak: periode hanya representasi ringkas himpunan titik waktu, relasi sintaksis berbeda tapi setara snapshot dianggap sama (mendukung coalescing); Strong: periode adalah unit atomik bermakna sendiri, relasi sintaksis berbeda dianggap berisi informasi berbeda. Apa perbedaan tuple timestamping dan attribute value timestamping? :: Tuple timestamping menempelkan timestamp pada seluruh tuple (tetap 1NF); attribute value timestamping menempelkan timestamp pada tiap nilai atribut secara individual (non-1NF, satu tuple bisa berisi banyak fakta). Kenapa query “riwayat gaji Bob” sulit dijawab dengan SQL biasa pada skema Employee(Name,Salary,Job,Start,End)? :: Karena membutuhkan coalescing tuple yang overlap/berdekatan dan value-equivalent menjadi periode maksimal, yang tidak didukung langsung oleh operasi SQL standar. Sebutkan 13 relasi dasar Allen digunakan untuk membandingkan apa? :: Untuk membandingkan dua periode waktu (interval), mis. before, meets, overlaps, starts, during, finishes, equals beserta inversnya.