BAB 2 LANDASAN TEORI 2.1 Database Sebuah database sangat erat hubungannya dengan sebuah data, dimana tanpa adanya sebuah data maka sebuah database tidak akan dibutuhkan, arti dari data sendiri menurut Hoffer, Prescott, & Topi (2009, p46) adalah perwakilan penyimpanan dari objek dan kejadian yang memiliki pengertian dan kepentingan dalam lingkungan pengguna, Connolly & Begg(2010, p14) juga mengatakan bahwa data adalah sebuah jembatan antara komponen mesin dan komponen manusia, dijelaskan juga oleh Deliana, Cahya, & Kaisariza(2009, p1) bahwa data adalah kumpulan fakta yang dikumpulkan sebagai hasil pengalaman, observasi, atau percobaan dengan sistem komputer. Dari ketiga definisi diatas maka dapat disimpulkan bahwa data adalah sekumpulan fakta yang terjadi dan memiliki arti bagi pengguna yang dicatat dan disimpan di dalam suatu record. Didasari oleh definisi mengenai data yang telah dijabarkan diatas, data memiliki kegunaan yang penting bagi para pengguna dari data itu sendiri, dimana data merupakan fakta-fakta yang terjadi dan dibutuhkan oleh seorang pengguna atau suatu institusi atau organisasi yang akan diolah menjadi informasi dimana informasi yang terolah merupakan informasi yang dibutuhkan oleh para penggunanya. Dengan data yang fiktif atau tidak benar maka informasi yang dihasilkan akan menyesatkan pengguna informasi tersebut. Gambar 2.1 menunjukan contoh dari data client : Gambar 2. 1 Contoh data Client (Sumber : Connolly & Begg(2010,p11)) 6 7 dimana data pada tabel Client yang ada pada gambar 2.1 berupa CR76, CR74, dan sebagainya dan data-data tersebut menunjukan atau memberikan informasi bahwa clientNo ‘CR76’ memiliki nama depan’John’ dan nama belakang ‘Kay’ beralamat di ’56 High St.London SW1 4EH’ dan no telponnya ‘0171-774-5632’. Untuk penyimpanan data dan pengolahannya maka dibutuhkan sebuah database untuk menampung atau menyimpan data. Menurut Connolly & Begg (2010,p54) Database merupakan sekumpulan data yang saling berelasi, selain itu Connolly & Begg (2010, p54) juga menjelaskan dengan lebih rinci bahwa Database merupakan sekumpulan data yang berelasi secara logika dan deskripsinya, yang di-desain untuk memenuhi kebutuhan informasi dari sebuah organisasi. Kemudian dari kedua definisi mengenai database diatas dapat disimpulkan bahwa database adalah sekumpulan data yang saling berhubungan dimana data tersebut digunakan oleh sebuah organisasi atau perusahaan dalam melaksanakan proses bisnisnya. Sebuah database memiliki beberapa komponen yakni : 1. Entitas : merupakan sebuah objek yang direpresentasikan pada database 2. Atribut : merupakan karakteristik yang mendeskripsikan objek 3. Hubungan : merupakan hubungan antar entitas Untuk penjelasan lebih lanjut dan contoh dari entitas,atribut, dan hubungan dapat dilihat pada subbab 2.7.1 mengenai Entity Relationship Diagram. Di dalam suatu database data disimpan ke dalam file-file yang diorganisasikan bedasarkan sebuah schema atau struktur tertentu yang disimpan pada perangkat keras khusus seperti yang tertera pada gambar 2.1 dibawah 8 Gambar 2. 2 Contoh Database (Sumber : http://pbsabn.lecture.ub.ac.id/files/2012/05/Untitled5.jpg) Bedasarkan gambar diatas data yang disimpan dalam sebuah database dinamakan sebuag field, dan kumpulan dari field tersebut dinamakan record, dimana record-record yang ada akan akan disimpan pada sebuah file dan file-file tersebut akan disimpan dalam database. Hirarki data dapat dilihat pada gambar 2.3 : Gambar 2. 3 Hirarki Data (Sumber : http://pbsabn.lecture.ub.ac.id/files/2012/05/Untitled6.jpg) 9 Dalam melakukan aktivitasnya untuk mendukung kebutuhan informasi perusahaan database memiliki dua jenis konsep dalam pemrosesan data. Kedua konsep dalam pemrosesan data yakni : 1. Online Transaction Processing(OLTP) Menurut Connolly & Begg(2010,p1199) OLTP merupakan sebuah sistem pemrosesan datayang dirancang secara khusus untuk menangani high transaction dengan transaksi yang merubah data operasional yang digunakan dalam operasi sehari-hari seperti sistem Point Of Sales(POS), pengecekan stok barang, pembuatan invoice. Connolly & Begg(2010,p1199) juga mengatakan pada umumnya Sistem OLTP digunakan untuk menangani transaksi yang dapat diprediksi, berulang-ulang, dan di-update secara instensif(sering dilakukan). 2. Online Analytical Processing(OLAP) Menurut Connolly & Begg(2010,p1250) OLAP merupakan proses sintetik dinamik, analisa, dan consolidasi dari multi-dimensi data dalam jumlah besar. Dalam penerapannya OLAP memungkinkan seorang pengguna untuk melihat data organisasi dalam bentuk yang dibutuhkan oleh pengguna tersebut, sebagai contoh OLAP digunakan oleh suatu perusahan untuk menampilkan data perbandingan antara penjualan properti antar kota dalam bentuk tabel perbandingan seperti yang ditunjukan pada gambar 2.4 10 Gambar 2. 4 Tabel tiga kolom, dan (b) matriks dua dimensi (Sumber:Connolly & Begg(2010, p1254) Seperti yang dapat dilihat pada gambar 2.4 data yang ditampilkan oleh OLAP dapat berbentuk tabel tiga kolom(a) atau matriks dua dimensi(b) sesuai dengan kebutuhan perusahaan dalam melihat data. 2.2 The Database Management System (DBMS) Menurut Connolly & Begg (2010,p66) DBMS merupakan sebuah perangkat lunak yang berinteraksi antara program aplikasi pengguna dengan database dan memungkinkan seorang pengguna untuk mendefinisikan, membuat, menjaga, dan mengatur data yang ada di dalam database. Seperti yang dikatakan oleh Connolly pada penjelasan DBMS diatas DBMS merupakan sebuah perangkat lunak yang digunakan sebagai perantara antara database dengan pengguna untuk mengatur data yang ada di dalam database. Dalam penggunaan DBMS, untuk mengakses data yang ada di dalam DBMS pengguna diharuskan menggunakan bahasa query, Bahasa query yang paling umum 11 adalah SQL lalu menurut Connolly & Begg(2010, p184) SQL dikatakan sebagai sebuah bahasa yang di desain untuk mengubah sebuah input menjadi output yang diinginkan, Sedangkan menurut Ashdown & Kyte (2011, p7-1), SQL merupakan bahasa pemograman tingkat tinggi dimana semua program dan user-nya mengakses Data di dalam database. Lalu dari kedua definisi mengenai SQL yang telah disebutkan dapat ditarik kesimpulan bahwa SQL merupakan sekumpulan perintah yang digunakan oleh user untuk memanipulasi data yang ada di dalam database, baik menambah, mengubah, ataupun menghapusnya. DBMS sendiri dalam penerapannya ke dalam proses bisnis sebuah organisasi/pengguna memiliki beberapa kelemahan dan kelebihan seperti yang dikatakan menurut Connolly&Begg(2010,p77) kelebihan dan kekurangan dari DBMS adalah : 1. Kelebihan Control of Data redundancy, dengan DBMS maka pengulangan/duplikasi data dapat dikendalikan. Pada umumnya pendekatan database akan mengeliminasi data yang berulang/duplikasi sehingga tidak akan ditemukan data yang sama persis, namun dengan digunakannya DBMS maka pengguna dapat mengatur duplikasi data yang terjadi pada database dengan proses denormalisasi. Sebagai contoh : 12 Gambar 2. 5 Denormalisasi Tabel Order (http://www.objectarchitects.de/ObjectArchitects/orpatterns/Performance/Denorm alization/index.6.gif) Dengan dilakukannya proses denormalisasi seperti pada gambar diatas, dimana orderPosition menjadi terduplikasi pada tabel Order maka kecepatan akses data akan meningkat. Data consistency, dengan pengendalian redudansi data seperti yang dijelaskan pada point diatas maka resiko terjadinya ketidak-konsisten-an data dapat dikurangi. Dengan penggunaan DBMS jika data diubah oleh pengguna maka perubahan data yang terjadi dapat dilihat dan dirasakan oleh semua pengguna yang sedang menggunakan data tersebut, DBMS juga mencegah pengguna lain untuk mengakes data yang sedang digunakan oleh pengguna yang lain. Sebagai contoh : Andi sedang mengakses data gaji pada database dan mengubah nilai gaji Andi dari RP.500.000,- menjadi RP.1.500.000,- maka Badrun sebagai pengguna lain tidak dapat mengubah gaji Andi pada saat yang bersamaan. Setelah Andi selesai mengubah nilai gaji-nya, maka nilai gaji andi yang dilihat badrun pun ikut berubah menjadi RP.1.500.000,- 13 More information from the same amount of data, dengan terintegrasinya data yang ada di dalam database maka sebuah organisasi dapat mendapat informasi yang lebih banyak dari data yang sama. Sebagai contoh : Bagian Sales dari suatu perusahaan mempunyai data penjualan yang berisi ‘kode_Barang, Pemilik_barang’ dan bagian gudang memiliki data gudang yang berisi ‘Kode_barang, Nama_barang’. Dengan terintegrasinya data pada database maka bagian sales dapat mengakses data gudang untuk mendapatkan ‘nama barang’ begitu pula dengan bagian gudang yang dapat mengakses data ‘pemilik barang’. Improved security and integrity, dengan pemakaian DBMS maka integritas data dan keamanan data dapat dijaga, dimana Integritas data dapat ditekankan pada kepastian dan konsistensi data yang pada umumnya integritas data diekspresikan sebagai Constraint. Sedangkan keamanan data mengacu pada proteksi data pada database terhadap pengguna yang tidak memiliki hak(unauthorized user). Tanpa adanya keaman yang kuat integritas data membuat data pada database menjadi mudah dilihat oleh siapa saja, oleh karena itu system keamanan yang ada pada DBMS memungkinakan keamanan data dapat dijamin. System keamanan pada DBMS bisa berupa username dan password. 2. Kekurangan Complexity, dikarenakan fungsinya yang beragam macam, maka DBMS merupakan sebuah perangkat lunak yang cukup rumit dan kompleks. Pemakai 14 yang menggunakan DBMS haruslah mengerti semua fungsi yang dapat dilakukan oleh DBMS karena penyalahgunaan yang terjadi dalam penggunaan DBMS dapat berakibat fatal bagi sebuah organisasi. Sebagai contoh seorang DBA yang ingin mengubah username dan password seorang pengguna, namun dikarenakan DBA tersebut tidak mengerti sepenuhnya tentang fitur yang ada pada DBMS yang digunakan, DBA tersebut secara tidak sengaja menghapus username dan password pengguna. Cost, biaya yang harus dikeluarkan dalam menjaga, dan penggunaan DBMS relative besar dan beraneka ragam tergantung dari kemampuan yang ditawarkannya. Sebagai contoh DBMS untuk 1 orang pengguna mungkin hanya seharga RP. 1 juta sedangkan DBMS untuk sebuah perusahaan besar dengan jumlah pengguna ratusan orang akan memakan biaya sebesar RP. 10 juta. Performance, dengan banyaknya aplikasi yang harus mengakses DBMS secara bersamaan maka performa database akan menurun karena resource yang ada pada database akan dibagi-bagi ke untuk mengangani setiap aplikasi yang mengakses database tersebut. Sebagai contoh seorang pengguna mengakses ke dalam database untuk penampilan data yang terhitung berlangsung selama 15 detik, namun dengan penggunaan DBMS dimana banyak pengguna dapat mengakses database yang sama dalam waktu yang relatif bersamaan maka waktu yang terhitung untuk penampilan data dari database akan memakan waktu sebesar 60 detik. 15 Higher impact of a failure, proses centralisasi yang terfokus pada sebuah DBMS akan meningkatkan resiko yang terjadi apabila terjadi sebuah kerusakan pada salah satu komponen DBMS. Sebagai contoh apabila salah satu komponen DBMS rusak atau mengalami gangguan maka semua operasi yang terjadi akan mengalami hambatan. Sebagai contoh jika salah satu data pada database hilang atau corrupt maka semua data yang terhubung dengan data tersebut menjadi tidak dapat diakses dikarenakan Constraint yang ada pada data tersebut dan mengakibatkan semua operasi bisnis tidak dapat beroperasi sebagaimana mestinya. Dalam penggunaannya DBMS juga menyediakan tiga fasilitas kepada pengguna DBMS, fasilitas yang diberikan DBMS kepada pengguna adalah DDL, DML, Acces-Control yang akan dibahas lebih lanjut pada subbab 2.2.2 mengenai DDL, subbab 2.2.3 mengenai DMLdan subbab 2.2.4 mengenai Access-Control. Seperti yang telah dibahas diatas DBMS merupakan software yang dibutuhkan dalam mengatur atau me-manage data yang ada di dalam database, maka dari itu software DBMS yang beredarpun beraneka ragam yakni MS Access, Oracle, SQL Server,dan masih banyak lagi. Oracle yang merupakan salah satu jenis DBMS akan dibahas lebih lebih lanjut pada point 2.2.1. 2.2.1. Oracle Oracle database merupakan sebuah DBMS yang mendukung SQL, PL/SQL, dan Java dan digunakan untuk menyimpan serta mengambil informasi secara terintegrasi dan komprehensif dalam jumlah yang besar. Seperti yang dikatakan oleh Sthrom 16 (2011, p1-1), Oracle database merupakan kumpulan dari data yang dianggap sebagai sebuah unit dimana Oracle database dibentuk untuk dapat menangani berbagai tingkat komplektivitas, mulai dari hirarki yang simpel hingga jaringan yang kompleks dengan hubungan multilevel dan menyediakan operating platform yang kokoh dalam mengimplementasikan fitur object-oriented seperti user-defined types, inheritance, dan polymorphism. Oracle database juga telah melakukan ekstensi terhadap relational model menjadi object-relational model, yang membuatnya cocok untuk menyimpan permodelan bisnis yang kompleks pada relational database. Disamping itu Oracle database merupakan database pertama yang didesain untuk enterprise grid computing yang menyediakan cara untuk mengelola informasi dan aplikasi secara fleksibel dan cost-effective dimana Enterprise grid computing membuat large pool untuk standar industri, ruang penyimpanan modular dan server. Oleh karena itu dengan adanya arsitektur ini, setiap sistem baru dapat secara cepat disediakan dari kumpulan komponen maka tidak dibutuhkan workload yang tinggi, dikarenakan kapasitas yang ada dapat ditambahkan atau dialokasikan dari resource pool sesuai yang diinginkan. Fitur-fitur yang dimiliki oleh Oracle hingga versi terbarunya saat ini yaitu Oracle 11g adalah sebagai berikut : • Adanya data integrity yang memastikan bahwa adanya konsistensi, keakuratan dan kebenaran dari data yang disimpan sehingga user mendapat jaminan bahwa data diterima olehnya merupakan data yang benar-benar berasal dari sumber yang valid. Contohnya jika sudah terdapat user yang memiliki kode karyawan “123” maka tidak boleh terdapat user lain yang memiliki kode yang sama. 17 • Adanya data concurrency yang menunjukan bahwa data yang ditunjukkan baik data yang berasal dari sumber asal dan duplikasinya memiliki hasil yang sama. • Memiliki fasilitas self-managing database sehingga proses administratif dapat diotomatisasi dan mempermudah tugas dari DBA dikarenakan adanya performance diagnostics, dan space and memory management. Dengan fitur ini maka Oracle juga secara otomatis akan mengirim alert jika ditemukan adanya masalah pada database. • Menyediakan fasilitas Online backup dan crash recovery apabila database mengalami error. • Dapat melakukan adaptasi secara otomatis terhadap berbagai kondisi workload dari database server. • Menyediakan teknologi high-performance bagi data warehousing, OLAP, dan data mining. • Dapat dengan mudah mengelola keseluruhan siklus hidup dari informasi dalam jumlah besar. • Memiliki tingkat keamanan data yang tinggi serta terdapat penyesuaian untuk keamanan unique row, auditing, enksripsi data secara transparan, dan pemanggilan secara penuh terhadap data. • Melindungi data dari server failure, human error, dan mengurangi waktu downtime yang dibutuhkan. • Memiliki Enterprise Manager agar pengelolaan database dapat dilakukan dengan mudah. 18 Disamping kelebihan yang diberikan oleh oracle, oracle sendiri memiliki beberapa kekurangan, kekurangan yang dimilliki oleh Oracle diantaranya sebagai berikut : • Membutuhkan biaya yang cukup tinggi untuk diimplementasikan terlebih lagi jika user tidak memperhitungkan downtime cost. • Kompleksitas yang tinggi menyebabkan membutuhkan waktu pembelajaran yang cukup lama bagi user yang ingin mendalami Oracle database secara menyeluruh. Sebagai sebuah DBMS dengan kompleksitas yang tinggi oracle database memiliki arsitektur tersendiri dimana pada arsitektur tersebut oracle dipecah menjadi dua macam struktur yakni struktur database storage dan struktur database instance dimana akan dijelaskan lebih lanjut pada subbab 2.2.1 poin 1 1. Struktur Database Storage Gambar 2. 6 Struktur Oracle Database Storage (Sumber : Oracle Database Concepts 11g Release 2) 19 Menurut Ashdown dan Kyte (2011, p1-8), struktur database storage pada Oracle database dibagi menjadi dua yaitu struktur logical dan physical seperti yang tertera pada Ilustrasi struktur database storage pada gambar 2.6 untuk penjelasan lebih lanjut mengenai struktur database Oracle berikut merupakan penjelasan dari struktur physical dan logical yang dimiliki oleh Oracle database : a. Struktur Logical Database Struktur logical database pada Oracle terdiri dari tablespace, data block, extents, dan segment. Dimana dengan adanya struktur ini maka Oracle memiliki fasilitas pengaturan dari disk space yang baik. Untuk penjelasan lebih lanjut mengenai struktur logical dari oracle berikut merupakan komponen-komponen yang terdapat pada struktur logical oracle database : • Tablespace Tablespace merupakan suatu logical storage unit yang terdapat di dalam Oracle database. Tablespace dikatakan logical karena tablespace tersebut tidak terlihat di file system tempat database tersebut berada. Lalu Setiap tablespace memiliki paling sedikit satu datafile dimana datafile ini secara fisik terletak di file system server dimana setiap datafile hanya dimiliki oleh satu tablespace. Begitu pula setiap table dan index yang tersimpan di Oracle Database, setiap tabel dan index tersebut dimiliki oleh sebuah tablespace dimana tablespace membangun suatu “jembatan penghubung” antara Oracle Database dengan filesystem dimana index atau tabel disimpan. 20 • Data Block Oracle menyimpan data pada Data Blocks (dapat juga disebut Logical Blocks, Oracle Blocks, atau Pages). dimana satu data blocks akan berhubungan dengan sejumlah spesifik byte dari ruang database fisik di dalam disk. • Extent Extent merupakan jumlah spesifik dari data block yang berkesinambungan dimana data tersebut dialokasikan untuk menyimpan tipe tertentu dari suatu informasi. • Segment Segment merupakan kumpulan dari extent, dimana masing-masing dialokasikan untuk struktur data tertentu dan semuanya disimpan pada tablespace yang sama. b. Struktur Physical Database Struktur fisikal dari ORACLE database terdiri dari datafiles, control files, redo log files, archive log files, alert and trace log files, backup files, parameter files. Untuk pemahaman lebih lanjut mengenai struktur fisik dari database oracle, berikut merupakan penjelasan singkat terhadap struktur fisik database : • Datafiles Datafile merupakan file yang terasosiasi dengan tablespace, dimana datafile hanya bisa dimiliki oleh sebuah tablespace. Dalam pembuatan datafile Oracle biasanya membuat datafile untuk tablespace dengan mengalokasikan jumlah tertentu dari disk space ditambah overhead yang dibutuhkan untuk file header. 21 Pada saat suatu datafile dibentuk, OS yang menjalankan Oracle bertanggung jawab untuk membersihkan informasi-informasi lama dan authorisasi dari suatu file sebelum dialokasikan ke Oracle dimana Semakin besar ukuran dari suatu file, maka semakin lama proses authorisasi yang dibutuhkan. Pada umumnya Datafile berisi object-object dari suatu schema. • Control Files Control files mengandung data – data mengenai struktur fisik dari database seperti nama database, nama serta lokasi dari datafile dan redo log file, juga timestamp dari pembuatan database dimana File-file ini sangat penting bagi database, Jika tidak ada control file, maka user tidak dapat membuka data file untuk mengakses data – data yang terdapat di dalam database. • Red Log Files Online Redo Log File bertujuan untuk instance recovery suatu database yang apabila database mengalami crash dan tidak kehilangan data files, maka instance dapat melakukan prosedur recovery terhadap database dengan informasi yang terkandung di dalamnya. • Archive Log Files Archive log file merupakan catatan historis yang mengandung perubahan data yang telah terjadi yang dikeluarkan oleh instance, dengan file ini dan backup dari database, user dapat melakukan proses recovery data-data file yang hilang. Archive log juga memungkinkan adanya recovery dari data files yang telah di restore. 22 • Parameter Files Parameter file digunakan untuk menentukan bagaimana suatu instance dikonfigurasi ketika mulai berjalan. Dimana Pada parameter file terdapat daftar dari sekumpulan configuration parameter bagi instance dan database. • Alert dan Trace Log Files Alert Log File dianggap sebagai special trace file, dimana Alert log files merupakan catatan mengenai pesan dan error yang diatur secara kronologis . Trace log files merupakan file yang berasal dari write server dan background process. dimana ketika internal error ditemukan oleh sebuah proses, maka proses tersebut akan mencatat error tersebut ke trace file. • Backup Files Backup File digunakan untuk melakukan pemulihan terhadap database jika database mengalami kegagalan yang dapat disebabkan oleh media failure atau human error yang menyebabkan original file terhapus. 2. Struktur Oracle Database Instance Menurut Ashdown dan Kyte (2011,p1-9), Oracle database memiliki memory structure dan process yang digunakan untuk mengelola dan mengakses database. sehubungan dengan pernyataan diatas ketika aplikasi terhubung ke Oracle database, maka aplikasi tersebut akan terhubung dengan database instance yang merupakan sebuah kumpulan memori yang berfungsi untuk mengelola file database. lalu Instance akan melayani aplikasi tersebut dengan mengalokasikan area pada memory untuk membentuk memory structures dan proses-proses lainnya. Untuk penjelasan lebih lanjut 23 mengenai cara kerja oracle database yang terdapat pada gambar 2.6, dibawah ini merupakan komponen – komponen yang terdapat dalam Oracle Instance Structures : a. Oracle Database Processes Gambar 2. 7 Struktur Oracle Database Processes (Sumber : Oracle Database 10g : Administration Workshop I) Menurut Ashdown dan Kyte (2011, p1-10), Setiap instance yang terdapat di dalam Oracle database memiliki tiga tipe proses seperti yang terlihat pada gambar 2.7, tiga proses tersebut adalah : • Client Processes Client processes merupakan proses yang dibentuk dan dikelola untuk menjalankan kode aplikasi atau Oracle tool. dimana Sebagian besar environment memiliki komputer yang terpisah bagi client processes. • Background Processes Background processes merupakan proses yang berfungsi untuk menggabungkan fungsi-fungsi yang digunakan oleh Oracle database program yang berjalan untuk setiap client process. 24 • Server Processes Server processes merupakan proses yang melakukan komunikasi dengan client processes dan berinteraksi dengan Oracle database untuk memenuhi request yang diterima dari user. b. Instance Memory Structures Gambar 2. 8 Oracle Memory Structure (Sumber : Oracle Database 10g : Administration Workshop I) Menurut Ashdown dan Kyte (2009,p1-10), Oracle database membuat dan menggunakan memory structures (struktur dapat dilihat pada gambar 2.8) untuk kebutuhan menampung data yang disebar diantara para user serta terdapat private data areas untuk setiap user yang terhubung. Menurut (Rani, Singh, & Sharma, 2011) Komponen-komponen yang terdapat dalam instance memory structures yaitu : 25 • SGA (System Global Area) SGA merupakan struktur memori yang dibentuk pada saat instance diinisialisasikan pertama kali, dimana Komponen – komponen yang terdapat pada SGA adalah sebagai berikut : • Database Buffer Cache Database buffer cache digunakan untuk menampung data ke dalam memori. Setiap kali user mengakses data, data tersebut akan ditampung ke dalam buffer cache dan akan dikelola dengan menggunakan algoritma LRU. Penjelasan lebih lanjut mengenai buffer cache dapat dilihat pada subbab 2.4 • Redo Log Buffer Berupa cache redo (digunakan untuk instance recovery) yang digunakan untuk menulis ke redo log files fisik ke dalam disk. • Shared Pool Shared pool merupakan wadah yang berisi cache dari beragam construct yang dapat digunakan secara bersama oleh banyak user. • Large Pool Large pool merupakan area optional yang menyediakan alokasi memori dalam jumlah yang besar untuk beberapa proses besar, seperti Oracle backup dan operasi recovery, dan proses server I/O. • Java Pool Digunakan untuk seluruh sesi spesifik Java code dan data didalam JVM. 26 • Streams Pool Streams pool digunakan untuk menyimpan pesan yang berada pada buffered queue dan menyediakan memori untuk pencatatan proses oracle streams. • PGA (Program Global Area) PGA merupakan area pada memori dengan fungsi mengatur informasi bagi server process yang akan dibentuk pada saat sebuah server process mulai dijalankan. Dikarenakan setiap server process memiliki PGA tersendiri yang dibentuk ketika proses server mulai berjalan maka akses read beserta write terhadap PGA bersifat eksklusif yaitu hanya kepada server process tersebut. Komponen – komponen yang terdapat pada PGA adalah sebagai berikut : • Private SQL Area Private SQL area berfungsi untuk menampung informasi mengenai SQL statement yang telah diurai dan informasi lainnya yang berhubungan dengan session untuk melakukan pemrosesan. Ketika server process mengeksekusi sintaks SQL atau PL/SQL, maka private SQL area akan digunakan untuk menampung nilai bind variable. • Session Memory Session memory merupakan yang dialokasikan untuk menampung session variables (misalnya informasi logon) dan informasi lainnya yang terkait dengan session tersebut. Jika terdapat di dalam shared server, maka session memory tidak bersifat private melainkan bersifat shared. 27 • SQL Work Area SQL work area merupakan tempat dimana sekumpulan alokasi khusus dari memori PGA digunakan untuk operasi yang bersifat memory-intensive yaitu operasi yang menggunakan memori dalam jumlah besar seperti penggunaan sort-based operator, bitmap merge, dan bitmap create. Ukuran dari SQL work area dapat diatur sesuai dengan kebutuhan pada umumnya semakin besar ukuran dari work area maka peforma dari operator tertentu akan meningkat namun dengan konsekuensi penggunaan memori yang juga semakin besar. 2.2.2. DDL Statement DDL statement merupakan sebuah statement yang berfungsi untuk meng-definisikan, mengubah struktur, dan menghapus objek dari dalam database. Statement DDL mengijinkan pengguna untuk : • Membuat, mengubah, dan men-drop objects dan struktur database lainnya, termasuk database itu sendiri dan pengguna database. Statement ini dimulai dengan keyword CREATE, ALTER, or DROP. • Membuang semua Data di dalam object schema tanpa menghilangkan struktur dari object tersebut. • Statement ini dijalankan dengan keyword TRUNCATE. Melakukan proses GRANT dan REVOKE hak aksses dan peran. Statement ini dijalankan dengan keyword GRANT, REVOKE. Berikut adalah penjelasan lebih lanjut tentang Statement DDL dan contoh pemakaian serta hasil yang di-munculkan : 28 1. Create Syntax Create digunakan apabila pengguna ingin membuat sebuah tabel, schema, view, ataupun index di dalam database. berikut adalah contoh pemakaian syntax Create: a. Create Schema “Create Schema” digunakan saat user ingin membuat sebuah schema, format syntax yang digunakan adalah sebagai berikut : CREATE SCHEMA schema name AUTHORIZATION Authorize personel; Dimana Schema name adalah nama dari schema yang ingin dibuat, dan AUTHORIZATIOn merupakan nama dari pembuat schema tersebut, sebagai contoh pemakaian syntax CREATE CHEMA berikut adalah syntax yang digunakan untuk membuat schema “haha” dengan nama pembuat schema “hihi” CREATE SCHEMA haha AUTHORIZATION hihi; b. Create Table Untuk membuat suatu tabel di dalam database maka pengguna dapat menggunakan syntax Create table dengan format syntax sebagai berikut : CREATE TABLE table_name ( column_name1 data_type(Length), [NOT NULL] [DEFAULT default option][UNIQUE], column_name2 data_type(Length), [NOT NULL] [DEFAULT], …………………………, column_name n data_type(Length), [NOT NULL] [DEFAULT], CONSTRAINT “Constraint Name” {Condition} Primary Key (column_name), FOREIGN KEY (Column_name) REFERENCES (table_name) ON DELETE [CASCADE|NO ACTION] ON UPDATE [CASCADE|NO ACTION] ) 29 Dimana table_name merupakan nama table yang ingin dibuat, column_name1-2-n merupakan nama-nama kolom yang ingin dibuat, Data_Type merupakan jenis Data yang akan dimasukan pada tiap kolom yang ada, Length merupakan panjang dari tipe data yang diperbolehkan. [NOT NULL] [DEFAULT] [UNIQUE] merupakan alternative penambahan keterangan dari kolom yang dibuat, apabila NOT NULL digunakan maka pada kolom tersebut haruslah memiliki data, opsi DEFAULT akan memberikan ‘Default option’ sebagai data Default apabila pada opsi insert pengguna tidak memasukan nilai pada kolom, opsi [UNIQUE] berguna untuk menentukan apakah data pada kolom tersebut unik atau tidak, CONSTRAINT bisa digunakan sebagai Constraint pada kolom ataupun Constraint pada tabel, apabila digunakan pada kolom maka Constraint tersebut hanya berpengaruh pada kolom yang digunakan, apabila pada tabel maka Constraint tersebut akan berpengaruh pada semua tabel. PRIMARY KEY digunakan untuk menentukan primary key pada tabel tersebut, sedankan FOREIGN KEY akan menentukan foreign key di tabel tersebut pada opsi ON DELETE dan ON UPDATE foreign key opsi CASCADE dan NO ACTION merupakan aksi yang dilakukan, CASCADE berarti saat tabel tersebut dihapus maka semua data yang terintegrasi dengan tabel tersebut akan ikut hilang sedangkan pada opsi NO ACTION apabila tabel tersebut dihapus maka semua data yang terintegrasi dengan tabel tersebut akan tetap seperti apa adanya. Berikut adalah contoh pemakaian syntax create table 30 CREATE TABLE Persons ( P_Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), CONSTRAINT pk_PersonID PRIMARY KEY (P_Id) ) Pada contoh diatas Constraint yang dipakai berupa Constraint table, dan hasilnya akan menjadi sebagai berikut : Gambar 2. 9 Tabel Persons c. Create Index Penjelasan lebih lanjut mengenai index akan dibahas pada subbab 2.3. berikut merupakan format dari syntax create index : CREATE INDEX Index_name ON table_name (column_name) Dimana “indexName” adalah nama index yang ingin dibuat, table_name adalah nama tabel tempat index akan dibuat dan “Column_name”adalah kolom yang diberikan index. Sebagai contoh syntax dibawah ini akan membuat index001 pada tabel mahasiswa di kolom nama CREATE INDEX idx001 ON Mahasiswa (Nama) 31 d. Create View “Create View” digunakan saat user ingin membuat sebuah View, format syntax yang digunakan adalah sebagai berikut : CREATE VIEW view_name [New_Column_name 1, New_Column_name 2,…., New_Column_name n] AS subselect; Dimana View_name adalah nama dari View yang ingin dibuat, New_Column_Name adalah nama kolom yang ingin dibuat, subselect adalah syntax select yang digunakan untuk memasukan data ke dalam view. Sebagai contoh pemakaian syntax CREATE VIEW berikut adalah syntax yang digunakan untuk membuat view “haha” dengan sumber data tabel persons CREATE VIEW haha AS SELECT * FROM persons; 2. Alter Syntax ALTER digunakan untuk mengubah struktur tabel yang ada setelah tabel tersebut dibuat, untuk mengubah sebuah tabel ada 6 tipe dari ALTER TABLE yang dapat digunakan yaitu : Menambah kolom Menghapus kolom Manambah Constraint Menghapus Constraint Menambah DEFAULT pada kolom Menghapus DEFAULT pada kolom 32 Bentuk syntax umum dari Alter adalah sebagai berikut ALTER TABLE table_name {[ADD [COLUMN] column_name datatype(length) [NOT NULL][UNIQUE][DEFAULT default_option]] | [DROP [COLUMN] column_name [RESTRICT|CASCADE]] | [ADD CONSTRAINT “constraint_name” Constraint Definition] | [DROP CONSTRAINT “constraint_name” [RESTRICT|CASCADE]] | [ALTER [COLUMN] SET DEFAULT defaultoption] | [ALTER [COLUMN] DROP DEFAULT] } Dibawah ini akan dijelaskan lebih lanjut mengenai syntax ALTER TABLE dan contohnya : a. Menambah kolom pada table Format : ALTER TABLE table_name ADD column_name datatype(length); Dimana table_name adalah nama table yang ingin diubah, column_name adalah nama kolom yang ingin ditambahkan, dan datatype adalah jenis Data dari kolom yang baru dan length adalah panjang dari tipe data pada kolom. Contoh Pemakaian syntax ALTER TABLE untuk menambahkan kolom DateofBirth pada tabel persons adalah sebagai berikut : ALTER TABLE Persons ADD DateOfBirth date; Maka Hasil yang akan diperoleh dengan penambahan kolom “DateofBirth” adalah seperti gambar berikut : 33 Gambar 2. 10 Tabel Persons Beserta Datanya-Altered b. Menghapus kolom pada table Untuk menghapus kolom dari sebuah tabel maka format dari Syntax ALTER TABLE yang digunakan adalah sebagai berikut: ALTER TABLE table_name DROP COLUMN column_name; Dimana table_name adalah nama table yang ingin diubah, column_name adalah nama kolom yang ingin dihapus. Sebagai contoh, untuk menghapus kolom DateofBirth dari tabel persons seperti yang ditampilkan pada gambar 2.10 diatas adalah sebagai berikut ALTER TABLE Persons DROP COLUMN DateOfBirth; Maka hasil dari penghapusan kolom DateofBirth dapat dilihat pada gambar 2.11 dibawah ini : Gambar 2. 11 Tabel Persons Beserta Datanya-Altered 2 c. Menambah Constraint pada table Untuk menambahkan sebuah Constraint pada kolom P_id maka format syntax ALTER TABLE yang dapat digunakan adalah 34 ALTER TABLE table_name ADD CONSTRAINT constraint_name; Dimana table_name adalah nama tabel yang ingin ditambahkan Constraint, dan Constraint_name adalah nama Constraint yang ingin ditambahkan, berikut adalah contoh penambahan Constraint pk_PersonID pada tabel Persons : ALTER TABLE Persons ADD CONSTRAINT pk_PersonID ; d. Menghapus Constraint pada table Untuk menghapus sebuah Constraint pada kolom P_id maka format syntax ALTER TABLE yang dapat digunakan adalah ALTER TABLE table_name DROP CONSTRAINT constraint_name; Dimana table_name adalah nama tabel yang ingin dihapus Constraint-nya, dan Constraint_name adalah nama Constraint yang ingin dihapus, berikut adalah contoh penghapusan Constraint pk_PersonID pada tabel Persons ALTER TABLE Persons DROPCONSTRAINT pk_PersonID ; e. Menambah Default pada kolom table Untuk menambahkan default pada kolom dalam sebuah tabel maka format syntax yang dapat digunakan adalah sebagai berikut: ALTER TABLE table_name ALTER column_name SET DEFAULT default_option; 35 Dimana table_name adalah nama table yang ingin diubah, column_name adalah nama kolom yang ingin ditambahkan Default, dan Default_option adalah opsi Default yang ingin ditambahkan. Contoh Pemakaian syntax Alter Table untuk men-set Default pada kolom “Address” pada tabel persons adalah sebagai berikut : ALTER TABLE Persons ALTER Address SET DEFAULT “Homeless”; f. Menghapus Default pada kolom table Untuk menghapus Default dari kolom sebuah tabel maka format dari Syntax ALTER TABLE yang digunakan adalah sebagai berikut: ALTER TABLE table_name ALTER column_name DROP DEFAULT; Dimana table_name adalah nama table yang ingin diubah dancolumn_name adalah nama kolom yang ingin dihapus Default-nya. Contoh Pemakaian syntax ALTER TABLE untuk menghapus Default kolom “Address” pada tabel persons adalah sebagai berikut : ALTER TABLE Persons ALTER Address DROP DEFAULT; 3. Drop Syntax drop digunakan oleh user untuk menghapus object yang ada di dalam database seperti table, schema, index, constraint, view, syntax drop ini dapat digunakan dengan format sebagai berikut 36 DROP [TABLE,VIEW, CONSTRAINT, SCHEMA, INDEX] “ObjectName” RESTRICT|CASCADE [WHERE condition] a. Drop Schema “Drop Schema” digunakan saat user ingin menghapus sebuah schema, format syntax yang digunakan adalah sebagai berikut : DROP SCHEMA schema name [RESTRICT|CASCADE]; Dimana Schema name adalah nama dari schema yang ingin dihapus, dan RESTRICT|CASCADE merupakan jenis pen-delete-an dimana jika RESTRICT dipilih maka SCHEMA yang mau dihapus haruslah kosong apabila tidak kosong maka proses penghapusan akan gagal, sedangkan pada CASCADE operasi penghapusan akan dijalankan walaupun SCHEMA masih memiliki isi(tidak kosong) jika pengguna tidak menetapkan RESTRICT atau CASCADE maka Default dari DROP SCHEMA adalah RESTRICT. Sebagai contoh pemakaian syntax DROP SCHEMA berikut adalah syntax yang digunakan untuk menghapus schema “haha” dengan asumsi bahwa pada SCHEMA “haha” sudah kosong DROP SCHEMA haha; b. DropTable “Drop Table” digunakan saat user ingin menghapus sebuah Table, format syntax yang digunakan adalah sebagai berikut : DROP TABLE table_name [RESTRICT|CASCADE] 37 Dimana Table_name adalah nama dari tabel yang ingin dihapus, dan RESTRICT|CASCADE merupakan jenis pen-delete-an dimana jika RESTRICT dipilih maka TABLE yang mau dihapus tidak boleh memiliki objek apapun yang bergantung pada tabel yang ingin digapus, sedangkan pada CASCADE operasi penghapusan akan dijalankan dan menghapusTABLE dan objek lain yang bergantung pada tabel tersebut. Jika pengguna tidak menetapkan RESTRICT atau CASCADE maka Default dari DROP TABLE adalah RESTRICT. Sebagai contoh pemakaian syntax DROP TABLE berikut adalah syntax yang digunakan untuk menghapus tabel “haha” dengan asumsi bahwa pada tabel tidak ada objek yang bergantung pada tabel “haha” DROP TABLE haha; c. Drop View “Drop View” digunakan saat user ingin menghapus sebuah View, format syntax yang digunakan adalah sebagai berikut : DROP VIEW view_name [RESTRICT|CASCADE] DimanaView_name adalah nama dari View yang ingin dihapus, dan RESTRICT|CASCADE merupakan jenis pen-delete-an dimana jika RESTRICT dipilih maka view yang mau dihapus tidak boleh memiliki objek apapun yang bergantung pada view yang ingin digapus, sedangkan pada CASCADE operasi penghapusan akan dijalankan dan menghapus VIEW dan objek lain yang bergantung pada tabel tersebut. Jika pengguna tidak menetapkan RESTRICT atau CASCADE maka Default dari DROP VIEW adalah RESTRICT. Sebagai contoh pemakaian 38 syntax DROP VIEW berikut adalah syntax yang digunakan untuk menghapus view “haha” dengan asumsi bahwa pada view tidak ada objek yang bergantung pada view “haha” : DROP VIEW haha; d. Drop Index Syntax ini digunakan untuk menghapus index yang ada, penjelasan lebih lanjut mengenai index akan dibahas pada subbab2.3. berikut merupakan format dari syntax Drop index : DROP INDEX Index_name ON table_name (column_name) Dimana “indexName” adalah nama index yang ingin dibuat, sebagai contoh syntax dibawah ini akan menghapus index001 : DROP INDEX idx001; 4. Grant Syntax grant ini dipakai untuk memberikan akses atau hak khusus atas objek dari database ke pada user tertentu, pada umumnya syntax grant ini dipakai untuk memberikan user tertentu sebuah akses atas suatu objek milik user lainnya. format yang dipakai dalam pembuatan syntax grant adalah sebagai berikut GRANT “Privilege1, Privilege2,…., Privilegen” | ALL PRIVILEGES ON “object Name” TO “User Name”|PUBLIC [WITH GRANT OPTION]; : 39 Dimana “ Privilege” yang dimaksud adalah hak khusus yang ingin diberikan kepada user seperti SELECT Fungsi dari privilege select akan memberikan user tertentu hak akses untuk mengambil/ menampilkan data dari tabel tertentu, sebagai contoh user Andi sebagai pemilik tabel persons, memberikan hak kepada user badrun untuk menampilkan (dengan perintah select) data atas tabel persons miliknya UPDATE Fungsi dari privilege update akan memberikan user tertentu hak akses untuk melakukan update data pada tabel tertentu, sebagai contoh user Andi sebagai pemilik tabel persons, memberikan hak kepada user badrun untuk mengubah data di tabel persons miliknya. INSERT [ColumnName1, ColumnName2,….,ColumnName n] Fungsi dari privilege insert akan memberikan user tertentu hak akses untuk melakukan insert data pada tabel tertentu, sebagai contoh user Andi sebagai pemilik tabel persons, memberikan hak kepada user badrun untuk menambahkan kolom dengan nama “keluarga” di tabel persons miliknya. DELETE [ColumnName1, ColumnName2,….,ColumnName n] Fungsi dari privilege delete akan memberikan user tertentu hak akses untuk melakukan penghapusan terhadap tabel tertentu, sebagai contoh user Andi sebagai pemilik tabel persons, memberikan hak kepada user badrun untuk menghapus kolom dengan nama “DateOfBirth” di tabel persons miliknya. 40 REFERENCE [ColumnName1, ColumnName2,….,ColumnName n] Fungsi dari privilege reference akan memberikan user tertentu hak akses untuk melakukan referensi atas suatu kolom tertentu, untuk penjelasan lebih lanjut mengenai reference silahkan lihat subbab 2.2.2 poin 1 tentang create table pada bagian constraint. dan “ object name´ adalah nama table,view, objek lainnya dimana user mendapat hak khusus dan dapat menjalankan hak khususnya, ´user name´ adalah user id yang akan diberikan hak khusus apabila memakai PUBLIC maka semua user yang ada akan mendapat hak khusus yang sudah di deklarasikan atas objek tersebut, dan WITH GRANT OPTION berguna apabila user yang diberikan hak atas object tersebut diperbolehkan untuk memberikan hak kepada user lain, sebagai contoh dibawah ini seorang DBA akan memberikan hak SELECT atas table mahasiswa kepada User andi. GRANT SELECT ON mahasiswa TO andi WITH GRANT OPTION; Contoh diatas berarti DBA tersebut memberikan hak “SELECT” atas tabel “mahasiswa” kepada user “andi” dimana user “andi” dapat memberikan privileges tertentu kepada user lain. 5. Revoke Syntax revoke ini akan mencabut privileges dari user tertentu sesuai yang telah diberikan pada syntax GRANT. Bentuk pemakaian syntax revoke adalah sebagai berikut REVOKE [GRANT OPTION FOR] ““Privilege1, Privilege2,…., Privilege n” | ALL PRIVILEGES, ON “Object Name” FROM “Username”|PUBLIC [RESTRICT|CASCADE]; 41 Dimana “ Privilege” yang dimaksud adalah hak khusus yang ingin diberikan kepada user seperti yang telah dijelaskan pada syntax grant diatas, GRANT OPTION FOR digunakan untuk mencabut hak yang telah diberikan WITH GRANT OPTION pada syntax grant diatas,“ object name´ adalah nama table,view, objek lainnya dimana user mendapat hak khusus dan dapat menjalankan hak khususnya, ´user name´ adalah user id yang akan diberikan hak khusus apabila memakai PUBLIC maka semua user yang ada akan mendapat hak khusus yang sudah di deklarasikan atas objek tersebut, dan CASCADE atau RESTRICT memili fungsi sama seperti pada syntax drop yang telah dijelaskan pada subbab 2.2.2 poin 3. Gambar 2. 12 Ilustrasi Syntax REVOKE Dalam contoh dibawah ini DBA akan mencabut hak SELECT atas table mahasiswa dari user Andi. REVOKE SELECT ON mahasiswa FROM andi; 42 2.2.3. DML Statement DML Statement merupakan statement SQL yang digunakan untuk menambahkan, mengubah, menghapus, dan menampilkan data yang ada di dalam database. Untuk lebih jelasnya DML Statement mengijinkan pengguna untuk : • Menampilkan Data dari satu atau lebih table. Hal ini dilakukan dengan Syntax SELECT. • Menambahkan baris Data baru ke dalam table atau view. Hal ini dilakukan dengan Syntax INSERT. • Mengubah nilai dari suatu Data pada table atau view. Hal ini dilakukan dengan Syntax UPDATE. • Menghilangkan baris Data dari table atau view. Hal ini dilakukan dengan Syntax DELETE. Sebagai penjelasan lebih lanjut mengenai format DML Statement dan pemakaiannya, maka semua contoh yang digunakan akan merujuk pada gambar 2.13 yang menunjukan tabel persons dan order. Gambar 2. 13 Tabel Persons dan Orders 43 1. Select Syntax ini digunakan untuk menampilkan data dari 1 atau lebih tabel dari dalam database. untuk menampilkan data dari 1 tabel maka akan digunakan syntax select dengan format syntax seperti di bawah ini SELECT [DISTINCT] column_name1,column_name2,column_name n [AS newColumnName] FROM table_name [alias] [WHERE Condition] [GROUP BY Condition] [ORDER BY Condition] Dimana dalam syntax select pengguna dapat memilih untuk menampilkan data dengan distinct(menampilkan data tanpa ada redudansi/duplikasi) sehingga data yang ditampilkan berupa unique, column name adalah nama-nama kolom yang ingin di tampilkan datanya. Lalu ‘FROM’ merujuk kepada nama tabel sumber data yang ingin ditampilkan, table_name adalah nama sumber table yang ingn ditampilkan. Setelah pengguna menentukan data yang ingin ditampilkan dan tabel asal data, maka pengguna juga dapat mengatur data-data yang ditampilkan dengan syntax WHERE, GROUP BY, ORDER BY, dimana syntax WHERE berguna sebagai Filter terhadap data-data yang ingin ditampilkan, syntax GROUP BY digunakan apabila syntax select memiliki data agregat yang berupa hasil perhitungan, dan ORDER BY digunakan untuk mensortir data. Contoh penggunaan syntax select : Contoh dibawah User akan menampilkan seluruh data dari table persons SELECT * FROM Persons 44 Gambar 2. 14 Tabel Persons beserta datanya 2 Sedangkan untuk menampilkan data lebih dari satu tabel maka syntax join, atau Cartesian product dapat digunakan. Untuk penjelasan lebih lanjut mengenai syntax join dan Cartesian product akan dibahas pada poin a&b. a. Join Join merupakan query yang bertujuan untuk menggabungkan baris Data dari dua atau lebih table atau view. Dimana Join biasanya memiliki paling sedikit satu kondisi join yang terletak pada klausa WHERE dimana kondisi join tersebut akan membandingkan dua kolom dari table yang berbeda sebelum dilakukan penggabungan. Dalam penggunaannya syntax join memiliki dua jenis join yang dapat digunakan pengguna dalam melakukan penggabungan dua tabel atau lebih, jenis-jenis join yang dapat digunakan oleh pengguna adalah INNER JOIN, dan OUTER JOIN. Untuk contoh dan penjelasan lebih lanjut mengenai syntax Join semua contoh penggunaan syntax join yang akan dibahas lanjut pada seksi (i) dan (ii) dibawah ini akan didasari pada tabel persons dan order seperti yang tertera pada Gambar2.14 diatas i. INNER JOIN Inner Join merupakan salah satu jenis join dimana baris Data yang dikembalikan hanya baris yang memenuhi syarat pada kondisi join. Syntax INNER JOIN dapat digunakan dengan format sebagai berikut 45 SELECT column_name1,column_name2,column_name n FROM table_name1 INNER JOIN table_name2 ON table_name1.column_name=table_name2.column_name Dimana Column_name merupakan nama colom yang akan digabung, table_name adalah nama table yang akan digabungkan, table_name1.column_name = table_name2.column_name adalah syarat penggabungannya. Contoh Penggunaan syntax INNER JOIN yang akan menggabungkan tabel persons dan orders adalah sebagai berikut: SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons INNER JOIN Orders ON Persons.P_Id=Orders.P_Id ORDER BY Persons.LastName Dan Hasil dari penggabungan syntax join tabel persons dan orders adalah : Gambar 2. 15 Hasil Join Tabel Persons dan Order 2 ii. OUTER JOIN Outer Join merupakan syntax join dimana Data yang ditampilkan merupakan data yang memenuhi syarat dan semua Data dari salah satu table, walaupun pada table lainnya tidak terdapat Data yang sama, untuk penjelasan lebih lanjut dibawah ini akan dibahas mengenai tiga jenis Syntax outer join yaitu : 46 LEFT JOIN LEFT JOIN merupakan outer join yang akan mengembalikan semua baris Data yang terdapat pada tabel pertama (tabel pertama akan dianggap menjadi sisi sebelah “kiri”). Format dari Syntax LEFT JOIN dalam penggunaanya adalah sebagai berikut: SELECT column_name1,column_name2,column_name n FROM table_name1 LEFT JOIN table_name2 ON table_name1.column_name=table_name2.column_name Dimana Column_name merupakan nama-nama kolom yang akan digabung, table_name adalah nama table yang table_name1.column_name=table_name2.column_name akan adalah digabungkan, syarat penggabungannya. Sebagai contoh penggunaan LEFT JOIN yang akan menggabungkan tabel persons dan tabel orders maka bentuk syntax yang akan digunakan adalah sebagai berikut : SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons LEFT JOIN Orders ON Persons.P_Id=Orders.P_Id ORDER BY Persons.LastName Dari penggunaan syntax left join diatas maka data yang dihasilkan adalah seperti pada gambar 2.16 dibawah ini.: Gambar 2. 16 Hasil Left Join Tabel Persons dan Order 47 RIGHT JOIN RIGHT JOIN merupakan outer join yang akan mengembalikan semua baris Data yang terdapat pada tabel kedua (tabel pertama akan dianggap menjadi sisi sebelah “kanan”). Format dari Syntax LEFT JOIN dalam penggunaanya adalah sebagai berikut: SELECT column_name1,column_name2,column_name n FROM table_name1 RIGHT JOIN table_name2 ON table_name1.column_name=table_name2.column_name Dimana Column_name merupakan nama-nama kolom yang akan digabung, table_name adalah nama table yang akan digabungkan, table_name1.column_name = table_name2.column_name adalah syarat penggabungannya. Sebagai contoh penggunaan RIGHT JOIN yang akan menggabungkan tabel persons dan tabel orders maka bentuk syntax yang akan digunakan adalah sebagai berikut : SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons RIGHT JOIN Orders ON Persons.P_Id=Orders.P_Id ORDER BY Persons.LastName Dari penggunaan syntax right join diatas maka data yang dihasilkan adalah seperti pada gambar 2.17 dibawah ini.: Gambar 2. 17 Hasil right Join Tabel Persons dan Order 48 FULL OUTER JOIN FULL OUTER JOIN merupakan outer join yang memadukan LEFT JOIN dengan RIGHT JOIN sehingga baris Data yang akan dikembalikan dapat berasal dari sisi sebelah “kiri” table maupun sebelah “kanan” table. Format dari Syntax Full Outer Join dalam penggunaanya adalah sebagai berikut: SELECT column_name1,column_name2,column_name n FROM table_name1 FULL JOIN table_name2 ON table_name1.column_name=table_name2.column_name DImana Column_name = nama colom yang akan digabung, table_name adalah nama table yang table_name2.column_name akan adalah digabungkan, syarat table_name1.column_name penggabungannya. Sebagai = contoh penggunaan FULL OUTER JOIN yang akan menggabungkan tabel persons dan tabel orders maka bentuk syntax yang akan digunakan adalah sebagai berikut : SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons FULL JOIN Orders ON Persons.P_Id=Orders.P_Id ORDER BY Persons.LastName Dari penggunaan syntax Full Outer join diatas maka data yang dihasilkan adalah seperti pada gambar 2.18 dibawah ini.: Gambar 2. 18 Hasil Full Join Tabel Persons dan Order 49 b. Cartesian Product Cartesian product merupakan Top join dimana semua Data ditampilkan dari masing-masing table dikarenakan tidak menggunakan kondisi penggabungan pada syntax join. Cartesian Product ini dapat digunakan dengan format : SELECT “Column Name 1”, “Column Name 2”,….., “Column Name n” FROM “Table 1”, “Table 2”, “Table n” Dari syntax diatas “Table 1”, “Table 2”, “Table n” merupakan Cartesian product Contoh : SELECT * FROM EMPLOYEE, DEPARTMENT c. Subquery Subquery merupakan Statement SELECT yang bersifat nested di dalam SQL Statement lainnya. Subquery berguna ketika ada banyak query yang harus dieksekusi untuk memecahkan satu masalah. Subquery ini dapat digunakan dengan format : SELECT “Column Name 1”, “Column Name 2”,….., “Column Name n” FROM “Table Name” WHERE “Condition” IN ( SELECT “Column Name” FROM “Table Name” WHERE “Condition” ); Sebagai Contoh penggunaan subquery adalah sebagai berikut: SELECT first_name, last_name FROM employees WHERE department_id IN (SELECT department_id FROM departments WHERE location_id = 1800); 50 d. Exists & IN Penggunaan Syntax exists akan mengecek apakah sebuah row itu eksis atau tidak bedasarkan syarat yang ditentukan. Dan dianjurkan digunakan ketika terjadi komparasi atas satu kolom dengan kolom lainnya. Bentuk pemakaian syntax Exists adalah sebagai berikut : SELECT “Column Name 1”, “Column Name 2”,….., “Column Name n” FROM table_name WHERE column_name EXISTS (SELECT ‘COLUMN_NAME1, COLUMN_NAME1,…, COLUMN_NAME n ’ FROM ‘TABLE_NAME’ WHERE ‘Condition’) Dimana column name adalah nama kolom yang data-datanya ingin dijadikan sebagai persyaratan, dan table_name adalah nama sumber table yang ingn ditampilkan dan condition adalah syarat pemanggilan, berikut merupakan contoh penggunaan syntax exists yang mengacu pada gambar 2.12 untuk menampilkan data persons dimana data yang ditampilkan merupakan data yang memiliki LastName “hansen” atau “peter” SELECT * FROM persons WHERE EXISTS (SELECT LastName FROM persons WHERE LastName =’Hansen’ or LastName=’Peter’ ) Bedasarkan query exists diatas maka gambar 2.19 merupakan hasil dari query exists Gambar 2. 19 Tabel Persons – Exists Dan Penggunaan Syntax IN juga akan mengecek apakah sebuah row itu eksis atau tidak bedasarkan syarat yang ditentukan. Berikut merupakan format yang dipakai dalam menggunakan syntax In: 51 SELECT “Column Name 1”, “Column Name 2”,….., “Column Name n”) FROM table_name WHERE column_name IN (value1,value2,...) Dimana column name adalah nama kolom yang ingin di tampilkan data-datanya, dan table_name adalah nama sumber table yang ingn ditampilkan dan value adalah syarat pemanggilan. Dibawah ini merupakan contoh penggunaan syntax in untuk menampilkan data persons dimana data yang ditampilkan merupakan data yang memiliki LastName “hansen” atau “peter” SELECT * FROM Persons WHERE LastName IN ('Hansen','Pettersen') Dari sytax in diatas maka Hasil dari query In adalah seperti yang ditampilkan pada gambar 2.20 : Gambar 2. 20 Tabel Persons – In e. Group By & Distinct Syntax Distinct digunakan untuk menampilkan satu (Non-Duplikasi) baris Data dari sebuah tabel. Berikut merupakan bentuk dari syntax distinct : SELECT DISTINCT column_name FROM table_name Dimana column name adalah nama kolom yang ingin di tampilkan data-datanya, dan table_name adalah nama sumber table yang ingn ditampilkan. Contoh Penggunaan 52 dari syntax distinct untuk menampilkan data “city” dari tabel persons yang terdapat pada gambar 2.12 adalah sebagai demikian SELECT DISTINCT City FROM Persons Bedasarkan syntax distinct diatas maka hasil yang diberikan adalah seperti yang tertera pada gambar 2.21: Gambar 2. 21 Tabel Persons-Distinct Dan untuk pemakaian Syntax group by bentuk dasar dari syntax group by adalah sebagai demikian : SELECT ‘COLUMN_NAME’ FROM ‘TABLE_NAME’ GROUP BY ‘COLUMN_NAME’ Dimana column name adalah nama kolom yang ingin di tampilkan data-datanya, dan table_name adalah nama sumber table yang ingn ditampilkan. Berikut merupakan penggunaan syntax group by untuk menampilkan data Nim, Nama, Alamat dikelompokan bedasarkan Nim, Nama, Alamat SELECT Nim, Nama, Alamat FROM ‘Mahasiswa’ GROUP BY Nim, Nama, Alamat Bedasarkan query group by diatas peng-eksekusian query adalah sebagai demikian : maka hasil yang didapat dari 53 Gambar 2. 22 Tabel Persons-Group By 2. Insert Untuk menambahkan data kedalam sebuah database maka pengguna dapat menggunakan kedalam sebuah database maka pengguna dapat menggunakan syntax insert. Syntax insert dapat digunakan untuk menambahkan data kedalam sebuah table dengan format seperti yang terdapat dibawah ini. INSERT INTO table_name VALUES (value1, value2, value n,...) Dimana table_name adalah nama table yang ingin diinput datanya dan value berupa nilai-nilai dari data yang ingin dimasukan. Sebagai contoh gambar 2.23 merupakan table persons sebelum dilakukan perintah insert Gambar 2. 23 Tabel Persons beserta datanya 3 Dan berikut merupakan syntax insert yang akan memasukan data ke dalam table persons INSERT INTO Persons VALUES (4,'Nilsen', 'Johan', 'Bakken 2', 'Stavanger') 54 Setelah proses insert selesai maka tabel persons akan berubah menjadi seperti gambar 2.24 : Gambar 2. 24 Tabel Persons Beserta Datanya – Inserted 3. Update Untuk merubah data yang terdapat dalam database maka pengguna dapat menggunakan syntax update. Syntax update dapat digunakan untuk mengubah data kedalam sebuah table dengan format sebagai berikut: UPDATE table_name SET column1=value, column2=value2, column n=value n ,... WHERE some_column=some_value Dimana table_name adalah nama tabel yang ingin di-update column1-2 adalah nama kolom yang ingin diupdate, value1-2 adalah nilai dari updatenya, some_column dan some_value adalah syarat kolom dannilai dari yang akan diubah. Sebagai contoh pemakaian syntax update, berikut adalah table persons : Gambar 2. 25 Tabel Persons Beserta Datanya 4 55 Lalu berikut adalah syntax Update yang digunakan untuk mengubah data ‘Jakob’ UPDATE Persons SET Address='Nissestien 67', City='Sandnes' WHERE LastName='Tjessem' AND FirstName='Jakob' Setelah proses update selesai maka hasil dari syntax update adalah sebagai berikut 4. Gambar 2. 26 Tabel Persons Beserta Datanya - Updated Delete Untuk menghapus data dari dalam database, maka pengguna dapat menggunakan syntax delete. Syntax delete dapat digunakan untuk menghapus data dari sebuah table dengan format sebagai berikut : DELETE FROM table_name WHERE some_column=some_value Dimana table_name adalah nama table yang ada, some_column dan some_value adalah syarat kolom dannilai dari yang akan dihapus datanya. Sebagai contoh pemakaian syntax delete berikut adalah tabel persons beserta datanya sebelum dilakukan perintah Delete Gambar 2. 27 Tabel Persons Beserta Datanya 5 56 Dan untuk menghapus ‘Johan’ dengan P_ID=4, Berikut adalah contoh syntax delete yang digunakan DELETE FROM personsWHERE P_id=4; Setelah syntax delete dijalankan dengan sukses maka data yang dihasilkan akan menjadi seperti gambar 2.28 : Gambar 2. 28 Tabel Persons Beserta Datanya - Deleted 2.2.4. Access-Control Menurut Connolly & Begg (2010,p66), Salah satu fitur lainnya yang disediakan DBMS dalam mengelola database adalah Kontrol-akses, dimana control-akses menyediakan : Security System Fasilitas dari DBMS ini dapat digunakan untuk melindungi data-data yang ada di dalam database dengan menolak user tanpa ijin untuk mengakses database, contoh dari sistem keamanan adalah username dan password. Intergrity System Fasilitas dari DBMS ini berupa system integrasi data yang akan mengatur konsistensi Data yg tersimpan, sehingga data yang ada di dalam database menjadi terintegrasi satu dengan yang lainnya 57 Concurency Control System Fasilitas DBMS ini berguna untuk memungkin pembagian akses ke database sehingga pengguna yang dapat mengakses database tidak selalu bergantung pada DBA. Recovery Control System Fasilitas DBMS ini merupakan system yang akan menyimpan keadaan konsisten database sebelum terjadi kerusakan sehingga mempermudah proses recovery pada saat data/database itu sendiri mengalami kegagalan. User-accessible catalog Fasilitas DBMS ini berguna untuk menyimpan deskripsi dari Data yang ada di dalam database yang akan mempermudah pengguna dalam mengenali data yang ada di dalam database. 2.3 Index Menurut Ashdown & Kyte (2011, p61), Index adalah sebuah struktur optional yang diasosiasikan dengan table atau table cluster yang dapat mempercepat akses Data. sedangkan menurut Connolly & Begg(2010,p242) index adalah sebuah struktur yang menyediakan percepatan akses kepada sebuah baris dalam tabel didasari pada nilai dari satu atau lebih kolom. Dari ke dua definisi diatas dapat ditarik kesimpulan bahwa index adalah sebuah struktur yang digunakan untuk mempercepat akses data dan didasari dari sebuah nilai. Oleh karena itu dengan jika suatu tabel dengan jumlah data yang besar tidak menggunakan Index, maka database harus melakukan full table scan dalam 58 mencari nilai yang akan menyebabkan waktu akan semakin bertambah seiring dengan meningkatnya volume Data. index memiliki dua karakteristik sebagai berikut : 1. Usability Index dapat berupa usable ataupun unusable, dimana suatu unusable index tidak diatur oleh operasi DML dan diabaikan oleh optimizer sehingga meningkatkan peforma bulk loads yaitu kejadian dimana dilakukannya proses entry data dalam jumlah besar ke dalam tabel dimana jika index sedang dalam kondisi usable dapat memperlambat proses entry data tersebut. Selain itu penggunaan Unusable Index dan Index partitions tidak mengkonsumsi space dan ketika suatu Index dibuat menjadi unusable, database akan melakukan proses drop pada Index Segment. 2. Visibility Index dapat berupa visible atau invisible, dimana suatu invisible Index akan diatur oleh operasi DML dan tidak digunakan secara default oleh optimizer. Selain itu suatu invisible Index merupakan suatu alternatif untuk membuat Index tersebut menjadi unusable atau men-drop nya. Kemudian, Invisible Index sangat berguna untuk melakukan testing terhadap suatu Index sebelum Index tersebut di drop atau digunakan secara temporer tanpa mengganggu kinerja aplikasi. Dalam penggunaannya memiliki beberapa bentuk yang dapat digunakan yakni : 59 1. B-Tree Index Gambar 2. 29 B-Tree Index (Sumber : Oracle Database Concepts 11g Release 2) B-Tree merupakan singkatan dari balanced trees, dan merupakan jenis index yang paling sering dipakai dimana B-tree index merupakan sederetan nilai terurut yang dibagi dalam jarak nilai tertentu. Lalu B-tree juga memberikan performa pengambilan sejumlah baris query yang sangat baik. 60 Berikut adalah Jenis-jenis B-Tree index : a. Index-Organized Tables Gambar 2. 30 Index-Organized Tables (Sumber : learningdrop.com) Index-Organized Tables merupakan tabel yang disimpan di dalam variasi struktur B-Tree Index. Index-organized tables terlihat seperti tabel pada umumnya dengan primary key index yang terdapat pada satu atau lebih atribut miliknya. Namun, jika pada tabel biasa terdapat dua ruang penyimpanan yang harus dikelola (ruang penyimpanan untuk tabel itu sendiri dan untuk B-Tree index), pada index-organized tables seluruh atribut yang ada pada tabel tersebut disimpan sebagai index sehingga hanya cukup mengelola satu B-Tree index yang mengandung primary key beserta atribut-atribut yang lain. Jadi dapat dikatakan bahwa selain berperan sebagai tabel yang menyimpan baris data pada umumnya, tabel tersebut juga berperan sebagai index. Sebagai contoh, terlihat pada gambar 2.29 terdapat ilustrasi perbedaan antara tabel yang menggunakan index biasa dengan index-organized tables. Pada index biasa, setiap data dari atribut memiliki rowid yang berfungsi sebagai pointer kepada lokasi dari data yang ada pada tabel yang bersangkutan sedangkan pada index-organized tables, tidak 61 diperlukan rowid dikarenakan isi dari data-data tersebut disimpan langsung di dalam index yang juga berperan sebagai tabel. Untuk menggunakan index-organized tables dapat menggunakan sintaks dengan format : CREATE TABLE <table_name> ( <column_name> <data type and precision>, CONSTRAINT <constraint_name> PRIMARY KEY (<column_name>)) ORGANIZATION INDEX; Dimana pada format diatas terlihat bahwa pemasangan index-organized tables dilakukan dengan menambahkan sintaks ORGANIZATION INDEX pada saat pembuatan tabel dilakukan (penjelasan mengenai format pembuatan tabel dapat dilihat pada subbab 2.2.2 poin 1 halaman 63). Contoh pemasangan index-organized tables terhadap tabel jamkerja adalah sebagai berikut: CREATE TABLE jamkerja ( tanggal_kerja DATE, CONSTRAINT cons_jk PRIMARY KEY (jamkerja)) ORGANIZATION INDEX; 62 b. Reverse Key Indexes Gambar 2. 31 Reverse Key Indexes (Sumber : oracledba.ezpowell.com) Reverse Key Index merupakan jenis index dari varian B-Tree Index yang berfungsi untuk membalikan nilai dari index key, hal ini dapat dilihat pada gambar 2.31 dimana ID pada tabel yang menggunakan reverse key index (tabel di sebelah kanan) memiliki nilai yang berbanding terbalik dengan nilai yang terdapat pada tabel yang tidak menggunakan reverse key index(tabel di sebelah kiri). Reverse-Key Index sangat baik digunakan dalam proses insert namun penggunaan Reverse Key Index menjadi terbatas dikarenakan database tidak dapat menggunakannya untuk melakukan index range scans. Untuk menggunakan reverse key index, dapat dilakukan dengan menambahkan sintaks REVERSE pada saat pembuatan index dilakukan (penjelasan mengenai format pembuatan index dapat dilihat pada subbab 2.2.2 poin 1 halaman 65) seperti yang dapat dilihat pada format yang tertera dibawah ini : CREATE INDEX <index_name> ON <table_name> (<column_name>) REVERSE; 63 Dengan penggunaan query reverse index diatas, Berikut merupakan contoh pembuatan reverse index dengan nama idx=tes pada tabel sales di kolom”saleid” : CREATE INDEX idx_tes ON sales (saleid) REVERSE; c. Ascending - Descending Indexes Gambar 2. 32 ascending – descending index Pada ascending index, oracle database akan menyimpan data ke dalam index dengan pengurutan secara ascending, dimana secara Default, character data akan diurutkan bedasarkan nilai biner yang ditampung didalam setiap byte pada sebuah value dari yang nilainya paling kecil ke yang paling besar. Sedangkan pada descending index, index ini menyimpan nilai pada kolom tertentu secara descending. Descending index sangat berguna jika sebuah query ingin mengurutkan kolom secara ascending dan lainnya secara descending. Sebagai contoh ilustrasi yang terlihat pada gambar 2.32, pada tabel Department, jika menggunakan ascending index akan dilakukan penyimpanan nilai dari kolom department id ke dalam index yang dimulai dari nilai terendah ke nilai tertinggi secara terurut. Sedangkan jika menggunakan descending index maka penyimpanan nilai dari kolom department id akan diurutkan dari nilai tertinggi ke nilai terendah. 64 Untuk menggunakan ascending maupun descending index, berikut merupakan format dan contoh sintaks yang dapat digunakan dengan format : CREATE INDEX “Index Name” ON “Table Name”(“Column_name” ASC, “Column Name” DESC) Dimana index_name merupakan nama index yang ingin dibuat, table_name adalah nama tabel tempat index akan dibuat, “Column_name”adalah kolom yang ingin diberikan index, dan ASC merupakan sintaks untuk memberikan index secara ascending serta DESC merupakan sintaks untuk memberikan index secara descending pada kolom. Bedasarkan format syntax diatas, dibawah ini merupakan contoh pembuatan index secara ascending untuk kolom first name dan index secara descending untuk kolom emplid: CREATE INDEX emp_name_emp_idx ON hr.employees(first_name ASC, emplid DESC); d. B-Tree Cluster Indexes Gambar 2. 33 B-Tree Cluster Index (Sumber : Oracle Database Concepts 11g Release 2) 65 B-Tree Cluster Index merupakan sebuah tabel cluster (tabel yang telah dikelompokan bedasarkan atribut yang telah ditentukan) yang menggunakan index untuk mencari data yang diinginkan. B-Tree cluster index akan mengasosiasikan nilai pada cluster key dengan alamat data block sehingga pada saat penyimpanan ke dalam index, data-data yang ada akan dikelompokan sesuai dengan nilai pada kolom yang didefinisikan sebagai cluster key. B-Tree Cluster index dikelola secara terpisah, sama seperti index yang terdapat pada nonclustered table dan dapat muncul pada tablespace yang berbeda dengan lokasi tabel cluster tersebut. Sebagai contoh, terlihat pada gambar 2.33, department_id yang terdapat pada tabel employees_departments_cluster berperan sebagai cluster key. Oleh karena itu, penyimpanan data ke dalam index pada tabel tersebut akan dikelompokan bedasarkan nilai department_id yang sama. Untuk menggunakan B-Tree cluster index, berikut merupakan format dan contoh sintaks penggunaan yang dapat digunakan dengan format syntax sebagai berikut : CREATE CLUSTER “Table cluster Name” (<column name> <data type>) CREATE INDEX “Index Name” ON CLUSTER “Table cluster Name” Pada format yang terlihat diatas, awalnya jika ingin menggunakan b-tree cluster index dimana index tersebut hanya dapat digunakan pada cluster table maka akan dijelaskan cara membuat cluster table terlebih dahulu dimana table cluster name merupakan nama cluster table yang ingin dibuat, “Column_name”adalah nama kolom yang ingin dibuat, dan data_type merupakan tipe data dari kolom yang akan dibuat. Kemudian setelah itu pembuatan b-tree cluster index baru dapat dilakukan dimana 66 bedasarkan format diatas, index name merupakan nama index yang ingin dibuat, dan table cluster name merupakan nama cluster table tempat index akan dibuat. Bedasarkan format diatas, dibawah ini merupakan contoh penggunaan b-tree cluster index pada tabel dept_cluster yang merupakan cluster table: CREATE CLUSTER dept_cluster (department_id number(4)) CREATE INDEX employeeidx ON CLUSTER dept_cluster; 2. Bitmap Index Gambar 2. 34 Bitmap Index (Sumber : Oracle Database Concepts 11g Release 2) Di dalam Bitmap Index, database akan menyimpan setiap index key dalam bentuk bitmap. Lalu pada B-Tree Index, satu index entry akan mengarah kepada satu baris, pada bitmap index, index entry akan menggunakan bitmap untuk melakukan penunjukan pada lebih dari satu baris yang biasanya digunakan untuk data warehouse atau pada sebuah kondisi dimana query tersebut mereferensikan banyak kolom sekaligus. Penyimpanan index dengan menggunakan bitmap index dapat dilihat pada gambar 2.34 dimana pada gambar tersebut terlihat bahwa bitmap index mencatat nilai 1 untuk atribut gender “M” pada baris pertama, ketiga, keempat, dan kelima yang menunjukkan bahwa pada saat proses penyimpanan nilai dari atribut gender ke dalam 67 bitmap index dilakukan, index akan melakukan pemeriksaan terhadap baris-baris yang terdapat di tabel customer dan ditemukan bahwa nilai untuk atribut gender pada baris pertama, ketiga, keempat, dan kelima di tabel customer berupa “M”. Sebaliknya, terlihat juga bahwa bitmap index mencatat nilai 1 untuk atribut gender “F” pada baris kedua, keenam, dan ketujuh yang menunjukkan bahwa pada saat proses penyimpanan nilai dari atribut gender dilakukan, index menemukan bahwa terdapat nilai atribut gender “F” pada baris kedua, keenam, dan ketujuh di tabel customer. Dibawah ini merupakan situasi dimana bitmap index dapat digunakan: 1. Kolom index memiliki cardinality yang rendah; jumlah dari distinct value lebih rendah dari pada jumlah baris yang ada. 2. Table yang terindex bersifat read-only atau tidak dapat dimodifikasi dengan perintah DML. Untuk menggunakan bitmap index, berikut merupakan format sintaks yang dapat digunakan : CREATE BITMAP INDEX “index_name” ON “table_name” (column name); Dimana index_name adalah nama index yang ingin dibuat, table_name adalah nama tabel dimana index tersebut ingin dibuat dan columnname adalah nama kolom yang akan diberi index. Sebagai contoh, syntax dibawah ini akan membuat bitmap index dengan nama emp_bitmap_idx pada tabel Index_demo di kolom gender : CREATE BITMAP INDEX emp_bitmap_idx ON index_demo (gender); 68 3. Function Based Index Gambar 2. 35 Function Based Index (Sumber : http://flylib.com/books/4/322/1/html/2/images/fig07_06.jpg) Function based index merupakan tipe index yang memiliki kegunaan untuk melakukan suatu proses komputasi terhadap satu atau lebih kolom dengan penggunaan fungsi. Fungsi yang digunakan dalam pembuatan index dapat berupa arithmetic expression atau expression yang menggunakan SQL, PL/SQL, atau C. Database hanya akan menggunakan function-based index ketika fungsi yang didefinisikan pada saat pembuatan function-based index terdapat pada query yang bersangkutan oleh karena itu function-based index cocok digunakan untuk mengevaluasi statement-statement yang mengandung fungsi pada klausa WHERE-nya. Sebagai ilustrasi, terlihat pada gambar 2.35 bahwa nilai yang tersimpan ke dalam index merupakan hasil dari fungsi komputasi perkalian nilai dari kolom qty dengan price. 69 Untuk membuat function-based index, maka dapat menggunakan sintaks seperti yang tertera dibawah ini: Format : CREATE INDEX index_name ON “table_name” (“function”, “column_name 1”, “column_name 2”); Dimana index_name adalah nama index yang ingin dibuat, table_name adalah nama tabel dimana index tersebut ingin dibuatm function merupakan spesifikasi fungsi yang ingin digunakan dan columnname adalah nama kolom-kolom yang digunakan di dalam fungsi tersebut. Sebagai contoh, syntax dibawah ini akan membuat function based index dengan nama fnc_idx pada tabel hasil dengan fungsi yaitu “50*nilaiuas*nilaitm” : CREATE INDEX fnc_idx ON hasil (50*nilaiuas*nilaitm, nilaiuas, nilaitm); 4. Application Domain Index Application domain index mengijinkan user untuk membuat sendiri struktur index yang diinginkannya dan mengimplementasi tipe index baru yang awalnya tidak tersedia di oracle database untuk disesuaikan dengan aplikasi yang bersangkutan. Index ini biasanya dibentuk secara khusus untuk melakukan index pada data-data kompleks seperti dokumen, foto, video, dan lainnya. Untuk menggunakan application domain index, berikut merupakan format dan contoh sintaks seperti yang tertera dibawah ini : 70 Format : CREATE INDEX “index_name” ON “table_name”(“column_name”) indextype is “index_structure”; Dimana index_name adalah nama index yang ingin dibuat, table_name adalah nama tabel dimana index tersebut ingin dibuat, columnname adalah nama kolom yang akan diberi index, dan index_structure merupakan struktur index yang ingin digunakan. Sebagai contoh, syntax dibawah ini akan membuat application domain index dengan nama test_idx pada tabel test_tab dengan struktur index yaitu ctxsys.context: CREATE INDEX test_idx2 ON test_tab(desc) indextype is ctxsys.context; 5. Composite Index Composite index, disebut juga Concatenated index, merupakan index yang terdapat pada lebih dari saru kolom pada suatu tabel. Pada penerapannya composite Index dapat mempercepat pengambilan data pada statement SELECT jika pada klausa WHERE terdapat pemanggilan kolom-kolom yang terdapat pada Composite Index. Umumnya, pada saat pembuatan composite index, kolom yang paling sering diakses didefinisikan pertama kali dikarenakan composite index akan aktif jika kolom yang terdapat di depan digunakan dalam pemanggilan query. Sebaliknya, jika kolom yang digunakan bukan kolom yang didefinisikan pertama kali (misalnya yang digunakan kolom pada urutan kedua, ketiga, dan seterusnya) maka composite index tidak akan aktif. Composite index cocok digunakan pada query yang memiliki lebih dari satu kolom atribut yang sering dipanggil secara bersamaan karena lebih efisien dibanding 71 membuat index satu persatu pada masing-masing kolom tersebut. Sebagai contoh, jika pada tabel employee terdapat dua atribut yang sering dipanggil yaitu atribut nama dan umur maka akan lebih baik jika membuat composite index untuk kedua atribut tersebut dibanding membuat index biasa satu persatu yaitu membuat index untuk nama dan membuat index untuk umur. Berikut merupakan format dan contoh pembuatan composite index : Format : CREATE INDEX “Index Name” ON “Table Name”(“Column Name”, Column Name”) Dimana index_name adalah nama index yang ingin dibuat, table_name adalah nama tabel dimana index tersebut ingin dibuat, columnname adalah nama kolom yang akan diberi index. Sebagai contoh, syntax dibawah ini akan membuat composite index dengan nama employeeidx pada tabel employee pada kolom last_name dan salary : CREATE INDEX employeeidx ON employees (last_name, salary); 72 2.3.1 1. Ilustrasi sebelum dan sesudah pemakaian index Sebelum Pemakaian Index Gambar 2. 36 heap_based-Table (http://msdn.microsoft.com/en-us/library/aa964133(v=sql.90).aspx) Pada non-index table saat pemanggilan data dilakukan maka leaf-Node akan menjadi sebuah petunjuk pada query engine untuk mengarahkannya pada table tujuan dimana pada leaf node terdapat kunci-kunci pengarah seperti nomor baris, nomor halaman, id dan lainnya. Sedangkan pada Indexed-table leaf node sudah memuat data dan tidak lagi bertindak sebagai pengarah query engine melainkan menjadi seperti target tabel itu sendiri 2. Sesudah Pemakaian Index Gambar 2. 37 Indexed-Based Table (http://msdn.microsoft.com/en-us/library/aa964133(v=sql.90).aspx) 73 Beberapa keuntungan dalam memakai index adalah sebagai berikut : 1. Data yang tersimpan pada leaf-nodes tidaklah terduplikasi, tetapi dalam kasus covering index pada sebuah heap table, data akan tersimpan pada index dan heap 2. Table scan menjadi lebih cepat karena leaf nodes dari clustered index tersimpan bersamaan. 3. Pada saat join maka join akan dilakukan bedasarkan join key yang sebelumnya akan diurutkan terlebih dahulu, jika index terpasang pada join key tersebut maka, data yang akan diambil sudah terurut. 2.4 Buffer Cache Sebagai penjelasan lebih lanjut mengenai buffer cache yang telah dijalaskan pada subbab 2.2.1 poin 2d dikatakan oleh Strohm (2011,p11-2) Database Buffer Cache adalah sebagian dari SGA yang menyimpan duplikat atau copy Data block read dari datafile. Dimana setiap user yang yang melakukan koneksi terhadap instance saling berbagi akses ke dalam database buffer cache. Lalu data di Oracle diatur sedemikian rupa ke dalam block dengan size yang telah ditentukan (mis/ 8k) dan table dan Index terdiri dari sejumlah block dalam disk, Jika block ini ada di dalam memory, maka mereka akan ditempatkan di dalam buffer. Pada saat pertama kali pengguna oracle database memerlukan/ingin mengakses sebuah block, maka block pertama kali dicari di dalam database buffer cache, proses ini dinamakan buffer get, jika proses pencarian menemukan block yg dibutuhkan( A cache hit), maka block dapat langsung dibaca atau diakses dari memory (Soft Parsing). Jika tidak ditemukan (A Cache Miss), maka block harus di copy dari sebuah datafile di dalam disk ke buffer di dalam cache sebelum data 74 tersebut dapat diakses (Hard Parsing). Dan Strohm (2011,p11-2) juga mengatakan bahwa akses data melalu A Cache Hit lebih cepat daripada mengakses Data melalui A Cache Miss. Bedasarkan penjelasan diatas maka apabila nilai Buffer gets memberikan angka yang tinggi hal tersebut akan mempengaruhi performa dari database karena jumlah resource yang digunakan menjadi besar. Hal ini disebabkan DBWr akan melakukan hard parsing ke dalam database, oleh karena itu disebabkan oleh proses hard parsing yang dilakukan oleh database memakan resource yang cukup besar, maka waktu yang dibutuhkan untuk penampilan data hasil query memakan waktu yang cukup lama. 2.5 Performance Tuning Performance Tuning adalah proses peningkatan performa kerja dari suatu database baik dalam sisi penggunaan resource, waktu, maupun cost. Menurut Chan (2008, p1-2), dimana Performance tuning dilakukan pada saat muncul masalah yang menyebabkan kemunduran kinerja database, kemunduran kinerja ini ditandai oleh : Physical I/O yang lambat Pada umumnya hal ini diakibatkan oleh disk yang tidak di konfigurasi dengan benar, tetapi hal ini juga bisa disebabkan oleh banyaknya I/O yang digunakan oleh SQL yang tidak tepat Latch contention Latch adalah sebuah mekanisme yang digunakan oleh oracle untuk mengakses memory structure seperti buffer cache, java pool, dan library cache, pada 75 umumnya Latch Contention ini dapat diatasi dengan pergantian aplikasi dan jarang dapat di tuning dengan merekonfigurasi instance Excessive CPU usage Excessive CPU Usage biasanya diakibatkan oleh size dari system yang tidak mencukupi, SQL yang tidak optimal atau tidak benar, atau program aplikasi yang tidak efisien Apabila ketiga hal diatas ini sampai terjadi maka database tersebut haruslah di tuning agar performa dari database-nya menjadi kembali optimal sehingga dapat mendukung proses bisnis dengan lebih baik, jika database tersebut tidak di tuning maka kinerja database menjadi tidak optimal, lambat, dan proses bisnis akan terganggu. Menurut Chan & Ashdown( 2011,p1-1) cara untuk melakukan performance tuning ada dua yakni Instance Tuning dan SQL Tuning dan menurut (Karthik, Reddy, & Vanan, IJCSI International Journal of Computer Science Issues Vol 9 Issue 4, No 3, July 2012, 2012) dalam melakukan tuning hal-hal yang harus dilakukan adalah Mengurangi Waktu yang dibutuhkan dalam memproses SQL Mencari jalan yang paling efektif untuk memproses data Meningkatkan waktu pencarian dengan index Menggabungkan dua tabel atau lebih secara efisien Keempat hal ini dapat dilakukan dengan melakukan SQL Tuning yang akan dibahas lebih lanjut pada subbab 2.5.1 76 2.5.1. SQL Tuning SQL tuning merupakan proses tuning pada SQL Statement yang biasanya terdapat pada aplikasi yang berfungsi untuk menambah, mengubah, menghapus data atau dalam melakukan pengambilan dan penampulan data dapat juga berupa function atau package yang terdapat dalam aplikasi. Dalam pelaksanaannya SQL Tuning meliputi langkah-langkah dasar yakni : 1. Mengidentifikasi High-Load atau Top SQL yang terkait dengan aplikasi dan system resource yang besar, dengan cara me-review Eksekusi SQL yang telah berjalan. 2. Mengevaluasi Syntax SQL yang dipakai dan menentukan solusi terbaik yang dapat diimplementasikan. 3. Mengimplementasi aksi-aksi perbaikan untuk menghasilkan SQL Statement yang lebih baik. Ketiga langkah ini dapat dilakukan berulang-ulang sampai performa terbaik telah dicapai atau tidak ada lagi SQL yang dapat dituning. Beberapa cara-cara yang perlu diperhatikan dalam proses SQL Tuning adalah : 1. Penggunaan JOIN Penggunaan join yang tidak tepat dapat menyebabkan waktu pengambilan dan penampilan data memakan waktu yang cukup lama. Untuk contoh dan format penggunaan syntax JOIN dapat dilihat pada subbab 2.2.3. 77 2. Penggunaan Syntax Exists dan IN Penggunaan Syntax Exists dan IN yang tidak tepat dapat menyebabkan waktu pengambilan dan penampilan data memakan waktu yang cukup lama diaman Syntax Exist baiknya digunakan untuk perbandingan tabel dengan jumlah data yang banyak dan syntax in digunakan untuk perbandingan tabel dengan jumlah data yang sedikit. Untuk Contoh dan Format penggunaan syntax JOIN dapat dilihat pada subbab 2.2.3. 3. Penggunaan GROUP BY sebagai Alter DISTINCT Penggunaan syntax Distinct akan melihat satu demi satu field record yang ada dan membandingkannya sedangkan group by akan mengambil seluruh hasil dan mengelompokannya menjadi satu field yang unik. Oleh karena itu dengan syntax distinct penggunaan resource yang cukup banyak menyebabkan waktu eksekusi menjadi lebih lama. 4. Penggunaan Index Menurut [Ahmed, Beg, Gupta, Mansoori, 2012] index sangat berpengaruh dalam pengurangan waktu eksekusi operasi diversal seperti select dan join, penggunaan dan contoh pemakaian index dapat dilihat pada subbab 2.2.2 poin 1c sedangkan untuk penjelasan mendalam mengenai index dapat dilihat pada subbab 2.3. 2.6 ERD & Schema Dalam perancangan sebuah database, seorang database designer akan membuat sebuah perancangan sebelum membuat bentuk jadi dari database, perancangan yang 78 dibuat oleh seorang database designer akan berbentuk ERD yang merupakan level konseptual dari suatu database dan bentuk jadi dari database berupa sebuah Schema. Sebagai penjelasan lebih lanjut ERD dan schema akan dibahas di poin 1 dan poin 2 1. ERD Menurut Connolly & Begg (2010,p371) ERD adalah pendekatan database design yang dimulai dengan mengidentifikasi data penting berupa entitas dan hubungan. Disebutkan juga oleh Connolly & Begg (2010,p371) sebuah ERD terdiri dari dua macam komponen yakni : a. Entitas Menurut Connolly dan Begg(2010,p343)Entitas merupakan sebuah objek dengan ciri-ciri yang sama dimana diidentifikasikan oleh perusahaan sebagai sesuatu yang keberadaannya independen, pada umumnya entitas dikatakan sebagai objek yang ada di dalam database. b. Hubungan Menurut Connolly dan Begg (2010,p346) hubungan yang dimaksud adalah sebuah asosiasi berarti antara entitas yang dapat juga dikatakan sebagai fungsi antara entitas. Di dalam sebuah hubungan antara entitas terdapat sebuah cardinalitas yang merupakan jumlah asosiasi yang dapat terjadi antara ke duanya, sebagai contoh sesuai dengan gambar 2.38 dibawah, satu cabang minimal memiliki 1 atau lebih banyak “Staff”. Untuk penjelasan lebih lanjut mengenai kardinalitas berikut merupakan bentuk-bentuk kardinalitas yang dapat terjadi : 79 Zero or One to Zero or One Pada hubungan Zero or One to Zero or One (gambar dapat dilihat pada lembar lampiran halaman L1) hubungan antara entitas berupa tidak ada atau satu dengan tidak ada atau satu, sebagai contoh dianalogikan terdapat dua entitas yakni laki-laki dengan perempuan yang bersifat zero or one to zero or one dimana laki-laki dapat menikahi satu atau tidak sama sekali perempuan dan entitas perempuan dapat dinikahi satu atau tidak sama sekali laki-laki Zero or One to Zero or Many Pada hubungan Zero or One to Zero or One (gambar dapat dilihat pada lembar lampiran halaman L1) hubungan antara entitas berupa tidak ada atau satu dengan tidak ada atau satu, sebagai contoh dianalogikan terdapat dua entitas yakni laki-laki dengan perempuan yang bersifat zero or one to zero or one dimana laki-laki dapat menikahi satu atau tidak sama sekali perempuan dan entitas perempuan dapat dinikahi satu atau tidak sama sekali laki-laki Zero or One to One or Many Pada hubungan Zero or One to one or Many (gambar dapat dilihat pada lembar lampiran halaman L1) hubungan antara entitas berupa tidak ada atau satu dengan tidak ada atau lebih dari satu, sebagai contoh dianalogikan terdapat dua entitas yakni manusia dengan agama yang bersifat zero or one 80 to one many dimana entitas manusia dapat memiliki satu atau tidak sama sekali agama dan entitas agama dapat dimiliki satu atau banyak manusia. One to One Pada hubungan One to One (gambar dapat dilihat pada lembar lampiran halaman L1) hubungan antara entitas berupa satu dengan satu, sebagai contoh dianalogikan terdapat dua entitas yakni manusia dengan akte lahir yang bersifat one to one dimana Manusia hanya dapat memiliki satu akte lahir dan akte lahir hanya dimiliki oleh satu manusia One to One or Many Pada hubungan One to One or Many (gambar dapat dilihat pada lembar lampiran halaman L1) hubungan antara entitas berupa satu dengan satu atau banyak, sebagai contoh dianalogikan terdapat dua entitas yakni ayah dengan anak yang bersifat One to One or Many dimana ayah dapat memiliki satu atau banyak anak dan entitas anak hanya dapat memiliki satu ayah Zero or Many to One Pada hubungan Zero or many to One (gambar dapat dilihat pada lembar lampiran halaman L1) hubungan antara entitas berupa tidak ada atau satu dengan tidak ada atau satu, sebagai contoh dianalogikan terdapat dua entitas yakni nomor handphone dengan manusia yang bersifat Zero or many to One dimana manusia dapat memiliki banyak atau tidak sama 81 sekali nomor handphone dan entitas nomor handphone hanya dapat dimiliki satu manusia One or Many to One or Many Pada hubungan One or Many to One or Many (gambar dapat dilihat pada lembar lampiran halaman L1) hubungan antara entitas berupa satu atau banyak entitas dapat dimiliki satu atau banyak entitas lainnya, sebagai contoh dianalogikan terdapat dua entitas yakni manusia dengan mata kuliah yang bersifat One or Many to One or Many dimana manusia dapat memiliki satu atau banyak mata kuliah dan mata kuliah dan entitas mata kuliah dapat dimiliki satu atau banyak mahasiswa. Bedasarkan penjelasan mengenai entitas dan hubungan diatas, berikut merupakan contoh ERD Staff dengan Branch : Gambar 2. 38 Contoh Sederhana ERD; Sumber : (Connolly & Begg, 2010,p347) Bedasarkan gambar erd diatas diketahui bahwa ada dua entitas yakni “Staff” dan “Branch” dimana hubungan antara keduanya adalah “Has” sehingga ERD diatas bermakna “ Branch” memiliki “ Staff”. 82 2. Schema Menurut Connolly dan Begg (2010,p86) Schema adalah deskripsi secara meluruh sebuah database dimana ada tiga macam tipe schema yang didefinisikan bedasarkan tingkat ke-abstrak-an dari ketiga tingkat arsitekturnya. ketiga macam tipe shema yakni External Schema yang ber-korespodensi dengan tampilan data , Conceptual Schema yang mendeskripsikan segala entitas, atribut, dan hubungan dengan integrity Constraint, Internal Schema yang merupakan deskripsi lengkap dari internal model. Gambar 2. 39 Perbedaan 3 level schema f. External Level External Level merupakan arsitektur dimana user melihat bentuk database, dan pada level ini setiap bagian database dapat dilihat bedasarkan keinginan user. Sebagai contoh user andi melihat tampilan tanggal dengan format dd-mm-yyyy sedangkan user badrun melihat tanggal yang sama dengan format yyyy-mm-dd. 83 g. Conceptual Level Conceptual Level merupakan arsitektur dimana data yang disimpan dideskripsikan dan hubungan antara data tersebut, di dalam conceptual level merepresentasikan : h. Semua entitas, atribut, dan relationship Constraint data Informasi data Integritas dan keamanan informasi Internal Level Level ini menjelaskan tentang representasi fisik database pada computer, level ini juga menjelaskan bagaimana data disimpan di dalam database seperti alokasi storage untuk data dan index, deskripsi dari storage(ukuran dari data), penempatan record, kompresi data dan enkripsi data. 2.7 Sistem Informasi Penggajian System informasi penggajian dapat diartikan secara singkat sebagai system informasi yang berfokus pada system penggajian, untuk pemahaman lebih lanjut mengenai system informasi penggajian maka akan dibahas lebih lanjut mengenai gaji dan system informasi. Menurut Mulyadi (2008,p373) Gaji adalah pembayaran atas penyerahan jasa yang dilakukan oleh karyawan administrasi atau yang mempunyai jenjang jabatan manager yang pada umumnya dibayarkan secara tetap per bulan, dapat dikatakan juga gaji adalah balas jasa atas tenaga kerja yang tidak terpengaruh oleh hasil 84 produksi perusahaan. Lalu Gaji yang diterima oleh karyawan merupakan bayaran yang terdiri dari 1. Gaji Pokok Gaji yang diterima oleh karyawan bedasarkan jabatan atau tingkatan karyawan tersebut yang sesuai dengan ketentuan perusahaan. 2. Insentive Insentive merupakan tambahan atas gaji pokok yang diberikan sesuai ketentuan dari perusahaan diaman karyawan bekerja a. Uang Makan dan Transport Merupakan tambahan yang diterima karyawan selain dari gaji pokok untuk biaya asupan gizi dan biaya perjalanan yang ditempuh dari tempat tinggal karyawan menuju gedung kantor b. Uang Lembur Bayaran atas pekerjaan yang dilakukan melebihi jam kerja yang telah ditentukan perusahaan demi menuntaskan pekerjaan. Penjelasan lebih lanjut mengenai pembayaran tentang lembur akan dibahas pada poin 2.7.2 3. Tunjangan Bayaran tambahan yang diberikan kepada karyawan bedasarkan kebutuhan karyawan tersebut pada waktu yang tertentu, seperti tunjangan hari raya pada hari raya sesuai dengan ketentuan perusahaan tentang tunjangan hari raya, tunjangan melahirkan pada saat ada karyawati yang sedang melahirkan. Penjelasan lebih lanjut mengenai THR akan dibahas pada poin 2.7.3. 85 4. Bonus Merupakan tambahan bayaran kepada karyawan diluar gaji pokok yang diberikan kepada karyawan jika perusahaan dalam keadaan profit. Jumlah Bonus yang diterima karyawan sesuai dengan prestasi kerja karyawan dan ketentuan perusahaan yang berlaku. Gaji dari karyawan sesuai dengan penjelasan diatas merupakan gaji dalam bentuk “kotor” dimana “gaji kotor” tersebut akan dikenakan pemotongan-pemotongan sesuai dengan ketentuan perusahaan, jenis-jenis pemotongan atas gaji dapat berupa pembayaran pajak, pembayaran jamsostek, pembayaran hutang karyawan,biaya pengobatan, dan lain-lainnya sesuai dengan ketentuan perusahaan. Setelah pemotogan gaji dilakukan terhadap “gaji kotor” maka gaji tersebut dianggap merupakan “gaji bersih” yang akan dibawa pulang oleh karyawan(Take Home Pay). Sebagai penjelasan lebih lanjut mengenai pemotongan gaji karyawan berjenis pajak akan dijelaskan pada poin 2.71 Disamping penjelasan mengenai gaji diatas menurut Connolly & Begg (2010,p282) sistem informasi diartikan sebagai sebuah sumber yang memperbolehkan koleksi, manajemen, pengendalian, dan penguraian informasi kepada seluruh organisasi. Dikatakan juga oleh Connolly & Begg(2010, p282) bahwa sebuah sistem informasi berbasis komputer meliputi sebuah database, perangkat lunak database, aplikasi, perangkat keras komputer, dan pengguna dari sistem itu sendiri. Dari kedua penjelasan diatas mengenai sistem informasi dan gaji maka dapat ditarik kesimpulan bahwa sistem informasi penggajian adalah sebuah sistem yang dapat 86 menyimpan, me-manage dan menampilkan informasi mengenai penggajian kepada pengguna atau organisasi yang terkait dengan menggunakan sebuah sistem komputer yang terkait dengan database. 2.7.1. Pajak Menurut (Direktorat Jendral Pajak) Ketentuan tentang pembayaran pajak penghasilan(Pph) telah diatur oleh ketentuan pemerintah tentang pajak penghasilan pasal 17 yang berisi : Tarif Pajak Penghasilan (PPh) yang digunakan untuk menghitung penghasilan kena pajak adalah sebagai berikut: 1. Ayat (1) Tarif pajak yang diterapkan atas Penghasilan Kena Pajak bagi: a. b. Wajib Pajak Orang Pribadi Dalam Negeri adalah sebagai berikut: Lapisan Penghasilan Kena Pajak Tarif Pajak Sampai dengan Rp 50.000.000,- 5% di atas Rp 50.000.000,- sampai dengan Rp 250.000.000,- 15% di atas Rp 250.000.000,- sampai dengan Rp 500.000.000,- 25% di atas Rp 50.000.000,- 30% Wajib Pajak Badan Dalam Negeri dan Bentuk Usaha Tetap adalah sebesar 28% (dua puluh delapan persen). 2. Ayat (2) Tarif tertinggi sebagaimana dimaksud pada ayat (1) huruf a dapat diturunkan menjadi paling rendah 25% (dua puluh lima persen) yang diatur dengan Peraturan Pemerintah. 87 a. Ayat(2a) Tarif sebagaimana dimaksud pada ayat (1) huruf b menjadi 25% (dua puluh lima persen) yang mulai berlaku sejak tahun pajak 2010. b. Ayat(2b) Wajib Pajak badan dalam negeri yang berbentuk perseroan terbuka yang paling sedikit 40% (empat puluh persen) dari jumlah keseluruhan saham yang disetor diperdagangkan di bursa efek di Indonesia dan memenuhi persyaratan tertentu lainnya dapat memperoleh tarif sebesar 5% (lima persen) lebih rendah daripada tarif sebagaimana dimaksud pada ayat (1) huruf b dan ayat (2a) yang diatur dengan atau berdasarkan Peraturan Pemerintah. c. Ayat(2c) Tarif yang dikenakan atas penghasilan berupa dividen yang dibagikan kepada Wajib Pajak orang pribadi dalam negeri adalah paling tinggi sebesar 10% (sepuluh persen) dan bersifat final. d. Ayat(2d) Ketentuan lebih lanjut mengenai besarnya tarif sebagaimana dimaksud pada ayat (2c) diatur dengan Peraturan Pemerintah. 3. Ayat (3) Besarnya lapisan Penghasilan Kena Pajak sebagaimana dimaksud pada ayat (1) huruf a dapat diubah dengan Keputusan Menteri Keuangan. 88 4. Ayat(4) Untuk keperluan penerapan tarif pajak sebagaimana dimaksud pada ayat (1), jumlah Penghasilan Kena Pajak dibulatkan ke bawah dalam ribuan rupiah penuh. 5. Ayat(5) Besarnya pajak yang terutang bagi Wajib Pajak orang pribadi dalam negeri yang terutang pajak dalam bagian tahun pajak sebagaimana dimaksud dalam Pasal 16 ayat (4), dihitung sebanyak jumlah hari dalam bagian tahun pajak tersebut dibagi 360 (tiga ratus enam puluh) dikalikan dengan pajak yang terutang untuk 1 (satu) tahun pajak. 6. Ayat (6) Untuk keperluan penghitungan pajak sebagaimana dimaksud pada ayat (5), tiap bulan yang penuh dihitung 30 (tiga puluh) hari. 7. Ayat(7) Dengan Peraturan Pemerintah dapat ditetapkan tarif pajak tersendiri atas penghasilan sebagaimana dimaksud dalam Pasal 4 ayat (2), sepanjang tidak melebihi tarif pajak tertinggi sebagaimana tersebut pada ayat (1). 2.7.2. Lembur Menurut Undang-Undang No. 13 Tahun 2003 tentang Ketenagakerjaan mengenai ketentuan waktu kerja lembur pada libur mingguan dan libur nasional, Pengusaha wajib memberi waktu istirahat diantaranya adalah istirahat mingguan 1 (satu) hari untuk 6 (enam) hari kerja dalam 1 (satu) minggu atau 2 (dua) hari untuk 5 (lima) 89 hari kerja dalam 1 (satu) minggu (UU No.13/2003 pasal 79 ayat 2). Dan sesuai dengan ketentuan yang terdapat pada Kepmenakertrans No. 102/MEN/VI/2004 perhitungan upah lembur adalah sebagai berikut : PERHITUNGAN UPAH LEMBUR PADA HARI LIBUR/ISTIRAHAT JAM LEMBUR KETENTUAN UPAH LEMBUR RUMUS 6 Hari Kerja per minggu (40 Jam/Minggu) 7 Jam pertama 2 Kali Upah/Jam 7 jam x 2 x 1/173 x upah sebulan Jam Ke 8 3 Kali Upah/jam 1 jam x 3 x 1/173 xupah sebulan Jam Ke-9 s/d Jam ke-10 4 Kali Upah/Jam 1 jam X 4 x 1/173 x upah sebulan Hari Libur Resmi Jatuh Pada Hari Kerja Terpendek misal Jum’at 5 Jam pertama 2 X Upah/jam 5 jam x 2 x 1/173 x upah sebulan Jam ke-6 3 X Upah/jam 1 jam x 3 x 1/173 xupah sebulan Jam Ke-7 & 8 4 X Upah/jam 1 jam X 4 x 1/173 x upah sebulan 5 Hari Kerja per minggu (40 Jam/Minggu) 8 Jam pertama 2 Kali Upah/Jam 8 jam x 2 x 1/173 x upah 90 sebulan Jam ke-9 3 Kali Upah/jam 1 jam x 3 x 1/173 xupah sebulan Jam ke-10 s/d Jam ke-11 4 Kali Upah/Jam 1 jam X 4 x 1/173 x upah sebulan 2.7.3. Tunjangan Hari Raya(THR) Ketentuan mengenai pembayaran THR pada karyawan telah diatur pada NO.PER-04/MEN/1994 menteri tenaga kerja republic Indonesia tentang TUNJANGAN HARI RAYA KEAGAMAAN BAGI PEKERJA DI PERUSAHAAN dimana pada ketentuan tersebut berisi : Menimbang: a. Bahwa masyarakat Indonesia merupakan masyarakatpemeluk agama yang setiap tahunnya merayakan, hariraya keagamaan sesuai dengan agamanya’masing-masing; b. Bahwa basi pekerja untuk merayakan hari tersebut memerlukan biaya tambahan; c. Bahwa untuk merayakan hari Raya tersebut sudah sewajarnya pengusaha memberikan Tunjangan Hari RayaKeagamaan ; d. Bahwa untuk menciptakan ketenangan usaha, meningkatkan kesejahteraan pekerja dan keseragaman mengenaipemberian Tunjangan Hari Raya Keagamaan perluditetapkan dengan Peraturan Menteri. 91 Mengingat: 1. Undang-Undang No.3 tahun 1951 tentang Pernyataan berlakunya Undang-Undang Pengawasan Perburuhan tahun 1948 Nomor 23 dari Republik Indonesia untuk seluruh Indonesia (Lembaran Negara tahun-1951 Nomor 4). 2. Undang-Undang Nomor 14 tahun 1969 tentang Ketentuan-ketentuan Pokok mengenai Tenaga Kerja(Lembaran Negara tahun 1969 No.55,Tambahan Lembaran Negara No.2912). 3. Keputusan PresideD RI No, 96/M tahun 1993 tentang Pembentukan Kabinet pembangunan VI. Memutuskan : Menetapkan : PERATURAN MENTERI TENAGA KERJA TENTANG TUNJANGAN HARI RAYA KEAGAMAAN BAGIPEKERJA DI PERUSAHAAN. Pasal 1 Dalam Peraturun Menteri ini yang dimaksud dengan: 1. Perusahaan adalah setiap bentuk usaha yang menpekerjakan pekerja dengan tujuan mencari keuntungan atau tidak baik milik swasta maupun milik Pemerintah 2. a. Pengusaha adalah : Orang, Persekutuan atau Badan Hukum yang menjalankan suatu perusahaan milik sendiri b. Orang, persekutuan atau badan hukum yang secara berdiri sendiri menjalankan perusahaan bukan miliknya; 92 c. Orang, persekutuan atau badan hukum yang berada di Indonesia mewakili perusahaan sebagaimana dimaksud pada angka 1 dan angka 2, yang berkedudukan di luar Indonesia. 3. Pekerja adalah tenaga kerja yang bekerja pada Pengusaha_dengan menerima upah. 4. Tunjangan Hari Raya Kee.gamaan yang selanjutnya disebut THR, adalahpendapatan pekerja yang wajib dibayarkan oleh Pengusaha kepadapekerja atau keluarganya menjelang Hari Raya Keagamaan yang berupauang atau bentuk lain. 5. Hari Raya Keagamaan adalah Hari Raya redul Fitri bagi pekerja yangberagama Islam, Hari Raya Natal bagi pekerja yang beragama Kristen Katholik dan Protestan, Hari Raya Nyepi bagi pekerja yang beragama Hindu dan Hari Raya Waisak bagi pekerja yang beragama Budha. Pasal 2 1. Pengusaha wajib memberikan T H R kepada pekerja yang telah mempunyai masa kerja 3 bulan secara terus menerus atau lebih. 2. T H R sebagaimana dimaksud dalam ayat 1 diberikan satu kali dalam satu tahun. Pasal 3 1. Besarnya THR sebagaimana dimaksud dalam pasal 2 ayat 1 ditetapkan sebagai berikut: a. pekerja yang telah mempunyai masa kerja 12 bulan secara terus menerus atau lebih sebesar 1(satu) bulan upah. 93 b. Pekerja yang mempunyai masa kerja 3 bulan secara terus menerustetapi kurang dari 12 bulan diberikan secra proporsional dengan masa kerja yakni dengan perhitungan masa kerja/12 x 1(satu) bulanupah . 2. Upah satu bulan sebagaimana dimaksud dalam ayat (1) adalah upah pokok di tambah tunjangan-tunjangan tetap. 3. Dalam hal penetapan besarnya nilai THR menurut Kesepakatan Kerja(KK), atau Peraturan Perusahaan (PP) atau Kesepakatan Kerja Bersama(KKB) atau kebiasaan yang telah dilakukan lebih besar dari nilaiTHR sebagaimana dimaksud dalam ayat (1) maka THR yang dibayarkankepada pekerja sesuai dengan Kesepakatan Kerja, Peraturan Perusahaan, Kesepakatan Kerja Bersama atau kebiasaan yang telah dilakukan. Pasal 4 1 Pemberian THR sebagaimana dimaksud pasal 2 ayat (2)disesuaikan dengan Hari Raya Keagamaan, masing-masing pekerja kecuali kesepakatan pengusaha dan pekerja menentukan lain. 2 Pembayaran THR sebagairnana dimaksud dalam ayat (1) wajibdibayarkan oleh pengusaha selambat-lambatnya 7 (tujuh) hari sebelum Hari, Raya Keagamaan. Pasal 5 1. Dengan persetujuan pekerja, THR sebagaimana dimaksud dalam pasal 3 sebagian dapat diberikan dalam bentuk lain kecualiminuman keras, obat-obatan atau .bahan obat-obatan, dengan ketentuHn ni_ainya tidak boleh melebihi 25% (dua puluh lima persen) dari nilai THR yang seharusnya diterima. 94 2. Bentuk lain sebagaimana dimaksud dalam ayat (1) diberikan bersamaan dengan pembayaran THR. Pasal 6 1. Pekerja yang putus hubungan kerjanya terhitung sejak waktu 30(tiga puluh) hari sebelum jatuh tempo Hari Raya Keagamaanberhak alas THR. 2. Ketentuan sebagaimana dimaksud dalam ayat (1) tidak tidak berlaku bag pekerja daIam hubungan kerja untuk waktu tertentu yang hubungan kerjanya berakhir sebelum jatuh tempo Hari Raya Keagamaan. 3. Dalam hal pekerja dipindahkan ke perusahaan lain dengan masakerja berlanjut, maka pekerja berhak atas THR pada perusahaan yang baru, apabila dari perusahaan yang lama, pekerja yangbersangkutan belum mendapatkan THR. Pasal 7 1. Pengusaha yang karena kondisi perusahaannya tidak mampu membayar THR dapat mengajukan permohonan penyimpangan mengenai besarnya jumlah THR kepada Direktur Jenderal Pembinaan Hubungan Industrial dan Pengawasan Ketenagakerjaan. 2. Pengajuan permohonan sebagaimana dimaksud ayat (1) harusdiajukan paling lambat 2 bulan sebelum Hari Raya Keagamaan yang terdekat. 3. Direktur Jenderal Pembinaan Hubungan Industrial dan Pengawasan Ketenagakerjaan menetapkan besarnya jumlah THR, setelah mempertimbangkan hasil pemeriksaan keuangan perusahaan. 95 Pasal 8 1. Bagi pengusaha yang melanggar ketentuan pasal 2 ayat (1)- dan pasal 4 ayat (2), diancam dengan hukuman sesuai denganketentuan pasal 17 Undang-Undang No.14 tahun 1969 tentang ketentuan-ketentuan Pokok Mengenai Tenaga Kerja. 2. Tindak pidana sebagaimana dimaksud dalam ayat (1) adalah pe1anggaran. Pasal 9 1 Pengawasan untuk ditaatinya peraturan ini dilakukan oleh Pegawai Pengawas Ketenagakerjaan, 2 Selain Penyidik Pejabat Polisi Negara Republik Indonesia, jugakepada Pegawai Pengawas Ketenagakerjaan yang diberi wewenang khusus sebagai Penyidik sebagaimana dimaksud dalam Undang-Undang Nomor 8 tahun 1981 tentang Hukum acara Pidana (Lembaran Negara tahun 1981 Nomor 76, Tnmbahan lemmbaran Negara Nomor 3209) untuk melakukan penyidikan tindak pidana pelanggaran dalam peraturan ini. Pasal 10 Dengan ditetapkannya Peraturan Menteri ini, maka Keputusan Menteri Tenaga Kerja No.16 tahun 1968 tentang Tunjangan Hari Raya bagi Buruh Perusahaan Swasta dinyatakan tidak berlaku lagi. Pasal 11 Peraturan Menteri ini mulai berlaku pada tanggal ditetapkan. Ditetapkan di Jakarta: 16 September 1994