1 TEKNOLOGI OBJECT-RELATIONAL DBMS pada ORACLE 10g Tujuan Instruksional : Mahasiswa mampu memahami konsep Object- Relational Database yang diimplementasikan menggunakan ORDBMS Oracle 2 10g. 1. Object Types dan User-Defined Types Object type adalah tipe data yang dapat dibuat sendiri oleh pengguna, hal ini dikenal sebagai userdefined types yang lebih memungkinkan user untuk memodelkan entitas dunia nyata yang komplek (complex real-world). Metadata untuk user-defined types disimpan di dalam suatu skema yang memungkinkan SQL, PLSQL, Java dan interface yang lain menampilkannya. Tipe data objek memudahkan untuk bekerja dengan menggunakan data komplek(complex data), seperti : images, video, dan audio. Pada Oracle, perintah create type digunakan untuk membuat suatu tipe data baru (object type) yang nantinya dapat digunakan secara umum pada saat : membuat sebuat tabel (menggunakan perintah create table ) membuat tipe data lain Perintah untuk membuat suatu object type : CREATE [OR REPLACE] TYPE <object schema> AS OBJECT (attribute attribute type,..., attribute attribute type) Contoh 1 : CREATE OR REPLACE TYPE Person_T AS OBJECT (person_id VARCHAR2(10), person_name VARCHAR2(30)) CREATE TABLE Course (course_id VARCHAR2(10), course_name VARCHAR2(20), lecturer Person_T); Keterangan : As object harus selalu digunakan setelah statement createreplace sebuah object type. or replace bersifat optional. Dengan menggunakan perintah or replace maka suatu object dengan nama yang sama akan otomatis di-update (diganti) dengan versi yang baru dari object type tsb. Hal : 1
2 Contoh di atas menunjukkan penggunaan object type Person_T sebagai jenis attribut dalam tabel Course. Contoh 2 : Berikut ini pembuatan object type bernama Mahasiswa_objtyp : Object type CREATE OR REPLACE TYPE Mahasiswa_objtyp AS OBJECT ( NIM NUMBER, Nama VARCHAR2(100), Email VARCHAR2(25), Telp VARCHAR2(20)); Berikut ini merupakan contoh pembuatan tabel Alumni_objtab dengan sebuah kolom object type. Tabel objek CREATE TABLE Alumni_objtab ( Mhs_USD Mahasiswa_objtyp, Tgl_lulus DATE ); Sintak di bawah ini menyisipkan satu baris data ke dalam tabel Alumni_objtab : INSERT INTO Alumni_objtab VALUES ( Mahasiswa_objtyp (5314001, 'Elva Evelina', 'elva@yahoo.com', '0815-1234-5678'), '10 Nov 2008' ); Tabel Alumni_objtab merupakan tabel relational dengan sebuah object type sebagai tipe data dari kolom-kolomnya. Objek yang menempati kolom dari tabel relational disebut dengan objek kolom (column object). Gambar berikut mengilustrasikan tabel Alumni_objtab, yang pada salah satu kolomnya berupa objek kolom : Objek kolom Kolom Mhs_USD bertipe objek Mahasiswa_objtyp Kolom Tgl_lulus bertipe DATE NIM Nama Email Telp Tgl_lulus 5314001 Elva Evelina elva@yahoo.com 0813-1234-5678 10-Nov-2008 Hal : 2
Latihan : 1. Buatlah Object Type seperti tampak di bawah ini : 2. Buatlah tabel CONTACTS yang terdiri dari field : Contact bertipe person_typ Contact_date bertipe date 3. Isilah Tabel CONTACTS tsb dengan data-data (object instances) yang terdiri dari 2 object instances yaitu Verna Mills dan John Smith. Masukkan juga data : Pada Verna Mills : contact date tanggal 24 Juni 2003 Pada Johns Smith : contact date tanggal 12 Mei 2008 Hal : 3
4 Perintah umum (general syntax) untuk mendefinisikan suatu object type : CREATE [OR REPLACE] TYPE NamaTipe [AUTHID {CURRENT_USER DEFINER}] { {IS AS} OBJECT UNDER NamaSupertype } ( NamaAtribut TipeData[, NamaAtribut TipeData]... [{MAP ORDER} MEMBER SpesifikasiFungsi,] [{FINAL NOT FINAL} MEMBER SpesifikasiFungsi,] [{INSTANTIABLE NOT INSTANTIABLE} MEMBER SpesifikasiFungsi,] [{MEMBER STATIC} { SpesifikasiSubProgram SpesifikasiPemanggilan} [, {MEMBER STATIC} { SpesifikasiSubProgram SpesifikasiPemanggilan}]...] ) [{FINAL NOT FINAL}] [ {INSTANTIABLE NOT INSTANTIABLE}]; Keterangan : - CREATE TYPE :Perintah yang digunakan untuk mendefinisikan object type. - OR REPLACE TYPE: Perintah yang digunakan untuk melengkapi suatu tipe objek yang belum lengkap(incomplete) atau untuk meng-update tipe objek yang sudah lengkap (complete). - AUTHID CURRENT USER DEFINER :menspesifikasikan bahwa object type didefinisikan menggunakan invoker right : method dieksekusi dibawah hak dari user saat itu(current USER) atau berdasar hak dari user yang mendefinisikan tipe tersebut(definer). - UNDER : Pernyataan yang menjelaskan bahwa tipe tersebut diturunkanmewarisi dari suatu tipe tertentu. - MEMBER : Pernyataan sifat method yang dapat mengakses ke data object insantace-nya. - STATIC : menyatakan bahwa methods tidak mempunyai parameter SELF dan dipanggil pada object type-nya bukan pada object instances-nya. - MAP : Pernyataan yang digunakan untuk membandingkan objek dengan memetakan object instances ke salah satu dari tipe scalar(date, number, varchar2, character atau real). Hal : 4
- ORDER : Pernyataan yang digunakan method untuk membuat suatu perbandingan secara langsung object-to-object. - FINAL : Pernyataan yang menjelaskan bahwa object typemethod tidak dapat mendefinisikan suatu subtype dari object typemethod tersebut. - NOT FINAL : Pernyataan yang menjelaskan bahwa object typemethod dapat mendefinisikan suatu subtype dari object typemethod tersebut. - INSTANTIABLE : Pernyataan yang menyatakan bahwa tidak dapat menginisialisasikan instance dari object type. - NOT INSTANTIABLE : Pernyataan yang menyatakan bahwa tidak dapat menginisialisasikan instance dari object type. Hal : 5
6 2. Methods Object Sebuah object type (sudah dibahas pada bab 1 di atas) teridiri dari dari 2 bagian, yaitu : 1. attributes 2. methods seperti tampak pada gambar di bawah ini : Methods adalah fungsi atau prosedur yang dideklarasikan di dalam object type untuk mengimplementasikan behavior dari suatu objek. Pada prisnispnya 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. Perintah untuk membuat pendefinisian suatu method : CREATE [OR REPLACE] TYPE BODY NamaTipe {IS AS} { {MAP ORDER} MEMBER BadanFungsi; {MEMBER STATIC} {BadanSubProgram SpesifikasiPemanggilan};} [{MEMBER STATIC} { BadanSubProgram SpesifikasiPemanggilan };]... ] Contoh I: 1. Membuat object type dengan nama Mhs_objtyp yang selain memiliki attribut juga memiliki deklarasi method untuk menampilkan NIM. CREATE OR REPLACE TYPE Mhs_objtyp AS OBJECT ( NIM NUMBER, Nama VARCHAR2(100), Email VARCHAR2(25), Telp VARCHAR2(20), Method Hal : 6
MAP MEMBER FUNCTION get_nim RETURN NUMBER); 2. Membuat isi method milik object type Mhs_objtyp. Gunakan perintah CREATE OR REPLACE TYPE BODY sbb: CREATE OR REPLACE TYPE BODY Mhs_objtyp AS MAP MEMBER FUNCTION get_nim RETURN NUMBER IS BEGIN RETURN NIM; definisi method 3. Membuat tabel dengan nama alumni_tiusd dimana attribut Mhs_USD bertipe Mhs_objtyp. CREATE TABLE alumni_tiusd( Mhs_USD Mhs_objtyp, Tgl_lulus date); 4. Menyisipkan data alumni pada tabel alumni_tiusd : INSERT INTO alumni_tiusd VALUES (Mhs_objtyp(5314003, 'Maria', 'maria@yahoo.com', '0856-123456'), '11 Nov 2006'); INSERT INTO alumni_tiusd VALUES (Mhs_objtyp(5314004, 'Anita', 'anita@yahoo.com', '0856-777777'), '11 Nov 2006'); 5. Perintah SQL untuk memanggil method get_nim() yang berfungsi menampilkan NIM dari tabel alumni_tiusd : SELECT a.mhs_usd.get_nim() FROM alumni_tiusd a; Keterangan : a adalah nama alias dari tabel alumni_tiusd, nama alias berfungsi untuk memperpendek penulisan query. Hal : 7
8 Pemanggilan method (invoke a method) menggunakan dot notation object_variable.method() misalnya : Mhs_USD.get_NIM() dimana Mhs_USD adalah attribut dari tabel alumni_tiusd dan get_nim adalah nama method pada object type Mhs_objtyp. Hasil running : Contoh II : 1. Membuat object type Person2_Typ yang memiliki 2 method yaitu get_idno dan method untuk menampilkan data (instance object). 2. Membuat method milik object type Person2_Typ : Hal : 8
3. Buat tabel CONTACTS2 dimana attribut CONTACT bertipe person2_typ : 4. Insert object instance ke tabel CONTACTS2 : Hal : 9
10 5. Perintah SQL untuk menampilkan first_name, last_name, email, dan phone untuk objcet instance yang memiliki first_name Kevin adalah sbb: Hal : 10
Latihan 2 : 1. Buatlah Object Type seperti tampak di bawah ini : 2. Memanggil (invoke) method untuk menampilkan id_no. 3. Memanggil (invoke) method untuk menampilkan detail. Hal : 11
12 3. Inheritance Suatu object type dapat mewariskan baik attribut maupun method pada sub type di bawahnya. Untuk menerapkan inheritance, suatu obejct type harus didefinisikan NOT FINAL pada akhir deklarasi. Keyword UNDER yang digunakan bersama statement CREATE TYPE berfungsi untuk membuat sub type dari super type di atasnya. General Syntax yang digunakan untuk inheritance adalah sbb : CREATE [OR REPLACE] TYPE <super type object schema> AS OBJECT (key attribute attribute type, attribute attribute type,..., attribute attribute type) [FINAL NOT FINAL] CREATE [OR REPLACE] TYPE <sub type object schema> UNDER <supertype object schema> (additional attribute attribute type,..., additional attribute attribute type) [FINAL NOT FINAL] CREATE TABLE <super type table schema> OF <super type object schema> (key attribute NOT NULL, PRIMARY KEY (key attribute)); Contoh : Buatlah object type Person_t dengan sub type seperti tampak pada gambar di bawah. Hal : 12
Langkah-langkah : 1) Membuat object type dengan nama Person4_typ yang bersifat NOT FINAL agar object ini dapat memiliki sub type (dapat diwariskan) : CREATE TYPE person4_typ AS OBJECT ( idno NUMBER, name VARCHAR2(30), phone VARCHAR2(20), MAP MEMBER FUNCTION get_idno RETURN NUMBER, MEMBER FUNCTION show RETURN VARCHAR2) NOT FINAL; 2) Membuat isi method milik object type Person4_typ. Gunakan perintah CREATE OR REPLACE TYPE BODY sbb: CREATE OR REPLACE TYPE BODY person4_typ AS MAP MEMBER FUNCTION get_idno RETURN NUMBER IS BEGIN RETURN idno; -- function that can be overriden by subtypes MEMBER FUNCTION show RETURN VARCHAR2 IS BEGIN RETURN 'Id: ' TO_CHAR(idno) ', Name: ' name; 3) Membuat sub type dengan nama student_typ yang merupakan child (anak) dari object type person4_typ : CREATE TYPE student_typ UNDER person4_typ ( dept_id NUMBER, major VARCHAR2(30), OVERRIDING MEMBER FUNCTION show RETURN VARCHAR2) NOT FINAL; 4) Membuat method milik sub type student_typ : Hal : 13
14 CREATE TYPE BODY student_typ AS OVERRIDING MEMBER FUNCTION show RETURN VARCHAR2 IS BEGIN RETURN (self AS person4_typ).show ' -- Major: ' major ; 5) Membuat sub type dengan nama employee_typ yang merupakan child (anak) dari object type person4_typ : CREATE TYPE employee_typ UNDER person4_typ ( emp_id NUMBER, mgr VARCHAR2(30), OVERRIDING MEMBER FUNCTION show RETURN VARCHAR2); 6) Membuat method milik sub type employee_typ : CREATE OR REPLACE TYPE BODY employee_typ AS OVERRIDING MEMBER FUNCTION show RETURN VARCHAR2 IS BEGIN RETURN ( (SELF AS person4_typ).show ' -- Employee Id: ' TO_CHAR(emp_id) ', Manager: ' mgr ); 7) Membuat sub type dengan nama part_time_student_typ yang merupakan child (anak) dari sub type student_typ : CREATE TYPE part_time_student_typ UNDER student_typ ( number_hours NUMBER, OVERRIDING MEMBER FUNCTION show RETURN VARCHAR2); 8) Membuat method milik sub type part_time_student_typ : Hal : 14
CREATE TYPE BODY part_time_student_typ AS OVERRIDING MEMBER FUNCTION show RETURN VARCHAR2 IS BEGIN RETURN ( (SELF AS person4_typ).show ' -- Major: ' major ', Hours: ' TO_CHAR(number_hours)); 9) Membuat table dengan nama person4_obj_table yang bertipe object person4_typ : CREATE TABLE person4_obj_table OF person4_typ; 10) Menyisipkan data Bob Jones ke dalam object type person4_typ pada tabel person4_obj_table : INSERT INTO person4_obj_table VALUES (person4_typ(12, 'Bob Jones', '111-555-1212')); 11) Menyisipkan data Joe Lane ke dalam sub type student_typ pada tabel person4_obj_table : INSERT INTO person4_obj_table VALUES (student_typ(51, 'Joe Lane', '1-800-555-1312', 12, 'HISTORY')); 12) Menyisipkan data Jane Smith ke dalam sub type employee_typ pada tabel person4_obj_table : INSERT INTO person4_obj_table VALUES (employee_typ(55, 'Jane Smith', '1-800-555-7765', 100, 'Jennifer Nelson')); 13) Menyisipkan data Kim Patel ke dalam sub type part_time_student_typ pada tabel person4_obj_table : INSERT INTO person4_obj_table VALUES (part_time_student_typ(52, 'Kim Patel', '1-800-555-1232', 14, 'PHYSICS', 20)); 14) Menampilkan isi tabel person4_obj_table : Hal : 15
16 SELECT p.show() FROM person4_obj_table p; ~*** Practices makes Perfect ***~ Hal : 16