- Representation of “Real World” entities
Proses normalisasi pada umumnya akan membuat relasi yang tidak berhubungan
dengan entitas pada “dunia nyata”. Fragmentasi dari entitas “dunia nyata” ke dalam
beberapa relasi, dengan sebuah representasi fisik akan menggambarkan struktur yang
tidak efisien karena akan melakukan banyak join selama proses query.
- Semantic overloading
Model relasional hanya mempunyai satu konstruksi untuk menggambarkan data dan
keterhubungannya. Sebagai contoh : untuk menggambarkan keterhubungan M : N dari
entitas A dan B, kita membuat 3 relasi, satu untuk menggambarkan masing-masing
entitas A dan B, dan satu menggambarkan keterhubungannya (relationship). Tidak ada
mekanisme untuk membedakan antara entitas dan relationship, atau untuk
membedakan antara jenis relationship yang berbeda yang terdapat di antara entitas.
Sebagai contoh : relationship 1 : M dapat berarti memiliki, mempunyai, mengatur, dsb.
Jika perbedaan seperti itu dapat dibuat, maka mungkin dapat membangun semantik
pada operasi-operasi tersebut. Oleh karena itu model relasional merupakan semantically oevrloaded.
- Integrity constraints and enterprise constraints
Integrity berhubungan dengan validitas dan kekonsistenan dari data yang disimpan.
Integrity biasanya diekspresikan dalam istilah-istilah yang berhubungan dengan
constraint, dimana aturan-aturan kekonsistenan pada database tidak boleh dilanggar.
Sangat disayangkan bahwa banyak sistem komersial tidak mendukung batasan- batasan itu, dan sistem tersebut lebih mengutamakan membuat batasan-batasannya di dalam aplikasi. Tentu saja hal ini sangat berbahaya dan dapat menimbulkan duplikasi data, dan lebih buruk lagi data berada dalam keadaan tidak konsisten. Lebih jauh lagi, tidak ada dukungan untuk aturan-aturan enterprise dalam model relasional, yang artinya aturan-aturan tersebut harus dibangun ke dalam DBMS atau aplikasi.
- Homogeneous data
Model relasional mengasumsikan homogenitas horisontal dan vertikal. Homogenitas
horisontal berarti bahwa setiap tuple dari sebuah relasi harus disusun dari atribut- atribut yang sejenis. Homogenitas vertikal berarti bahwa nilai di dalam kolom dari sebuah relasi harus berasal dari domain yang sama (sejenis). Dan irisan (intersection) antara baris dan kolom harus bernilai atomik. Struktur yang tetap seperti ini sangat terbatas untuk beberapa objek “dunia nyata” yang mempunyai struktur kompleks. Sebagai contoh : pesawat terbang.
- Limited operations
Model relasional merupakan himpunan (set) yang sudah tetap, seperti operasi
himpunan (set) dan operasi tuple-oriented. Operasi-operasi ini disediakan oleh SQL.
- Recursive Query
Recursive query merupakan proses query dari relationship yang berelasi dengan
dirinya sendiri (baik secara langsung atau tidak langsung). Sebagai contoh : terdapat
relasi sederhana dari relasi Staff yang menyimpan nomor staf dan manajer-nya.
Staff_No | Manager_Staff_No |
S5 | S4 |
S4 | S3 |
S3 | S2 |
S2 | S1 |
S1 | NULL |
Bagaimana mencari para manajer yang secara langsung atau tidak langsung mengatur
(manage) anggota staf no S5 ?
Terdapat 2 tingkat hirarki :
SELECT manager_staff_no FROM staff WHERE staff_no = ‘S5’
UNION
SELECT manager_staff_no FROM staff WHERE staff_no =
(SELECT manager_staff_no FROM staff WHERE staff_no = ‘S5’);
Di dalam contoh ini, pendekatan ini berhasil karena kita mengetahui berapa tingkatan
dalam hirarki yang harus diproses. Tetapi jika untuk mendapatkan hasil yang lain seperti
“untuk setiap anggota staff, tampilkan seluruh manajer baik yang secara langsung
ataupun tidak langsung mengatur (manage) staf tersebut”, maka pendekatan seperti di
atas akan lebih sulit untuk diimplementasikan dengan menggunakan SQL. Untuk
mengatasi masalah ini, SQL dapat ditempelkan (embedded) pada bahasa
pemrograman tingkat tinggi, yang menyediakan konstruksi untuk fasilitas iterasi.
Sebagai tambahan, banyak sistem relasional yang menyediakan report writer dengan
konstruksi yang mirip.
- Impedance mismatch
Perhitungan dengan menggunakan SQL kurang lengkap. Untuk mengatasi hal ini, SQL
standar menyediakan embedded SQL untuk membangun aplikasi database yang lebih
kompleks. Tetapi pendekatan ini menghasilkan sebuah “Impedance mismatch” karena
kita mencocokan paradigma pemrograman yang berbeda. SQL merupakan sebuah
bahasa yang menangani baris (record), sedangkan sebuah bahasa tingkat tinggi seperti C merupakan bahasa prosedural yang dapat menangani hanya 1 baris pada suatu saat.
Kedua : SQL dan 3 GLs menggunakan model-model yang berbeda untuk
menggambarkan data. Sebagai contoh : SQL bisa berisikan jenis data date dan interval yang tidak tersedia di dalam bahasa pemrograman tradisional. Oleh karena itu
merupakan hal yang sangat penting bagi program aplikasi untuk mengkonversi dua tipe data tadi, sehingga menjadi tidak efisien. Lebih jauh lagi, karena kita menggunakan 2 tipe sistem yang berbeda, maka sangat tidak mungkin secara otomatis menguji aplikasi secara keseluruhan.
Tidak ada komentar:
Posting Komentar