6 BAB 2 LANDASAN TEORI 2.1 Database Sebuah database sangat

advertisement
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
Download