clock

Kamis, 31 Oktober 2013

Revisi Optimasi Query

 

 

Data yang tersimpan dalam database semakin lama akan semakin besar ukuran atau
volumenya. Kalau tidak didukung dengan kecepatan akses yang memadai maka akan
semakin menurun unjuk kerjanya. Ukuran unjuk kerja dalam hal ini kecepatan akses
data dipengaruhi oleh banyak faktor. Pada bab ini akan membahas tentang optimasi
query serta faktor-faktor lain yang berpengaruh terhadap optimalisasi kecepatan akses
data.

 

OPTIMASI PERINTAH SQL

Desain aplikasi saja tidak cukup untuk meningkatkan unjuk kerja harus didukung

dengan optimasi dari perintah SQL yang digunakan pada aplikasi tersebut. Dalam

mendesain database, seringkali lokasi fisik data tidak menjadi perhatian penting.

Karena hanya desain logik saja yang diperhatikan. Padahal untuk menampilkan hasil

query dibutuhkan pencarian yang melibatkan struktur fisik penyimpanan data. Inti dari

optimasi query adalah meminimalkan “jalur” pencarian untuk menemukan data yang

disimpan dalam lokasi fisik.

Index pada database digunakan untuk meningkatkan kecepatan akses data. Pada

saat query dijalankan, index mencari data dan menentukan nilai ROWID yang

membantu menemukan lokasi data secara fisik di disk. Akan tetapi penggunaan index

yang tidak tepat, tidak akan meningkatkan unjuk kerja dalam hal ini kecepatan aksesdata.

Misal digunakan index yang melibatkan tiga buah kolom yang mengurutkan

kolom menurut kota, propinsi dan kode pos dari tabel mahasiswa, sebagai berikut :

 

CREATE INDEX idx_kota_prop_kodepos ON Mahasiswa(kota, propinsi, kode_pos)

TABLESPACE INDX;

 

Kemudian user melakukan query sebagai berikut :

 

SELECT * FROM mahasiswa WHERE propinsi=’Jawa Tengah’;

 

Pada query ini, index tidak akan digunakan karena kolom pertama (kota) tidak digunakan dalam klausa WHERE. Jika user sering melakukan query ini,

maka kolom index harus diurutkan menurut propinsi. Selain itu, proses pencarian data akan lebih cepat jika data terletak pada block tabel yang berdekatan daripada harus mencari di beberapa datafile yang terletak pada block yang berbeda.

 

Misal pada perintah SQL berikut ini :

 

SELECT * FROM mahasiswa

WHERE id BETWEEN 1010 AND 2010;

 

Query ini akan melakukan “scan” terhadap sedikit data block jika tabel mahasiswa

diatas diurutkan berdasarkan kolom id. Untuk mengurutkan berdasarkan kolom yang

berbeda-beda maka tabel disimpan dalam flat file, kemudian tabel diekspor dan

diurutkan sesuai kebutuhan.

Alternatif yang lain, bisa digunakan perintah untuk membuat tabel lain yang

memiliki urutan yang berbeda dari tabel asal, seperti perintah SQL berikut :

 

CREATE TABLE mahasiswa_urut

AS SELECT * FROM mahasiswa

ORDER BY id;

 

Pada SQL diatas, tabel mahasiswa_urut berisi data yang sama dengan tabel mahasiswa

hanya datanya terurut berdasarkan kolom id.

 

 

INFORMASI JALUR AKSES QUERY

Bagaimana cara melihat jalur akses yang akan digunakan database saat

melakukan query ? Pada Database Oracle, informasi ini dapat dilihat dengan

menggunakan perintah explain plan, yang akan memberi informasi tentang rencana

eksekusi dari suatu query. Informasi ini disimpan dalam tabel PLAN_TABLE yang

terdapat di schema user yang mengeksekusi perintah tersebut.

Sebelum melakukan perintah explain plan, terlebih dahulu buat table

PLAN_TABLE dengan menggunakan script utlxplan.sql yang diambil dari

\%ORACLE_HOME%\RDBMS\ADMIN.

Setelah itu table PLAN_TABLE dapat digunakan seperti contoh berikut :

SQL> explain plan

Set statement_id=’test1’

Into plan_table for

Select * from mahasiswa where nilai_uts=60;

Dalam PLAN_TABLE rencana eksekusi diatas dikenal dengan nama test1 yang

terdefinisi pada kolom statement_id.

Untuk melihat rencana eksekusi dari test1, digunakan perintah SELECT berikut :

 

SELECT LPAD(’ ’,2*Level)||Operation||’ ’||Options||’ ’||Object_Name Q_Plan

FROM plan_table

WHERE statement_id=’test1’

CONNECT BY PRIOR id=parent_id AND statement_id=’test1’

START WITH id=0 AND statement_id=’test1’;

 

Contoh hasil dari eksekusi query tersebut :

 

Q_PLAN

--------------------------------------------------------------------

SELECT STATEMENT

TABLE ACCESS FULL MAHASISWA

 

Output tersebut dibaca mulai dari yang indent-nya paling dalam yaitu : TABLE

ACCESS FULL MAHASISWA. Dikarenakan klausa WHERE melibatkan kolom nilai

namun kolom nilai tidak ada index-nya, maka Oracle melakukan full table scan. Setelah seluruh tabel mahasiswa selesai dibaca, selanjutnya adalah SELECT STATEMENT yang berfungsi untuk menampilkan hasil query.

 

Perintah dari SQL yang digunakan untuk meminta sebuah tindakan kepada DBMS.
Pernyataan dasar SQL antara lain :
1. ALTER      : Merubah struktur tabel
2. COMMIT           : Mengakhiri eksekusi transaksi
3. CREATE   : Membuat tabel, indeks
4. DELETE   : Menghapus baris pada sebuah tabel
5. DROP       : Menghapus tabel, indeks
6. GRANT    : Menugaskan hak terhadap basis data kepada user
7. INSERT   : Menambah baris pada tabel
8. REVOKE   : Membatalkan hak kepada basis data
9. ROLLBACK: Mengembalikan pada keadaan semula apabila transaksi gagal dilaksanakan
10. SELECT : Memilih baris dan kolom pada sebuah tabel
11. UPDATE : Mengubah value pada baris sebuah tabel

Nama
Nama digunakan sebagai identitas, yaitu identitas bagi objek pada DBMS. Misal : tabel, kolom dan pengguna.

 Tipe data
Tipe data yang ada dalam MYSQL :

a. Tipe data numerik antara lain :
1. TINYINT : Nilai integer yang sangat kecil
2. SMALLINT : Nilai integer yang kecil
3. MEDIUMINT : Nilai integer yang sedang
4. INT : Nilai integer dengan nilai standar
5. BEGINT : Nilai integer dengan nilai besar
6. FLOAT :Bilangan decimal dengan single-precission
7. DOUBLE :Bilangan decimal dengan double-precission
8. DECIMAL(M,D) : Bilangan float yang dinyatakan sebagai string. M : jumlah
    digit yang disimpan, D : jumlah angka dibelakang koma

b. Tipe data String antara lain :
1. CHAR : Karakter yang memiliki panjang tetap yaitu sebanyak n
2. VARCHAR : Karakter yang memiliki panjang tidak tetap yaitu maksimum n
3. TINYBLOB : BLOB dengan ukuran sangat kecil
4. BLOB : BLOB yang memiliki ukuran kecil
5. MEDIUMBLOB : BLOB yang memiliki ukuran sedang
6. LONGBLOB : BLOB yang memiliki ukuran besar
7. TINYTEXT : teks dengan ukuran sangat kecil
8. TEXT : teks yang memiliki ukuran kecil
9. MEDIUMTEXT : teks yang memiliki ukuran sedang
10. LONGTEXT : teks yang memiliki ukuran besar
11. ENUM : kolom diisi dengan satu member enumerasi
12. SET : Kolom dapat diisi dengan beberapa nilai anggota himpunan

c. Tipe data tunggal dan jam :
1. DATE : date memiliki format tahun-bulan-tanggal
2. TIME : time memiliki format jam-menit-detik
3. DATETIME : gabungan dari format date dan time

 Ekspresi
Ekspresi digunakan untuk menghasilkan/menghitung nilai.
Misalnya : jumlah=harga-diskon
Ekspresi aritmatika antara lain :
1. + : tambah
2. – : kurang
3. / : bagi
4. * : kali

 Fungsi bawaan
Fungsi adalah subprogram yang dapat menghasilkan suatu nilai apabila fungsi tersebut dipanggil. Fungsi Agregat adalah fungsi yang digunakan untuk melakukan summary, statistik yang dilakukan pada suatu tabel/query.
1. AVG(ekspresi) : digunakan untuk mencari nilai rata-rata dalam kolom dari tabel.
2. COUNT(x) : digunakan untuk menghitung jumlah baris dari sebuah kolom
dari tabel
3. MAX(ekspresi) : digunakan untuk mencari nilai yang paling besar dari suatu
kolom dari tabel
4. MIN(ekspresi) : digunakan untuk mencari nilai yang paling kecil dari suatu
kolom dari tabel
5. SUM(ekspresi) : digunakan untuk mengitung jumlah keseluruhan dari suatu
kolom dari tabel

 

FAKTOR-FAKTOR YANG BERPENGARUH TERHADAP KECEPATAN AKSES DATA

Faktor lain yang berpengaruh terhadap kecepatan akses data, tidak hanya terletak

pada optimasi perintah SQL, tapi terhadap hal-hal lain yang berpengaruh. Diantaranya adalah optimasi aplikasi dan penggunaan cluster dan index. Hal yang akan dibahas dalam optimasi query berikut ini tidak melibatkan penggunaan komponen yang ada dalam Arsitektur database engine, misal pada database Oracle kecepatan akses data dipengaruhi oleh penyesuaian pada shared pool, buffer cache, redo log buffer dan sistem operasi yang digunakan.

1. OPTIMASI APLIKASI

Dalam pembuatan aplikasi, yang perlu mendapat perhatian adalah apakah akses

terhadap data sudah efisien. Efisien dalam hal penggunaan obyek yang mendukung

kecepatan akses, seperti index atau cluster. Kemudian juga bagaimana cara database didesain.

Apakah desain database sudah melakukan normalisasi data secara tepat.

Kadangkala normalisasi sampai level yang kesekian, tidak menjamin suatu

desain yang efisien. Untuk membuat desain yang lebih tepat, kadang setelah melakukan normalisasi perlu dilakukan denormalisasi. Misalnya tabel yang hubungannya one-toone dan sering diakses bersama lebih baik disatukan dalam satu tabel.

2. CLUSTER DAN INDEX

Cluster adalah suatu segment yang menyimpan data dari tabel yang berbeda

dalam suatu struktur fisik disk yang berdekatan. Konfigurasi ini bermanfaat untuk

akses data dari beberapa tabel yang sering di-query. Penggunaan cluster secara tepat dilaksanakan setelah menganalisa tabel-tabel mana saja yang sering di-query secara bersamaan menggunaan perintah SQL join.

Jika aplikasi sering melakukan query dengan menggunakan suatu kolom yang

berada pada klausa WHERE, maka harus digunakan index yang melibatkan kolom

tersebut. Penggunaan index yang tepat bergantung pada jenis nilai yang terdapat dalam kolom yang akan diindex. Dalam RDBMS Oracle, index B-Tree digunakan untuk kolom yang mengandung nilai yang cukup bervariasi, sedangkan untuk nilai yang tidak memiliki variasi cukup banyak, lebih baik menggunakan index bitmap.

 

RINGKASAN

Ø  Data yang tersimpan dalam jumlah yang sangat besar, Terdapat aturan system

informasi dalam organisasi, system basis data dilihat sebagai bagian system

informasi dalam aplikasi berskala besar.

Ø  Untuk meningkatkan unjuk kerja tidak hanya desain logik saja yang diperhatikan

tapi juga struktur fisik penyimpanan data.

Ø  Penggunaan Index pada database secara tepat, dapat digunakan untuk

meningkatkan kecepatan akses data.

Ø  Informasi tentang jalur akses yang digunakan oleh database untuk melaksanakan

query dalam database Oracle dapat dengan menggunakan perintah explain plan.

Ø  Selain optimasi perintah SQL, faktor lain yang berpengaruh terhadap kecepatan

akses data adalah optimasi aplikasi dan penggunaan cluster dan index.

Ø  Pada sebuah database engine semisal pada database Oracle kecepatan akses data

dipengaruhi oleh beberapa komponen arsitektur pembentuknya seperti shared

pool, buffer cache, dan redo log buffer.

Ø  Optimasi aplikasi tergantung pada efisiensi penggunaan obyek yang mendukung

kecepatan akses seperti index atau cluster, dan normalisasi data pada desain database.

 

Revisi Integritas Basis Data

 

Integritas Data

Integritas Data Dalam Basis Data
Integritas data dalam pengertiannya yang luas mengacu pada kepercayaan dari sumber daya suatu sistem. Secara lebih analitik, integritas adalah “kesetiaan representasional informasi untuk keadaan sebenarnya dari objek yang mewakili informasi, dimana kesetiaan itu sendiri terdiri dari empat atribut inti yaitu: kelengkapan, ketepatan waktu, akurasi / kebenaran, dan validitas”. Konsep ini sendiri sudah banyak digunakan.
Integritas data sangat penting didalam operasi database tertentu dan umumnya pada data pergudangan dan bisnis intelijens. Karena integritas data dapat memastikan keakuratan, konsistensi, aksesibilitasi, dan kualitas tinggi dari sebuah data, sehingga sangat penting untuk mengikuti aturan pengintegritasan suatu data.
Data yang memiliki integritas identik dipertahankan selama operasi apapun (seperti bisnis transfer, penyimpanan, atau pengambilan). secara sederhana dalam istilah bisnis, integritas data adalah jaminan bahwa data konsisten, bersertifikat dan dapat dirujukkan.

Contoh: contoh dari mekanisme integritas data adalah hubungan orangtua dan anak dengan record terkait. Jika dalam catatan orangtua memiliki satu atau lebih dari catatan anak terkait semua proses integritas referensial akan ditangani oleh database itu sendiri, yang secara otomatis menjamin keakuratan dan integritas data sehingga tidak ada catatan anak bisa ada tanpa orang tua (atau disebut juga yatim piatu) dan bahwa tidak ada orangtua kehilangan catatan anak mereka. Ini juga menjamin bahwa tidak ada catatan induk dapat dihapus sementara orangtua memiliki record setiap anak. Semua ini ditangani pada tingkat database dan tidak memerlukan coding cek integritas ke dalam setiap aplikasi.

Ada beberapa cara dan tujuan dalam menjaga integritas data, diantaranya :

     1. Memasukkan aturan bisnis di dalam database
     2. Menjaga agar data yang tidak valid tidak masuk ke database
     3. Menjaga konsistensi data pada relasi keterkaitan antar tabel

Mengapa harus menangani integritas data pada level database programming ? Karena :

1.Menangani integritas data pada level database lebih murah dan mudah dibandingkan dengan  menanganinya di level  aplikasi.

2.Bugs akibat data yang tidak valid pada database tidak mudah ditemukan dan dapat muncul di kemudian hari.

3.Ketahanan database akan lebih kuat untuk jangka panjang jika ditangani dengan benar

 

Jenis-Jenis Integritas Data dapat dikelompokkan sebagai berikut :

1.     Entity Integritas

Entity Integritas mendefinisikan sebuah baris sebagai sebuah entitas yang unik untuk suatu tabel. Entity integritas memaksa integritas dari column atau primary key dari suatu tabel (melalui index, unique, constraints, primary key). Primary key tidak boleh null.

2.    Domain Integritas

Domain Integritas merupakan validasi dari masukan untuk sebuah kolom. Anda dapat memaksa domain integritas dengan membatasi tipe (melalui data types), format (melalui check constraints dan rules), atau range nilai-nilai yang mungkin (melalui Foreign Key Constraints, Check Constraints, Default Definitions dan rules).

3.    Refrential Integritas

Refrential Integritas memastikan bahwa seluruh nilai dari foreign key cocok dengan nilai primary key yang dihubungkan

4.    User Defined Integritas
User–defined integritas mengizinkan Anda untuk menentukan spesific business rules sendiri yang tidak sama pada kategori integrity yang lain.

Types of Data Integrity
Bagian ini menggambarkan atauran yang dapaat diterapkan pada kolom tabel ayang menekankan perbedaan tipe data pada integritas data.

1.Null Rule
Aturan null  adalah definisi aturan pada single column yang membolehkan atau tidak membolehkan inserts atau updates untuk pengisian rows kosong (the absence of a value) pada kolom ini.

 

2.    Unique Column Values
Aturan nilai unique didefinisan pada sebuah column (or set of columns) yang membolehkan insert or update hanya pada row jika itu berisi  sebuah nilai unique dalam sebuah kolom (or set of columns).

 

3.    Primary Key Values
Aturan nilai primary key didefinisikan pada sebuah key (a column or set of columns) tertentu bahwasetiap each row dalam table dapat mengidentifikasi keunikan dengan nilai kunci tersebut

 

4.    Referential Integrity Rules
Aturan referential integrity adalah definsi aturan pada sebuah kunci key (a column or set of columns) dalam sebuah table yang menjamin bahwa data dalam kunci cocok dengan nilai dalam sebuah relasi table (the referenced value).
 

 

Aturan-Aturan Referential Integrity
Referential integrity mengacu pada kaitan antar row/record dari 2 tabel yang berhubungan melalui Foreign Key yang bersangkutan.
Pada insert, record harus dimasukkan di tabel utama dahulu, kemudian baru di tabel kedua.
Pada delete, record harus dihapus di tabel kedua dahulu, kemudian baru di tabel utama.
Field yang dihubungkan dari tabel utama haruslah berupa Primary Key.
Kedua field yang saling behubungkan harus memiliki Tipe data dan lebar data yang sama.
Tidak dibenarkan penghapusan record pada tabel utama yang telah dihubungkan dengan tabel yang direlasikan.

Macam action dalam Referential Integrity:
NO ACTION atau RESTRICT : update atau delete tidak dilakukan. Ini merupakan pilihan default.
CASCADE : nilai kolom di tabel kedua disesuaikan dengan nilai kolom di tabel utama
SET NULL : nilai kolom di tabel kedua dijadikan NULL
SET DEFAULT : nilai kolom di tabel kedua dijadikan nilai DEFAULT (nilai DEFAULT harus ditentukan pada waktu pembuatan tabel).

Membuat Constraint
 Constraint merupakan suatu aturan yang membatasi jenis data yang diijinkan  untuk dimasukkan ke dalam tabel. Constraint dapat dibuat baik pada saat pembuatan tabel atau setelah tabel dibuat. Ketika constraint dibuat setelah pembuatan tabel, maka  constraint tersebut hanya mengecek data yang ada (yang telah dimasukkan dalam  tabel). Jika ada beberapa pelanggaran maka constraint akan ditolak.

Constraint Classification (Tipe-tipe Constraint) :
·         PRIMARY  KEY Constraint
Berguna untuk menspesifikasikan kolom dalam tabel. Tidak boleh kosong dan harus unik, untuk menghubungkan satu tabel dengan tabel lain.
·         FOREIGN KEY Constraint
Digunakan untuk menspesifikasikan kolom foreign key pada suatu tabel. Foreign Key digunakan untuk menghubungkan dua tabel. Kolom foreign key adalah kolom atau kombinasi beberapa kolom dalam suatu tabel yang selalu merujuk pada kolom primary key pada suatu tabel.
·         UNIQUE Constraint
Digunakan untuk menjamin bahwa data pada suatu kolom atau beberapa kolom tidak diijinkan sama.
·         CHECK Constraint
Digunakan untuk membatasi suatu nilai pada kolom dengan nilai tertentu yang diijinkan masuk.
·         DEFAULT Constraint
Merupakan atribut opsional yang digunakan untuk memberikan suatu nilai tertentu pada suatu kolom jika kolom tersebut tidak dimasukkan suatu data.
·         NOT NULL
Digunakan untuk menjamin tidak ada nilai null (kosong) yang muncul pada suatu kolom tertentu sehingga bila tidak mengisikan nilai pada kolom tersebut maka akan muncul error.

Key 
Kunci (key) adalah kolom/atribut atau kombinasi kolom/atribut yang dapat digunakan untuk mengidentifikasi baris dalam tabel (entitas) secara unik.

Macam – macam kunci pada pada Basis data

Tabel 1
Tabel MHS

 

NIM Nama Alamat
A11.2011.061234 Wahyu Saputra Semarang
A11.2012.07654 May Arifin Brebes
A11.2010.02310 Tina Liliana Pati
 

 

Tabel 2

Tabel MaKUL

KDMK MaKul SKS
A11.2304 Metodologi Penelitian 3
A11.4045 Basis Data 3
A11.3067 Sistem Basis Data 3

 


Tabel 3
Tabel NILAI

NIM KDMK UTS UAS
A11.2011.061234 A11.2304 60 75
A11.2012.076543 A11.3067 70 70
A11.2010.023109 A11.4045 75 80

 


v  Super Key
Sebuah atau sekumpulan atribut yang secara unik mengidentifikasi sebuah tupel dalam tabel relasi. Berdasarkan contoh tabel MHS sebelumnya, super key yang mungkin adalah (NIM), (NIM, Nama), (NIM, Alamat), (Nama, Alamat), dan (NIM, Nama, Alamat).
v  Candidate Key
Super key yang himpunan bagian yang sebenarnya tidak ada yang menjadi super key juga. Berdasarkan contoh super key sebelumnya, candidate key yang mungkin adalah (NIM) dan (Nama, Alamat). Atribut Nama dan Alamat dapat dijadikan candidate key jika kombinasi keduanya bisa menjadi pengidentifikasi yang unik untuk sebuah tabel relasi.  
v  Primary Key
Candidate key yang dipilih sebagai pengidentifikasi unik untuk sebuah tabel relasi. Berdasarkan contoh candidate key sebelumnya, primary key yang dipilih adalah (NIM), karena nilai NIM sangat unik dan tidak ada 2 mahasiswa yang memiliki NIM yang sama.
v  Alternate Key
Candidate key yang tidak dipilih sebagai primary key. Berdasarkan contoh candidate key sebelumnya, alternate key adalah (Nama, Alamat).
v   Composite key
Composite key merupakan gabungan dua key atau lebih yang secara unik dapat menidentiifikasi sebuah tupel. Contoh composite key adalah KDMK .
v  Foreign Key
Foreign Key merupakan atribut yang merupakan key pada relasi lain. – macam kunci pada pada Basis data

Sabtu, 12 Oktober 2013

Integritas Basis Data

Integritas Data
Integritas Data Dalam Basis Data
Integritas data dalam pengertiannya yang luas mengacu pada kepercayaan dari sumber daya suatu sistem. Secara lebih analitik, integritas adalah “kesetiaan representasional informasi untuk keadaan sebenarnya dari objek yang mewakili informasi, dimana kesetiaan itu sendiri terdiri dari empat atribut inti yaitu: kelengkapan, ketepatan waktu, akurasi / kebenaran, dan validitas”. Konsep ini sendiri sudah banyak digunakan.
Integritas data sangat penting didalam operasi database tertentu dan umumnya pada data pergudangan dan bisnis intelijens. Karena integritas data dapat memastikan keakuratan, konsistensi, aksesibilitasi, dan kualitas tinggi dari sebuah data, sehingga sangat penting untuk mengikuti aturan pengintegritasan suatu data.
Data yang memiliki integritas identik dipertahankan selama operasi apapun (seperti bisnis transfer, penyimpanan, atau pengambilan). secara sederhana dalam istilah bisnis, integritas data adalah jaminan bahwa data konsisten, bersertifikat dan dapat dirujukkan.

Contoh: contoh dari mekanisme integritas data adalah hubungan orangtua dan anak dengan record terkait. Jika dalam catatan orangtua memiliki satu atau lebih dari catatan anak terkait semua proses integritas referensial akan ditangani oleh database itu sendiri, yang secara otomatis menjamin keakuratan dan integritas data sehingga tidak ada catatan anak bisa ada tanpa orang tua (atau disebut juga yatim piatu) dan bahwa tidak ada orangtua kehilangan catatan anak mereka. Ini juga menjamin bahwa tidak ada catatan induk dapat dihapus sementara orangtua memiliki record setiap anak. Semua ini ditangani pada tingkat database dan tidak memerlukan coding cek integritas ke dalam setiap aplikasi.

Ada beberapa cara dan tujuan dalam menjaga integritas data, diantaranya :

     1. Memasukkan aturan bisnis di dalam database
     2. Menjaga agar data yang tidak valid tidak masuk ke database
     3. Menjaga konsistensi data pada relasi keterkaitan antar tabel

Mengapa harus menangani integritas data pada level database programming ? Karena :

    Menangani integritas data pada level database lebih murah dan mudah dibandingkan dengan  menanganinya di level aplikasi
    Bugs akibat data yang tidak valid pada database tidak mudah ditemukan dan dapat muncul di kemudian hari
     Ketahanan database akan lebih kuat untuk jangka panjang jika ditangani dengan benar

Jenis-Jenis Integritas Data dapat dikelompokkan sebagai berikut :

    Entity Integritas
    Domain Integritas
    Refrential Integritas
    User Defined Integritas



1. Entity Integritas
Entity Integritas mendefinisikan sebuah baris sebagai sebuah entitas yang unik untuk suatu tabel. Entity integritas memaksa integritas dari column atau primary key dari suatu tabel (melalui index, unique, constraints, primary key). Primary key tidak boleh null.
2. Domain Integritas
Domain Integritas merupakan validasi dari masukan untuk sebuah kolom. Anda dapat memaksa domain integritas dengan membatasi tipe (melalui data types), format (melalui check constraints dan rules), atau range nilai-nilai yang mungkin (melalui Foreign Key Constraints, Check Constraints, Default Definitions dan rules).
3. Refrential Integritas
Refrential Integritas memastikan bahwa seluruh nilai dari foreign key cocok dengan nilai primary key yang dihubungkan.
4. User Defined Integritas
User–defined integritas mengizinkan Anda untuk menentukan spesific business rules sendiri yang tidak sama pada kategori integrity yang lain.

Types of Data Integrity
Bagian ini menggambarkan atauran yang dapaat diterapkan pada kolom tabel ayang menekankan perbedaan tipe data pada integritas data.
1. Null Rule
Aturan null  adalah definisi aturan pada single column yang membolehkan atau tidak membolehkan inserts atau updates untuk pengisian rows kosong (the absence of a value) pada kolom ini.
2. Unique Column Values
Aturan nilai unique didefinisan pada sebuah column (or set of columns) yang membolehkan insert or update hanya pada row jika itu berisi  sebuah nilai unique dalam sebuah kolom (or set of columns).
3. Primary Key Values
Aturan nilai primary key didefinisikan pada sebuah key (a column or set of columns) tertentu bahwasetiap each row dalam table dapat mengidentifikasi keunikan dengan nilai kunci tersebut

4. Referential Integrity Rules
Aturan referential integrity adalah definsi aturan pada sebuah kunci key (a column or set of columns) dalam sebuah table yang menjamin bahwa data dalam kunci cocok dengan nilai dalam sebuah relasi table (the referenced value).

Aturan-Aturan Referential Integrity
Referential integrity mengacu pada kaitan antar row/record dari 2 tabel yang berhubungan melalui Foreign Key yang bersangkutan.
Pada insert, record harus dimasukkan di tabel utama dahulu, kemudian baru di tabel kedua.
Pada delete, record harus dihapus di tabel kedua dahulu, kemudian baru di tabel utama.
Field yang dihubungkan dari tabel utama haruslah berupa Primary Key.
Kedua field yang saling behubungkan harus memiliki Tipe data dan lebar data yang sama.
Tidak dibenarkan penghapusan record pada tabel utama yang telah dihubungkan dengan tabel yang direlasikan.

Macam action dalam Referential Integrity:
NO ACTION atau RESTRICT : update atau delete tidak dilakukan. Ini merupakan pilihan default.
CASCADE : nilai kolom di tabel kedua disesuaikan dengan nilai kolom di tabel utama
SET NULL : nilai kolom di tabel kedua dijadikan NULL
SET DEFAULT : nilai kolom di tabel kedua dijadikan nilai DEFAULT (nilai DEFAULT harus ditentukan pada waktu pembuatan tabel).

Membuat Constraint
 Constraint merupakan suatu aturan yang membatasi jenis data yang diijinkan  untuk dimasukkan ke dalam tabel. Constraint dapat dibuat baik pada saat pembuatan tabel atau setelah tabel dibuat. Ketika constraint dibuat setelah pembuatan tabel, maka  constraint tersebut hanya mengecek data yang ada (yang telah dimasukkan dalam  tabel). Jika ada beberapa pelanggaran maka constraint akan ditolak.

Constraint Classification (Tipe-tipe Constraint) :
·         PRIMARY  KEY Constraint
Berguna untuk menspesifikasikan kolom dalam tabel. Tidak boleh kosong dan harus unik, untuk menghubungkan satu tabel dengan tabel lain.
·         FOREIGN KEY Constraint
Digunakan untuk menspesifikasikan kolom foreign key pada suatu tabel. Foreign Key digunakan untuk menghubungkan dua tabel. Kolom foreign key adalah kolom atau kombinasi beberapa kolom dalam suatu tabel yang selalu merujuk pada kolom primary key pada suatu tabel.
·         UNIQUE Constraint
Digunakan untuk menjamin bahwa data pada suatu kolom atau beberapa kolom tidak diijinkan sama.
·         CHECK Constraint
Digunakan untuk membatasi suatu nilai pada kolom dengan nilai tertentu yang diijinkan masuk.
·         DEFAULT Constraint
Merupakan atribut opsional yang digunakan untuk memberikan suatu nilai tertentu pada suatu kolom jika kolom tersebut tidak dimasukkan suatu data.
·         NOT NULL
Digunakan untuk menjamin tidak ada nilai null (kosong) yang muncul pada suatu kolom tertentu sehingga bila tidak mengisikan nilai pada kolom tersebut maka akan muncul error.

Key 
Kunci (key) adalah kolom/atribut atau kombinasi kolom/atribut yang dapat digunakan untuk mengidentifikasi baris dalam tabel (entitas) secara unik.

Macam – macam kunci pada pada Basis data

Tabel 1
Tabel MHS
NIMNamaAlamatA11.2011.01234Wahyu SaputraSemarangA11.2012.07654May ArifinBrebesA11.2010.02310Tina LilianaPati

Tabel 2
Tabel MKUL
KDMKMaKulSKSA11.2034Metodologi Penelitian3A11.4045Basis Data3A11.3067Sistem Basis Data3

Tabel 3
Tabel NILAI
NIMKDMKUTSUASA11.2011.01234A11.20346075A11.2012.07654A11.30677070A11.2010.02310A11.40457580

v  Super Key
Sebuah atau sekumpulan atribut yang secara unik mengidentifikasi sebuah tupel dalam tabel relasi. Berdasarkan contoh tabel MHS sebelumnya, super key yang mungkin adalah (NIM), (NIM, Nama), (NIM, Alamat), (Nama, Alamat), dan (NIM, Nama, Alamat).
v  Candidate Key
Super key yang himpunan bagian yang sebenarnya tidak ada yang menjadi super key juga. Berdasarkan contoh super key sebelumnya, candidate key yang mungkin adalah (NIM) dan (Nama, Alamat). Atribut Nama dan Alamat dapat dijadikan candidate key jika kombinasi keduanya bisa menjadi pengidentifikasi yang unik untuk sebuah tabel relasi.  
v  Primary Key
Candidate key yang dipilih sebagai pengidentifikasi unik untuk sebuah tabel relasi. Berdasarkan contoh candidate key sebelumnya, primary key yang dipilih adalah (NIM), karena nilai NIM sangat unik dan tidak ada 2 mahasiswa yang memiliki NIM yang sama.
v  Alternate Key
Candidate key yang tidak dipilih sebagai primary key. Berdasarkan contoh candidate key sebelumnya, alternate key adalah (Nama, Alamat).
v   Composite key
Composite key merupakan gabungan dua key atau lebih yang secara unik dapat menidentiifikasi sebuah tupel. Contoh composite key adalah KDMK .
v  Foreign Key
Foreign Key merupakan atribut yang merupakan key pada relasi lain. – macam kunci pada pada Basis data

Jumat, 20 September 2013

Optimasi Query



Data yang tersimpan dalam database semakin lama akan semakin besar ukuran atau
volumenya. Kalau tidak didukung dengan kecepatan akses yang memadai maka akan
semakin menurun unjuk kerjanya. Ukuran unjuk kerja dalam hal ini kecepatan akses
data dipengaruhi oleh banyak faktor. Pada bab ini akan membahas tentang optimasi
query serta faktor-faktor lain yang berpengaruh terhadap optimalisasi kecepatan akses
data.

OPTIMASI PERINTAH SQL
Desain aplikasi saja tidak cukup untuk meningkatkan unjuk kerja harus didukung
dengan optimasi dari perintah SQL yang digunakan pada aplikasi tersebut. Dalam
mendesain database, seringkali lokasi fisik data tidak menjadi perhatian penting.
Karena hanya desain logik saja yang diperhatikan. Padahal untuk menampilkan hasil
query dibutuhkan pencarian yang melibatkan struktur fisik penyimpanan data. Inti dari
optimasi query adalah meminimalkan “jalur” pencarian untuk menemukan data yang
disimpan dalam lokasi fisik.
Index pada database digunakan untuk meningkatkan kecepatan akses data. Pada
saat query dijalankan, index mencari data dan menentukan nilai ROWID yang
membantu menemukan lokasi data secara fisik di disk. Akan tetapi penggunaan index
yang tidak tepat, tidak akan meningkatkan unjuk kerja dalam hal ini kecepatan akses
data.
Misal digunakan index yang melibatkan tiga buah kolom yang mengurutkan
kolom menurut kota, propinsi dan kode pos dari tabel karyawan, sebagai berikut :

CREATE INDEX idx_kota_prop_kodepos
ON karyawan(kota, propinsi, kode_pos)
TABLESPACE INDX;

Kemudian user melakukan query sebagai berikut :

SELECT * FROM karyawan WHERE propinsi=’Jawa Tengah’;

Pada saat melakukan query ini, index tidak akan digunakan karena kolom pertama
(kota) tidak digunakan dalam klausa WHERE. Jika user sering melakukan query ini,
maka kolom index harus diurutkan menurut propinsi. Selain itu, proses pencarian data
akan lebih cepat jika data terletak pada block tabel yang berdekatan daripada harus
mencari di beberapa datafile yang terletak pada block yang berbeda.
Misal pada perintah SQL berikut ini :

SELECT * FROM karyawan
WHERE id BETWEEN 1010 AND 2010;

Query ini akan melakukan “scan” terhadap sedikit data block jika tabel karyawan
diatas diurutkan berdasarkan kolom id. Untuk mengurutkan berdasarkan kolom yang
berbeda-beda maka tabel disimpan dalam flat file, kemudian tabel diekspor dan
diurutkan sesuai kebutuhan.
Alternatif yang lain, bisa digunakan perintah untuk membuat tabel lain yang
memiliki urutan yang berbeda dari tabel asal, seperti perintah SQL berikut :

CREATE TABLE karyawan_urut
AS SELECT * FROM karyawan
ORDER BY id;

Pada SQL diatas, tabel karyawan_urut berisi data yang sama dengan tabel karyawan
hanya datanya terurut berdasarkan kolom id.


INFORMASI JALUR AKSES QUERY
Bagaimana cara melihat jalur akses yang akan digunakan database saat
melakukan query ? Pada Database Oracle, informasi ini dapat dilihat dengan
menggunakan perintah explain plan, yang akan memberi informasi tentang rencana
eksekusi dari suatu query. Informasi ini disimpan dalam tabel PLAN_TABLE yang
terdapat di schema user yang mengeksekusi perintah tersebut.
Sebelum melakukan perintah explain plan, terlebih dahulu buat table
PLAN_TABLE dengan menggunakan script utlxplan.sql yang diambil dari
\%ORACLE_HOME%\RDBMS\ADMIN.
Setelah itu table PLAN_TABLE dapat digunakan seperti contoh berikut :
SQL> explain plan
Set statement_id=’test1’
Into plan_table for
Select * from karyawan where gaji=2000000;
Dalam PLAN_TABLE rencana eksekusi diatas dikenal dengan nama test1 yang
terdefinisi pada kolom statement_id.
Untuk melihat rencana eksekusi dari test1, digunakan perintah SELECT berikut :

SELECT LPAD(’ ’,2*Level)||Operation||’ ’||Options||’ ’||Object_Name Q_Plan
FROM plan_table
WHERE statement_id=’test1’
CONNECT BY PRIOR id=parent_id AND statement_id=’test1’
START WITH id=0 AND statement_id=’test1’;

Contoh hasil dari eksekusi query tersebut :

Q_PLAN
--------------------------------------------------------------------
SELECT STATEMENT
TABLE ACCESS FULL KARYAWAN

Output tersebut dibaca mulai dari yang indent-nya paling dalam yaitu : TABLE
ACCESS FULL KARYAWAN. Dikarenakan klausa WHERE melibatkan kolom gaji
namun kolom gaji tidak ada index-nya, maka Oracle melakukan full table scan. Setelah
seluruh tabel karyawan selesai dibaca, selanjutnya adalah SELECT STATEMENT yang
berfungsi untuk menampilkan hasil query.

FAKTOR-FAKTOR YANG BERPENGARUH TERHADAP KECEPATAN AKSES DATA
Faktor lain yang berpengaruh terhadap kecepatan akses data, tidak hanya terletak
pada optimasi perintah SQL, tapi terhadap hal-hal lain yang berpengaruh. Diantaranya
adalah optimasi aplikasi dan penggunaan cluster dan index. Hal yang akan dibahas
dalam optimasi query berikut ini tidak melibatkan penggunaan komponen yang ada
dalam Arsitektur database engine, misal pada database Oracle kecepatan akses data
dipengaruhi oleh penyesuaian pada shared pool, buffer cache, redo log buffer dan sistem
operasi yang digunakan.
1. OPTIMASI APLIKASI
Dalam pembuatan aplikasi, yang perlu mendapat perhatian adalah apakah akses
terhadap data sudah efisien. Efisien dalam hal penggunaan obyek yang mendukung
kecepatan akses, seperti index atau cluster. Kemudian juga bagaimana cara database didesain.
Apakah desain database sudah melakukan normalisasi data secara tepat.
Kadangkala normalisasi sampai level yang kesekian, tidak menjamin suatu
desain yang efisien. Untuk membuat desain yang lebih tepat, kadang setelah melakukan
normalisasi perlu dilakukan denormalisasi. Misalnya tabel yang hubungannya one-toone
dan sering diakses bersama lebih baik disatukan dalam satu tabel.
2. CLUSTER DAN INDEX
Cluster adalah suatu segment yang menyimpan data dari tabel yang berbeda
dalam suatu struktur fisik disk yang berdekatan. Konfigurasi ini bermanfaat untuk
akses data dari beberapa tabel yang sering di-query. Penggunaan cluster secara tepat
dilaksanakan setelah menganalisa tabel-tabel mana saja yang sering di-query secara
bersamaan menggunaan perintah SQL join.
Jika aplikasi sering melakukan query dengan menggunakan suatu kolom yang
berada pada klausa WHERE, maka harus digunakan index yang melibatkan kolom
tersebut. Penggunaan index yang tepat bergantung pada jenis nilai yang terdapat dalam
kolom yang akan diindex. Dalam RDBMS Oracle, index B-Tree digunakan untuk
kolom yang mengandung nilai yang cukup bervariasi, sedangkan untuk nilai yang tidak
memiliki variasi cukup banyak, lebih baik menggunakan index bitmap.

RINGKASAN
Ø  Data yang tersimpan dalam jumlah yang sangat besar, Terdapat aturan system
informasi dalam organisasi, system basis data dilihat sebagai bagian system
informasi dalam aplikasi berskala besar.
Ø  Untuk meningkatkan unjuk kerja tidak hanya desain logik saja yang diperhatikan
tapi juga struktur fisik penyimpanan data.
Ø  Penggunaan Index pada database secara tepat, dapat digunakan untuk
meningkatkan kecepatan akses data.
Ø  Informasi tentang jalur akses yang digunakan oleh database untuk melaksanakan
query dalam database Oracle dapat dengan menggunakan perintah explain plan.
Ø  Selain optimasi perintah SQL, faktor lain yang berpengaruh terhadap kecepatan
akses data adalah optimasi aplikasi dan penggunaan cluster dan index.
Ø  Pada sebuah database engine semisal pada database Oracle kecepatan akses data
dipengaruhi oleh beberapa komponen arsitektur pembentuknya seperti shared
pool, buffer cache, dan redo log buffer.
Ø  Optimasi aplikasi tergantung pada efisiensi penggunaan obyek yang mendukung
kecepatan akses seperti index atau cluster, dan normalisasi data pada desain database.