2.2. Basis Data Relational Objek
2.2.3. Fitur-fitur yang ada di ORDBMS
a. Object Types and User-Defined Types
Dalam Oracle ™, sebuah pernyataan "create type"
digunakan untuk membuat tipe data baru (tipe objek) yang
kemudian dapat digunakan sebagai generic type untuk membuat
tabel menggunakan pernyataan "create table" atau untuk membuat tipe data lain.
Contoh Oracle™ object type :
Gambar 2. 2 Contoh object type
"as object" digunakan setelah membuat tipe objek. Perhatikan bahwa "or replace" adalah opsional. Dengan memiliki frase tambahan, sebuah objek dengan nama yang sama secara otomatis akan diganti dengan versi terbaru dari jenis objek.
b. Collection Types
Oracle ™ memungkinkan penciptaan sebuah tipe array
(varray atau bervariasi array). Sintaks tersebut dasarnya
tambahan pernyataan "as array (n) of” diikuti oleh obyek atau tipe data.
Contoh tipe varrying array :
Gambar 2. 3Contoh tipe varray
Dari sintaks tersebut memungkinkan untuk memiliki lebih dari satu dosen untuk mata kuliah tertentu, oleh karena itu array baru dari Person dapat didefinisikan:
1. Untuk membuat tabel objek, kita menggunakan “create type”
dengan pernyataan tambahan "as table of”.
2. Tabel objek ini kemudian dapat digunakan sebagai kolom
dalam sebuah tabel. Ketika tipe tabel muncul sebagai jenis kolom dalam tabel atau sebagai atribut yang mendasari jenis objek.
3. Tipe data yang disebut Person_Table_T dapat dibuat
berdasarkan tipe data Person_T untuk menyimpan contoh dari person.
Penggunaan varray untuk mnyimpan collection type di Oracle tidak
update, lebih menggunakan Nested table (tabel bersarang). Contoh
Oracle™ nested table:
Gambar 2. 4Contoh nested table
c. Object Identifiers
Dalam sistem berorientasi obyek, OID adalah sistem yang dihasilkan dan digunakan sebagai referensi untuk menemukan
objek tertentu. Dalam Oracle ™, gagasan OID sebagai pointer
logis tidak didukung, namun konsep OID untuk secara unik mengidentifikasi record (sebagai primary key) dapat digunakan.
Hal ini sangat berguna dalam hirarki inheritance, di mana semua subclass harus membawa OID superclass dalam rangka membangun hubungan antara superclass dan subclass.
Gambar 2. 5 Contoh implementasi OID
Syntax tersebut mengilustrasikan implementasi
menggunakan OID untuk menjaga inheritance (pewarisan) antara
superclass dan subclass.
Perhatikan bahwa kita dapat membuat tabel dari obyek dan menentukan primary key dan foreign key dalam tabel ini. Setiap
kali kita menentukan foreign key, kita harus menggunakan
"reference" pernyataan diikuti oleh tabel dan kolom yang sedang dimaksud.
Gambar 2. 6 Contoh relasi menggunakan Object References
Syntax tersebut menunjukkan bahwa tabel yang dibuat berasal dari tipe objek. Dengan demikian, kita tidak harus menentukan tipe atribut lagi. Catatan, kita dapat menambahkan constraint "not null" pernyataan untuk menghindari nilai "null" dari atribut. Hal ini diperlukan untuk atribut tertentu.
d. Relationshipsusing Ref
Untuk referensi dari satu objek ke yang lain dengan menggunakan kata kunci ref. Teknik objek-referensi ini dapat digunakan untuk menggantikan operasi standar "join" untuk melintasi dari satu objek ke yang lain. Kita kemudian dapat menjalankan query:
SELECT C.course_name FROM Course C
WHERE C.lecturer.person_name = 'Rahayu';
Pernyataan "SCOPE IS" digunakan untuk menentukan tabel yang tepat yang direferensikan oleh objek. Setiap kali parameterscope digunakan, mesin database akan melakukan
operasi join, yang dapat dioptimalkan dengan menggunakan indeks. jika parameter scope dihilangkan dan lebih dari satu tabel telah dibuat menggunakan jenis objek yang diberikan, mesin database akan menavigasi melalui seperangkat nilai-nilai referensi obyek untuk mengidentifikasi lokasi dari catatan yang diminta kita tidak akan menggunakan parameter "SCOPE IS" dalam pernyataan table creation. Dalam kebanyakan situasi, kita tidak akan membangun lebih dari satu tabel untuk masing-masing jenis objek yang kita nyatakan, sehingga menghindari situasi di mana Mesin Database harus menavigasi melalui sejumlah referensi objek. Ketika hanya satu tabel yang dibuat untuk jenis objek, operator ref langsung akan menunjuk untuk referensi terkait.
Metode pelaksanaan lain hubungan asosiasi di Oracle ™
menggunakan referensi objek menggunakan REF. Daripada menghubungkan dua tabel melalui nilai-nilai yang terkait kunci primer dan kunci asing, metode ini memungkinkan seseorang untuk secara langsung menghubungkan dua tabel melalui atribut referensi. Dengan demikian, atribut terkait yang menghubungkan dua tabel tidak memegang nilai kunci primer dari tabel lain yang terhubung, tapi referensi dari mana tabel terhubung sebenarnya disimpan.
Gambar 2. 7 Implementasi many to many menggunakan object refrences.
Gambar 2. 8 Implementasi one to many menggunakan object refrences
Gambar 2. 9 Implementasi one to one menggunakan object refrences
Teknik clustering dapat sangat berguna untuk agregasi hubungan. Sebuah cluster dibuat dan akan didefinisikan dalam hal semua komponen yang mengambil bagian dalam hubungan agregasi.
f. Inheritance Relationships using Under
Oracle ™ 9 ke atas memiliki fitur baru yang
mengakomodasi implementasi inheritance-relationship. Kita tidak
harus menggunakan hubungan primery-foreign-key untuk
mensimulasikan hubungan antara superclass dan subclass. Untuk
melaksanakan subtipe, kita perlu mendefinisikan objek sebagai
"not final" di akhir deklarasi jenisnya. Secara default, tanpa kata kunci, jenis objek akan diperlakukan sebagai final dan tidak ada subtype dapat diturunkan dari tipe. Oracle ™ menyediakan kata kunci under untuk digunakan dengan pernyataan "create type" untuk menciptakan subtype dari supertype
Jenis-jenis inheritance (pewarisan):
Union Inheritance
Menyatakan bahwa kesatuan dari kelompok subclass merupakan
seluruh anggota dari superclassnya. Dalam union inheritance, setiap objek dari superclass adalah setidaknya obyek dari satu subclass, dan dapat juga anggota dari suatu subclass adalah anggota dari subclass lain. Dalam union inheritance kita butuh
membuat satu tabel untuk masing-masing superclass dan subclass. Sebagai contoh seorang person dapat merupakan staff dan juga merupakan mahasiswa. Dengan menggunakan kata
kunci “under” biasanya tidak perlu lagi membuat tabel terpisah
untuk subclass karena tabel untuk superclass dapat menyimpan
data subclass. Tetapi karena dalam union inheritance, perlu untuk memungkinkan orang tertentu adalah mahasiswa dan staff, jika kita memasukkan keduanya ke dalam satu tabel superclass maka akan melanggar aturan primary key yaitu dua data dengan ID yang sama. Oleh karena itu, kita perlu membuat
tabel terpisah untuk masing-masing subclass.
Gambar 2. 10 Implementasi union inheritance menggunakan
"under"
Mutual-Exclusion Inheritance
Menyatakan bahwa sekelompok subclass dalam hubungan
seorang pegawai, tidak ada manager yang juga seorang pekerja.
Cara menangani tipe pewarisan ini adalah dengan
menambahkan atribut pada tabel superclass yang berisi jenis subclass atau memiliki nilai null, yaitu atribut tipePegawai yang berisi nilai manager atau pekerja atau null. Tidak ada data superclass yang dapat memiliki dua objek subtye disini. Kita hanya perlu membuat satu tabel untuk superclass, kita tidak
membutuhkan tabel untuk subclass karena objeknya hanya ada
pada satu subclass.
Gambar 2. 11 Implementasi mutual-exclusion inheritance
menggunakan "under"
Patition Inheritance
Menyatakan bahwa sekelompok subclass adalah partisi dari
superclass. Partition inheritance dapat dikatakan kombinasi dari
union dan mutual-exclution inheritance. Contohnya
menggunakan karyawan lagi, tetapi ditambah kelas baru casual, diasumsikan bahwa tiap anggota dari kelas karyawan harus
milik satu dari setiap subclassnya, yaitu sub kelas manager atau pekerja, atau null, dan tidak boleh milik lebih dari satu sub kelas.
Gambar 2. 12 Implementasi partition inheritance menggunakan
"under"
Multiple Inheritance
Bentuk dari multiple inheritance adalah sebagai berikut:
Gambar 2. 13 Multiple inheritance
Sebuah kelas tutor mewarisi dari kelas tumpang tindih karena pada dasarnya tutor bisa seorang mahasiswa dan bisa juga anggota staff. Cara untuk menangani warisan ini adalah dengan
menggunakan satu tabel untuk setiap superclass dan satu tabel untuk subclass. Pada saat penulisan ini, oracle tidak mendukung multiple inheritance menggunakan kata kunci “Under”. Kata kunci ini hanya berlaku untuk jenis warisan tunggal. Namun
konsep multiple inheritance ini sering disimulasikan
menggunakan teknik lain yang sudah ada. Sebagai contoh, kita
dapat menggunakan “Under” untuk mengimplementasi salah
satu orang tua warisan, dan menggunakan jenis asosiasi untuk
menghubungkan parent lainnya. Kelemahan dari menggunakan
teknik ini adalah bahwa hanya jenis parent yang
diimplementasikan menggunakan “under” saja yang dapat
diwariskan, oleh karena itu kita harus berhati-hati saat memilih parent mana untuk inheritance dan yang mana untuk asosiasi.
g. Encapsulation
Sebuah object type terdiri dari dua bagian, yang pertama adalah atribut, dan yang kedua adalah methods. Methods adalah Function atau Procedure yang dideklarasikan di dalam object type
untuk mengimplementasikan behavior dari suatu objek. Pada
prinsipnya method digunakan untuk mengakses data (instance
object) dari objek yang bersangkutan. Method bersifat optional dalam object type, artinya suatu object type boleh tidak memiliki method.
Oracle ™ menyediakan dua jenis enkapsulasi untuk model
objek-relasional. Yang pertama adalah melalui Stored Procedure
or Function. Yang kedua adalah melalui Member Procedure or Function.
1. Stored Procedure or Function
Deklarasi Stored Procedure or Function, dasarnya sangat mirip
dengan standar deklarasi prosedur dalam banyak bahasa prosedural. Enkapsulasi disediakan dengan memberikan hibah untuk peran atau pengguna tertentu untuk mengakses Stored Procedure or Function tertentu. Kita perlu menggunakan pernyataan "create procedure". Seperti dalam pernyataan create lainnya, pernyataan "or replace" adalah opsional.
Prosedur yang tersimpan dapat memiliki variabel lokal di dalamnya. Ini adalah variabel yang hanya digunakan dalam
tubuh prosedur. Dalam tubuh prosedur, kita dapat
menggunakan pernyataan SQL seperti pilih, insert, update, dan menghapus. Dengan demikian, metode yang digunakan untuk memanipulasi tabel database dapat dikemas dalam stored procedure.
2. Member Procedure or Function
Tidak seperti stored procedure, dengan menggunakan
metode member kita dapat mengidentifikasi visibilitas lingkup metode. Ada tiga jenis: public, private, dan protected. Secara default, atribut akan dinyatakan publik. Keuntungan terbesar dari metode over stored routines adalah visibilitas diperoleh dengan menjadi bagian dari kelas. Metode akan memiliki akses ke atribut, prosedur, dan fungsi yang mungkin tidak terlihat pada antarmuka kelas (private atau protected). Di sisi lain, rutinitas yang disimpan tidak memiliki akses ke jenis atribut, prosedur, dan fungsi. Dengan fitur substitusi, sebuah contoh dari subtipe dapat digunakan dalam setiap konteks di mana
contoh dari supertype dapat digunakan (Fortier, 1999).
Konteksnya meliputi penggunaan dari subtipe yang berbeda sebagai parameter fungsi yang sama.
Gambar 2. 15 Sintaks umum member procedure
Gambar 2. 16 Contoh member procedure