1 TEKNOLOGI OBJECT-RELATIONAL DBMS
pada ORACLE 10g
2
1. Object Types dan User-Defined Types
Object type adalah tipe data yang dapat dibuat sendiri oleh pengguna, hal ini dikenal sebagai user-defined 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, PL/SQL, 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 create/replace 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.
Tujuan Instruksional : Mahasiswa mampu memahami konsep Object-Relational Database yang diimplementasikan menggunakan ORDBMS Oracle 10g.
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
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
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 diturunkan/mewarisi 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).
- ORDER : Pernyataan yang digunakan method untuk membuat suatu perbandingan secara langsung object-to-object.
- FINAL : Pernyataan yang menjelaskan bahwa object type/method tidak dapat mendefinisikan suatu subtype dari object type/method tersebut.
- NOT FINAL : Pernyataan yang menjelaskan bahwa object type/method dapat mendefinisikan suatu subtype dari object type/method 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.
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 };]... END;]
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),
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
END; END; /
3. Membuat tabel dengan nama alumni_tiusd dimana attribut Mhs_USD bertipe Mhs_objtyp.
CREATE TABLE alumni_tiusd( Mhs_USDMhs_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
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).
3. Buat tabel CONTACTS2 dimana attribut CONTACT bertipe person2_typ :
5. Perintah SQL untuk menampilkan first_name, last_name, email, dan phone untuk objcet instance yang memiliki first_name Kevin adalah sbb:
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.
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 <supertype object schema> AS OBJECT
(key attribute attribute type, attribute attribute type,...,
attribute attribute type) [FINAL|NOT FINAL]
/
CREATE [OR REPLACE] TYPE <subtype object schema> UNDER <super
type object schema> (additional attribute attribute type, ...., additional attribute attribute type) [FINAL|NOT FINAL] /
CREATE TABLE <supertype table schema> OF
<supertype object schema>
(key attribute NOT NULL,
PRIMARY KEY (key attribute));
Contoh : Buatlah object type Person_t dengan sub type seperti tampak pada
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; END;
-- function that can be overriden by subtypes
MEMBER FUNCTION show RETURN VARCHAR2 IS BEGIN
RETURN 'Id: ' || TO_CHAR(idno) || ', Name: ' || name; END;
END; /
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;
/
CREATE TYPE BODY student_typ AS
OVERRIDING MEMBER FUNCTION show RETURN VARCHAR2 IS BEGIN
RETURN (self AS person4_typ).show || ' -- Major: ' || major ; END;
END; /
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 );
END; END; /
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); /
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));
END; END; /
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));
SELECT p.show()
FROM person4_obj_table p;