Selasa, 22 Oktober 2013

Integrasi Data

Sistem Basis Data : Integritas Data

Integritas Data 

Integritas data adalah jaminan konsistensi data terhadap semua status konstrain yang diberlakukan terhadap data tersebut, sehingga memberikan jaminan keabsahan data itu sendiri. Integritas data sangat erat kaitannya dengan keamanan keberadaan data, dimana dapat terjadi secara institusional atau asidental.

Jenis-Jenis Integritas Data dapat dikelompokkan sebagai berikut :

  1. Entity Integritas
  2. Domain Integritas
  3. Refrential Integritas
  4. 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.

Tipe-Tipe Constraint

Microsoft SQL Sever menyediakan beberapa tipe Constraint, yaitu :
-        PRIMARY KEY Constraint, 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 foreing key pada suatu tabel. Foreing key digunakan untuk menghubungkan dua tabel. Kolom foreign key adalah kolom atau kombinasi beberapa kolom dalam suatu tabel yang  selalu merujuk pada kolom primary keypada suatu tabel. SQL Server 2000 / MySQL – Navicat 2005 @ 2010 : www.didiksetiyadi.com 2 , dds@didiksetiyadi.com
-        UNIQUE Constraint, digunakan untuk menjamin bahwa data pada suatu kolom atauy beberapa kolom tidak diijinkan sama. CHECK Constraint, digunakan untuk membatasi suatu nilai pada kolom dengan nilai tertentuyang diijinkan masuk.
-        DEFAULT Constraint, merupakan atribut opsionalyang digunakan untuk memberikan suatu nilai tertentupada 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.

TRIGGER, PROCEDURE, FUNCTION
Trigger
Trigger adalah blok PL/SQL yang disimpan dalam database dan akan diaktivasi ketika kita melakukan statement-statement SQL (DELETE, UPDATE, dan INSERT) pada sebuah tabel. Aktivasi trigger didasarkan pada event yang terjadi di dalam tabel tersebut sehingga trigger dapat membantu dalam menjaga integritas dan konsistensi data. Implementasi trigger yang sering ditemui dalam dunia nyata adalah untuk mengeset dan mengubah nilai kolom dalam suatu tabel sehingga validasi nilai dari tabel tersebut akan terjaga. Adanya trigger dalam database akan meringankan kita dalam pembuatan aplikasi karena di dalam aplikasi yang kita buat, kita tidak perlu lagi untuk melakukan validasi data.


KEY Constraints dan DOMAIN Constraints
Jika kondisi key dan domain constraints terpenuhi dan semua skema basis data memenuhi Domain Key Normal Form, maka semua integritas konstrain pada basis data terpenuhi.

Keamanan Basis Data
Keamanan basis data adalah pemberian perlindungan basis data terhadap ancaman dan  gangguan, baik yang bersifat teknis maupun administrasi. Gangguan terhadap basis data sangat bervariasi, dimana dapat meliputi : hardware, software, manusia, dan data. Secara keseluruhan gangguan, baik fisik maupun non fisik meliputi : pencurian, hilangnya kerahasian, kehilangan privasi, kehilangan integritas, dan kehilangan kemampuan.
Untuk memberikan perlindungan keamanan basis data, diantaranya dapat dilakukan dengan pemberian otoritas terhadap pengguna dalam melakukan akses objek, yang meliputi : tabel basis data, view, aplikasi, prosedur atau objek lainnya dalam sistem. Adapun untuk jenis-jenis otorisasi adalah :

Read Authorization, pemberian otorisasi hanya untuk melakukan pembacaan data saja, dan tidak memiliki otorisasi untuk melakukan modifikasi data.

Insert Authorization, pemberian otorisasi untuk melakukan insert data baru, dan tidak memiliki otorisasi untuk melakukan modifikasi data yang sudah ada.

Update Authorization, pemberian otorisasi untuk melakukan modifikasi data, dan tidak memiliki otorisasi melakukan pengahapusan data.

Delete Authorization, pemberian otoritas untuk melakukan penghapusan data, hanya tuple (record) bukan relasi (tabel).

Index Authorization, pemberian otorisasi untuk membuat dan menghapus indek data.

Resource Authorization, pemberian otorisasi untuk melakukan pembuatan tabel (relasi) baru.

Alteration Authorization, pemberian otorisasi untuk menambahkan atau menghapus atribut pada suatu relasi (tabel).

Drop Authorization, pemberian otorisasi untuk menghapus relasi (tabel).


·         TRIGGER, PROCEDURE, FUNCTION


Trigger

Trigger adalah blok PL/SQL yang disimpan dalam database dan akan diaktivasi ketika kita melakukan statement-statement SQL (DELETE, UPDATE, dan INSERT) pada sebuah tabel. Aktivasi trigger didasarkan pada event yang terjadi di dalam tabel tersebut sehingga trigger dapat membantu dalam menjaga integritas dan konsistensi data. Implementasi trigger yang sering ditemui dalam dunia nyata adalah untuk mengeset dan mengubah nilai kolom dalam suatu tabel sehingga validasi nilai dari tabel tersebut akan terjaga. Adanya trigger dalam database akan meringankan kita dalam pembuatan aplikasi karena di dalam aplikasi yang kita buat, kita tidak perlu lagi untuk melakukan validasi data.

Syntax:

CREATE [or replace] TRIGGER nama_trigger
( BEFORE|AFTER ) ( INSERT|UPDATE [OF nama_kolom,..]|DELETE )ON nama_tabel
[FOR EACH ROW] [WHEN (kondisi)]
DECLARE
Deklarasi tipe data
BEGIN
Trigger body
END;
/

Anonymous Block

Block PL/SQL tak bernama (anonymous) menyimpannya dalam Oracle Precompiler.
Anonymous block tidak dibuat (CREATE) dan tak disimpan pada database, biasanya dijalankan dari dalam aplikasi, pada run-time aplikasi akan mengirimkan anonymous PL/SQL block ini kepada database oracle, dimana anonymous block tsb di compile dan dieksekusi.

Syntax:

DECLARE
Deklarasi variabel
BEGIN
Program prosedural
EXCEPTION
Penangananan eksepsi (ERROR)
END;
/

SUBPROGRAM

PL/SQL Block yang dipanggil dengan sekumpulan parameter. PL/SQL memiliki dua jenis subprogram yaitu: procedure dan function. Dimana secara umum procedure

Syntax:

Prosedur

CREATE OR REPLACE PROCEDURE AS
Deklarasi variabel
BEGIN
Prosedural & sql
EXCEPTION
Penanganan eksepsi (ERROR)
END ;
/


Fungsi

CREATE OR REPLACE FUNCTION RETURN
AS
 Deklarasi variabel
BEGIN
procedural and SQL
EXCEPTION
penanganan eksepsi (ERROR)
RETURN();
kalusa return ini wajib di deklarasikan
END;
/

OPTIMASI QUERY - Informasi Jalur Akses Query

OPTIMASI QUERY - Informasi Jalur Akses Query
Pada Database Oracle, informasi untuk melihat jalur akses yang akan digunakan untuk eksekusi database saat melakukan query dapat dilihat dengan menggunakan perintahexplain plain. 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 dapatdigunakan 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 terdefinisikan 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  menjorok 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 table karyawan selesai dibaca, selanjutnya adalah SELECT STATEMENT yang berfungsi untuk menampilkan hasil query.

Rabu, 09 Oktober 2013

OPTIMASI QUERY - Optimasi Perintah SQL

Cara mengoptimalkan perintah SQL tidak cukup dengan mendesain aplikasinya saja. Dalam mendesain database, seringkali lokasi fisik di nomor duakan. Terlebih hanya fokus terhadap desain logik saja. Padahal untuk menampilkan hasil query dibutuhkan pencarian yang melibatkan struktur fisik penyimpanan data. Intinya dalam mengoptimalkan query adalah dengan meminimalkan “jalur” pencarian untuk menemukan data yang disimpan dalam lokasi fisik.

Penggunaan index yang tidak tepat untuk kerja, tidak akan meningkatkan kecepatan akses data. Hal tersebut dikarenakan index pada database digunakan untuk meningkatkan kecepatan akses data. Cara kerjanya, pada saat query dijalankan, index mencari data dan menentukan nilai ROWID yang membantu menemukan lokasi data secara fisik di disk.

Misal digunakan index yang melibatkan tiga buah kolom yang mengurutkan kolom menurut kota, provinsi, dan kode pos dari tabel karyawan, sebagai berikut :

CREATE INDEX idx_kota_prov_kodepos
ON karyawan(kota,provinsi,kode_pos)
TABLESPACE INDX;

Kemudian user melakukan query sebagai berikut :
SELECT* FROM karyawan WHERE provinsi=’Jawa Barat’;

Pada saat melakukan query tersebut, 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 provinsi. Selain itu, proses pencarian data akan lebih cepat jika data terletak pada block tabel yang berdekatan daripada harus mencari dibeberapa data file yang terletak pada block yang berbeda.

Misal pada perintah SQL berikut ini :
SELECT* FROM karyawan
WHERE id BETWEEN 1010 and 2010;

Query di atas 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.

OPTIMASI QUERY - Informasi Jalur Akses Query
Pada Database Oracle, informasi untuk melihat jalur akses yang akan digunakan untuk eksekusi database saat melakukan query dapat dilihat dengan menggunakan perintahexplain plain. 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 dapatdigunakan 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 terdefinisikan 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  menjorok 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 table karyawan selesai dibaca, selanjutnya adalah SELECT STATEMENT yang berfungsi untuk menampilkan hasil query.