diktat_DB2

download diktat_DB2

of 154

description

Diktat Belajar Database Lanjut

Transcript of diktat_DB2

DATABASE LANJUT DENGAN MENGGUNAKAN IBM DB2 & JAVA

DIKTAT KULIAH

Oleh: Hendra, MT. Jimmy S.Kom.

PROGRAM STUDI TEKNIK INFORMASI STMIK IBBI MEDAN 2012

KATA PENGANTARDatabase merupakan jantung dari sistim informasi, karena didalam database tersimpan semua data yang dibutuhkan untuk diolah menjadi informasi. Kinerja dari suatu aplikasi berbasis database sangat dipengaruhi oleh kinerja dari database yang digunakan serta teknik pemrograman yang digunakan. Suatu rancangan database yang baik memperhatikan faktor integritas data, kinerja dan kemanan dari database tersebut. Pada buku ini kita akan mulai dari pengolahan data dengan flat file untuk meletakan dasar pemikiran bagi mahasiswa mengapa DBMS sangat berperan dalam pengembangan aplikasi sehingga pengembang dapat fokus kepada aturan bisnis daripada pengelolaan data pada media penyimpanan fisik. Kemudian akan dilanjutkan dengan teori siklus hidup database, pemodelan database dengan menggunakan ERD, proses normalisasi, proses denormalisasi, perancangan database, tuning kinerja database, pembuatan trigger, UDF, stored procedure, database security, dan proses backup restore. Pada buku ini kita membuat contoh dengan menggunakan RDBMS DB2 Universal Database yang merupakan sistim database yang mapan dan digunakan di perusahaanperusahaan skala menengah dan besar. Sebagai praktek kita juga memberikan contoh pengaplikasian database dengan konektivitas dengan Java melalui JDBC. Penulis berusaha membuat buku ini mudah dipahami dan contoh-contoh berdasarkan pengalaman penulis selama ini baik sebagai Dosen maupun praktisi dibidang pengembangan sistim informasi. Akhirnya penulis mengucapkans selamat membaca, dan berlatih, dan selamat datang ke database kelas Enterprise yaitu IBM DB2, dan tak lupa penulis mengucapkan terima kasih kepada Team IBM Indonesia yang telah memberikan kesempatan bagi penulis untuk ikut serta dalam pelatihan Db2 dalam kerangka IBM Academic Initiative on Campus. Medan, 7 Maret 2012 Penulis

DAFTAR ISI Bagian 1, Pengantar Database......................................................................................1 Bagian 2, Model Database Relational.........................................................................11 Bagian 3, Siklus Hidup Database...............................................................................18 Bagian 4, ER-Diagram................................................................................................25 Bagian 5, Normalisasi.................................................................................................35 Bagian 6, Normalisasi Lanjutan.................................................................................47 Bagian 7, Denormalisasi.............................................................................................62 Bagian 8, Perancangan Database................................................................................69 Bagian 9, Performance-Tuning...................................................................................78 Bagian 10, UDF..........................................................................................................91 Bagian 11, Stored Procedure......................................................................................99 Bagian 12, Konsistensi Transaksi.............................................................................104 Bagian 13, Konsistensi Konkurensi..........................................................................112 Bagian 14, Data Control Language..........................................................................130 Bagain 15, Backup, Restore dan Recovery..............................................................140

Database Lanjut dengan IBM DB2

Bab 1, Pengantar DatabaseData merupakan fakta dari sesuatu yang diperoleh dari hasil dari pengukuran, maupun hasil dari catatan transaksi masa lampau. Data dapat diolah menjadi informasi untuk mengambarkan kondisi masa lalu dan kondisi saat ini, kemudian data dapat diolah lebih lanjut untuk mendapatkan pengetahuan dan memprediksi kondisi masa depan. Agar data dapat diolah secara efisien dan efektif, tentu saja harus disimpan dalam bentuk yang terstruktur, sehingga memudahkan pencarian, pembacaan kembali.

DatabaseDatabase merupakan suatu koleksi dari informasi yang berkaitan, teratur, dan dapat dengan mudah diakses, diatur, dan diperbaharui. Dalam kehidupan modern, kita senantiasa berinteraksi dengan database, terutama bagi kita yang membawa perangkat telepon bergerak, pada saat anda berkenalan dengan seseorang dan melakukan pertukaran nomor telepon bergerak, maka kita akan merekam nama dan nomor orang tersebut pada data contact, ketika kita ingin menghubungi orang tersebut, maka kita dapat melakukan pencarian berdasarkan nama, dan jika ada perubahan data, maka kita dapat memperbaharui data contact.

DBMSDatabase management system adalah suatu paket software komputer yang mengendalikan pembuatan, pemeliharaan, dan pemakaian dari database. Tujuan utama dari DBMS adalah untuk mengintegrasikan data pada suatu lokasi yang tersentralisasi dan menyediakan suatu akses berbagi pakai yang aman. Integrasi data organisasi pada suatu lokasi terpusat yang terkendali mengurangi redundancy dan memastikan konsistensi data. Secara teori dua data yang disimpan pada dua tempat yang berbeda maka besar kemungkinan dua item yang diperkirakan sama tetapi kenyataannya tidak sama, misalnya data mahasiswa disimpan pada dua tabel yang berbeda, bisa saja pembaharuan dilakukan pada tabel yang satu tetapi tidak dilakukan pada tabel yang lain. Pemakaian DBMS memberikan kemudahan bagi pengembang untuk memfokuskan diri pada pengembangan aplikasi, sedangkan penanganan data fisik akan diambil alih oleh DBMS. Dewasa ini berbagai paket software DBMS yang tersedia dipasar mulai dari sistim besar sampai kepada perangkat mobile, mulai dari komersil dengan support sampai kepada open source dengan support maupun tanpa support (community edition). seperti Oracle, DB2, MSSQL, ProgresSQL, MySQL, FirebirdSQL, SqlLite.

Model DataPada awal perkembangan aplikasi komputer, penanganan data fisik dilakukan langsung oleh programmer dengan menggunakan sistem flat file ataupun simple text file yang dapat berupa fixed length, maupun menggunakan seperator koma, aplikasi mengakses Hendra, MT. & Jimmy, S.Kom. 1

Database Lanjut dengan IBM DB2 data secara sequensial untuk melakukan proses batch. Pada perkembangan selanjutnya menggunakan sistim random akses, dimana data disimpan sebagai tipe data record yang memiliki ukuran tetap, akses terhadap data menggunakan file pointer, sehingga pembacaan maupun penulisan dapat dilakukan secara acak ke record tertentu. Model lainnya yang digunakan pada mainframe adalah model hierarki dan network, model hirarki dalam bentuk model tree, dimana memiliki akar dan beberapa tingkatan cabang, setiap item memiliki hanya satu link kepada induknya. Akses data dimulai dari akar dan ditelusuri ke item-item dibawahnya sampai item yang diinginkan ditemukan. Pada model network memiliki banyak link diantara item data. Indek yang saling berhubungan memungkinkan akses data dari berbagai arah. Model data relasional diperkenalkan perama kali oleh E.F. Codd dari IBM Research pada tahun 1970 dengan judul A Relational Model of Data for Large Shared Databanks. Model relational ini didasarkan pada suatu konsep dari relational matematika, dan menggunakan teori himpunan dan logika first order predicate1 sebagai dasar teorinya. Pada model relational, database diekspresikan sebagai koleksi dari relasi-relasi. Suatu relasi secara fisik direpresentasikan sebagai suatu tabel dimana masing-masing baris berkoresponden dengan satu record individu, dan setiap kolom berkoresponden dengan suatu atribut individu, diaman atribut dapat muncul dalam berbagai urutan dalam tabel. Pada model relational, sebuah baris disebut sebagai tuple, dan sebuah judul kolom disebut sebagai suatu atribut, dan tabel tersebut disebut sebagai relasi. (Sesuatu yang sering disalah artikan bahwa model relasional mengambil nana dari kenyataan bahwa tabel dalam database relasional dapat berelasi satu sama lainnya). Pemakaian model relasi memiliki keuntungan tampilan dan kecepatan akses. Kamus data untuk model relasi memuat nama tabel, beserta nama kolom dan tipe data untuk setiap kolom, selain itu kamus data juga menyimpan informasi seluruh user dan hak-hak istimewanya.

Evolusi teknologi databaseDatabase dan industri manajemen data berevolusi didalam pengembangan dari berbagai fungsi kritikal yang dimulai dari koleksi data dan database, pembuatan, manajemen data (termasuk penyimpanan dan pengambilan, proses transaksi database), dan data analisa maju (termasuk data warehouse dan data mining). Sejak tahu 1960 database dan IT berevolusi secara sistematis dari pemrosesan file secara primitif sampai kepada sistim database yang memuaskan, penelitian dan pengembangan database sejak tahun 1970-an yang berkembang dari suatu model database hierarki dan network ke model database relasional (dimana data disimpan dalam struktur tabel relasional), peralatan modeling data, indexing dan metode akses, dan pemakai bahasa pertanyaan yang nyaman dan fleksibel, antar muka pemakai, optimisasi query, manajemen transaksi, metode yang efisien untuk online transaction processing (OLTP), dimana suatu query ditampikan sebagai suatu transaksi read-only, berkontribusi secara1

All human are mortal. Socrates is human. Threrefore: Socrates is mortal. Human(h) Mortal(h), Human(Socrates) Mortal(Socrates).

Hendra, MT. & Jimmy, S.Kom.

2

Database Lanjut dengan IBM DB2 substansial kepada evolusi dan diterima secara luas dari teknologi relasional sebagai peralatan utama untuk penyimpanan yang efisien, pengambilan dan pengaturan data dalam ukuran besar. Setelah pengembangan dari DBMS, teknologi database bergerak maju kepada pengembangan dari sistim database yang maju, data warehouse, dan data mining untuk analisa data tingkat tinggi dan database berbasis web yang digambarkan oleh diagram berikut ini:

Gambar 1, Evolusi teknologi database (Sumber: Jiawei Han, Micheline Kamber, Jian Pei, 2012) Hendra, MT. & Jimmy, S.Kom. 3

Database Lanjut dengan IBM DB2

Pengelolaan Flat FilePengembangan aplikasi yang berorientasi kepada data, tidak terlepas dari pemakaian file untuk penyimpanan data secara permanen (data tidak hilang ketika sistim di-shutdown). Data yang tersimpan didalam file membutuhkan format dengan struktur yang tertentu, sehingga dapat dikenali dan dipisahkan kembali masing-masing elemen data, pendekatan yang dapat dilakukan untuk pembeda terhadap masing-masing elemen data dalam file teks adalah menggunakan ukuran tetap, maupun menggunakan simbol pemisah seperti koma maupun titik koma. Contoh database dalam format teks ukuran tetap NIM 110102001 110102002 110102003 110102004 NAMA Hendra Susan Sukiman Jimmy MATAKULIAH Database Database Database Database NILAI B B B B

Contoh database dalam format teks dengan pemisah titik koma NIM;NAMA;MATAKULIAH;NILAI; 110102001;Hendra;Database; B; 110102002;Susan;Database;B; 110102003;Sukiman;Database;B; 110102004;Jimmy;Database;B; Penyimpanan data dalam bentuk teks membutuhkan usaha yang besar bagi programmer untuk membuat fasilitas pembacaan teks sequential, melakukan proses pemisahan terhadap masing-masing komponen data. Jika terjadi perubahan struktur data, seperti penghapusan maupun penyisipan kolom, maka keseluruhan teks file harus ditulis ulang. Pengolahan data dalam format teks dapat efektif dan unggul untuk pengolahan data yang kecil dan tingkat perubahan yang rendah dan bersifat sequential, seperti untuk penyimpanan setting parameter perangkat lunak, contohnya pada sistim operasi linux menyimpan user dan password pada file passwd dan shadow. Data dalam bentuk format teks juga umumnya digunakan pada pertukaran data elektronis, dimana data diekstrak dari suatu sistim, kemudian di load ke sistim lainnya. Pengenalan terhadap struktur data dalam teks file biasanya di hardcode pada program aplikasi. Dalam praktek, sering juga dijumpai penyimpanan data dalam spreadsheet, dimana Hendra, MT. & Jimmy, S.Kom. 4

Database Lanjut dengan IBM DB2 memungkinkan data dapat dicari, diringkas secara cepat, tetapi kendala yang dihadapi adalah keterbatasan jumlah baris penyimpanan data, dan kebutuhan data yang dapat diakses bersama oleh beberapa pemakai dalam waktu yang bersamaan.

Pengolahan file sequential pada JavaSuatu sequential file tidak memiliki struktur yang tertentu, pembacaan dan penulisan data dilakukan secara berurutan, masing-masing baris diakhiri dengan CR/LF.

Menulis ke teks fileSalah satu class yang dapat digunakan untuk pengolahan file karakter adalah Class FileWriter, dan penulisan ke file menggunakan Class PrintWriter.outFile = new FileWriter("c:\\siswa.txt"); PrintWriter out = new PrintWriter(outFile);

Perintah tersebut diatas, akan membuat file c:\siswa.txt yang baru, file c:\siswa.txt telah ada, maka akan di-overwrite. Agar file yang telah ada tidak di-overwrite, melainkan dibuka untuk append, maka dapat ditambahkan argumen true pada FileWriter.outFile = new FileWriter("c:\\siswa.txt",true); PrintWriter out = new PrintWriter(outFile);

Pembuatan format text dengan ukuran tetap pada masing-masing elemen dapat menggunakan bantuan metoda format() pada String.String myFormat = "%1$-10s%2$-20s%3$-20s%4$-1s";

Deklarasi variabel string myFormat diatas mempersiapkan format ukuran tetap pada masing-masing elemen yaitu (%1$-10s) adalah format untuk elemen pertama sebagai string dengan panjang 10 karakter, (%2$-20s) adalah format untuk elemen kedua sebagai string dengan panjang 20 karakter, (%3$-20), dan seterusnya, sehinggaout.println(String.format(myFormat, "110102001","Hendra","Database","B"));

Perintah tersebut diatas akan menuliskan data masing-masing elemen yang telah diformat dengan fungsi format String berdasarkan pola yang telah dipersiapkan pada variabel myFormat. Anda dapat menyimpan masing-masing elemen data dengan menggunakan pemisah titik koma (;) dengan format string sebagai berikut:String myFormat = "%1s;%2s;%3s;%4$1s;";

Hendra, MT. & Jimmy, S.Kom.

5

Database Lanjut dengan IBM DB2

Membaca dari teks fileSalah satu class yang dapat digunakan untuk pengolahan file karakter adalah Class FileReader, dan pembacaan baris teks menggunakan Class BufferedReader. Untuk jelasnya dapat melihat program berikut ini.FileReader inFile; try { //open existing file inFile = new FileReader("c:\\siswa.txt"); BufferedReader br = new BufferedReader(inFile); String s; while((s = br.readLine()) != null) { System.out.println(s); } inFile.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return 0;

Untuk memisahkan masing-masing elemen berukuran tetap dari String, dapat menggunakan metoda substring(), dan trim() untuk memotong kelebihan spasi kanan pada elemen. Untuk jelasnya dapat dilihat pada potongan program berikut ini :System.out.println("Nim : " + s.substring(0, 9).trim()); System.out.println("Nama : " + s.substring(10, 29).trim()); System.out.println("Mata kuliah : " + s.substring(30, 49).trim()); System.out.println("Nilai : " + s.substring(50, 51).trim());

Untuk memisahkan masing-masing elemen yang dipisahkan dengan titik koma (;) dari String, dapat menggunakan metoda split(), untuk jelasnya dapat melihat potongan program berikut :String elemen[]; while((s = br.readLine()) != null) { elemen = s.split(";"); System.out.println("Nim : " + elemen[0]); System.out.println("Nama : " + elemen[1]); System.out.println("Mata kuliah : " + elemen[2]); System.out.println("Nilai : "

Hendra, MT. & Jimmy, S.Kom.

6

Database Lanjut dengan IBM DB2+ elemen[3]); } Menutup file

Sesuatu hal yang perlu diingat didalam pengolahan file adalah, menutup kembali teks file setelah tidak digunakan lagi.out.flush(); out.close();

Praktek 11. Buatlah sebuah folder pada drive E, dengan menggunakan nomor nim Anda. 2. Aktifkan Netbeans IDE, dan buatlah sebuah aplikasi Java Application. Project Name : Sequential Project Location : E:\ nim anda Otomatis pada project window, akan ditampilkan struktur aplikasi sebagai berikut:

dan pada Main.java, otomatis akan ditampilkan struktur program sebagai berikut: package sequential; public class Main { public static void main(String[] args) { // lakukan pengetikan program anda disini. } } dan ini merupakan struktur dasar program java, dan ketikan program sebagai berikut: package sequential; import java.io.BufferedReader; import java.io.FileWriter; Hendra, MT. & Jimmy, S.Kom. 7

Database Lanjut dengan IBM DB2 import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.util.ArrayList; import java.util.logging.Level; import java.util.logging.Logger; public class Main { static ArrayList list = new ArrayList (); public static void main(String[] args) { try { InputStreamReader converter = new InputStreamReader(System.in); BufferedReader in = new BufferedReader(converter); String nim; do { System.out.println("Ketik quit untuk selesai"); System.out.println("Masukan nim:"); nim = in.readLine(); if (!"quit".equals(nim.toLowerCase())) { System.out.println("Masukan nama:"); String nama = in.readLine(); System.out.println("Masukan matakuliah:"); String matakuliah = in.readLine(); System.out.println("Masukan nilai:"); String nilai = in.readLine(); list.add(new String[]{nim, nama, matakuliah, nilai}); } else { tulisData(); } } while (!"quit".equals(nim.toLowerCase())); } catch (IOException ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } } private static int tulisData() { FileWriter outFile; try { //create or append to eof outFile = new FileWriter("c:\\siswa.txt", true); PrintWriter out = new PrintWriter(outFile); Hendra, MT. & Jimmy, S.Kom. 8

Database Lanjut dengan IBM DB2 String myFormat = "%1$-10s%2$-20s%3$-20s%4$-1s"; for(String[] data : list) { out.println(String.format(myFormat, data[0],data[1],data[2],data[3])); } out.flush(); out.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return 0; } } 3. Buatlah project baru dengan nama SequentialRead yang mencetak kembali masing-masing data dari C:\siswa.txt. package sequentialread; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class Main { public static void main(String[] args) { FileReader inFile; try { //open existing file inFile = new FileReader("c:\\siswa.txt"); BufferedReader br = new BufferedReader(inFile); String s; while ((s = br.readLine()) != null) { System.out.println("Nim : " + s.substring(0, 9).trim()); System.out.println("Nama : " + s.substring(10, 29).trim()); System.out.println("Mata kuliah : " + s.substring(30, 49).trim()); System.out.println("Nilai : " + s.substring(50, 51).trim()); } inFile.close(); } catch (IOException e) { Hendra, MT. & Jimmy, S.Kom. 9

Database Lanjut dengan IBM DB2 // TODO Auto-generated catch block e.printStackTrace(); } } } 4. Buatlah program SequentialCsv, dan SequentialReadCsv untuk pembuatan text file dengan pemisah data menggunakan titik comma (;)

Hendra, MT. & Jimmy, S.Kom.

10

Database Lanjut dengan IBM DB2

Bab 2, Model Database RelationalDatabase relasional menyimpan data dalam bentuk dua dimensi yang terlihat oleh pemakai sebagai koleksi dari relasi-relasi (tabel-tabel). Masing-masing relasi terbuat dari tuple-tuple atau record-record dan atribut-atribut atau field-field (untuk selanjutnya kita akan menggunakan istilah tabel, record dan field yang digunakan secara luas). Mahasiswa Nim 110102001 110102002 110102003 110102004

Nama Hendra Susan Sukiman Jimmy

Alamat Jl. Rencong Jl. Thamrin Jl. Batu Jl. Mangkubumi

Jurusan SI SI SI SI

Telepon -

Urutan record pada tabel secara fisik adalah tidak berpengaruh, dan setiap record dalam tabel memiliki identitas berdasarkan suatu field yang memiliki nilai unique yang biasanya merupakan Candidate key2 (secara praktis RDBMS dideklarasikan sebagai primary key). Ada dua karakteristik dari database relational yang memperbolehkan keberadaan data tidak tergantung kepada bagaimana penyimpanannya secara fisik dikomputer, yaitu pemakai tidak perlu tahu lokasi fisik dari suatu record sebagai usaha untuk mengambil data tersebut, tentu hal ini berbeda dengan model hierarki maupun network, dimana pengetahuan struktur merupakan hal yang penting untuk mendapatkan data. Sebagaimana model relasional semakin popular, dan banyak vendor database yang mengiklankan bahwa produk mereka merupakan RDBMS, dan untuk berjuang agar modelnya tidak menjadi kabur, Codd memformulasikan 12 aturan yang merupakan kriteria untuk acuan apakah suatu produk database adalah relasional. Ide Codd bahwa database harus memenuhi semua dari duabelas kriteria dibawah ini untuk dikatakan sebagai relasional. 1. Aturan informasi, data dapat hanya direpresentasikan dengan satu cara, sebagai nilai-nilai didalam posisi kolom pada baris tertentu dari suatu tabel. 2. Aturan garansi akses, setiap nilai didalam suatu database harus dapat diakses dengan menspesifikasikan sebuah nama tabel, sebuah nama kolom, dan sebuah baris. Baris tersebut dispesifikasikan oleh nilai dari primary key. 3. Pananganan yang sistematis terhadap null, data yang tidak ada harus dapat dibedakan dengan nilai tertentu seperti nol dan string kosong. 4. Catalog relasi online, pemakai yang terotorisasi harus dapat mengakses kepada2

Pada model relational suatu candidate key adalah minimal superkey untuk relasi tersebut yang merupakann himpunan atribut tersebut tidak ada dua tuple yang memiliki superkey yang sama, dan tidak ada proper subset untuk atribut tersebut.

Hendra, MT. & Jimmy, S.Kom.

11

Database Lanjut dengan IBM DB2 struktur database (katalognya) dengan menggunakan bahasa pertanyaan yang mereka gunakan untuk mengakses kepada data di database. 5. Aturan sub bahasa yang komprehensif, sistem harus mendukung minimal satu bahasa relasional yang mana dapat digunakan bersamaan secara interaktif dan didalam program aplikasi, yang mana mendukung definisi data (DDL), manipulasi data (DML), dan fungsi kendali data (DCL). Saat ini adalah suatu bahasa yaitu SQL. 6. Aturan update pada view, semua view yang mana secara teoritis dapat diupdate harus dapat diupdate oleh sistem. 7. Sistem harus mendukung suatu himpunan pada satu operasi insert, update, dan delete. Hal ini berarti bahwa sistem harus mampu melakukan insertion, update, dan delete pada banyak baris didalam satu operasi. 8. Tidak tergantung secara data fisik, perubahan kepada bagaimana data disimpan haruslah tidak memberi pengaruh kepada aplikasi. 9. Tidak tergantung secara logika, perubahan pada tabel-tabel tidak harus mempengaruhi aplikasi. Sebagai contoh, penambahan suatu kolom baru pada suatu tabel tidak akan menghentikan suatu aplikasi yang mengakses kepada baris semula. 10. Bebas integritas, integritas dari konstrain harus dinyatakan secara terpisah dari program aplikasi dan tersimpan didalam katalog. 11. Bebas distribusi, distribusi dari bagian database ke berbagai lokasi tidak mengubah fungsi dari aplikasi. 12. Aturan nonsubversion, jika sistem menyediakan suatu interface satu record pada satu saat (fasilitas fasiltias akses langsung ke tabel seperti bulk load data), hal tersebut harus tidak memungkinkan untuk digunakan melewati relational security ataupun integrity constraint. Selain duabelas aturan tersebut diatas, pada tahun 1990, Codd menambah satu aturan tambahan yaitu: untuk semua sistem yang mengiklankan sebagai, atau menyatakan sebagai RDBMS, maka sistim tersebut harus mampu mengatur database secara keseluruhan dengan kemampuan relasional, dan tidak ada masalah terhadap penambahan kemampuan yang dapat didukung oleh sistem.

Pembuatan Database dengan DB2Pembuatan database pada DB2 universal database dapat menggunakan DB2 Command Window yang dapat diaktifkan dengan perintah db2cmd, selanjutnya anda dapat menggunakan perintah db2start untuk mengaktifkan service DB2, dan perintah db2stop untuk mematikan service. Untuk membuat database dengan nama Akademik dan menyimpan ke drive D, anda dapat menggunakan perintah sebagai berikut ini: db2 create database akademik on d:

Hendra, MT. & Jimmy, S.Kom.

12

Database Lanjut dengan IBM DB2 Kemudian untuk mengaktifkan database yang telah dibuat dapat menggunakan perintah: db2 connect to akademik Objek-objek database pada db2 akan dikelompokan pada suatu schema, dan secara default schema yang digunakan adalah nama dari pemakai yang aktif, untuk pembuatan schema baru dapat menggunakan perintah berikut ini: db2 create schema=nobody dan schema yang sudah tersedia dapat diaktifkan dengan perintah berikut ini: db2 set schema=nobody Untuk pembuatan tabel dapat menggunakan perintah data definition language (DDL) sebagai berikut: db2 create table mahasiswa (nim varchar(12) not null primary key, nama varchar(100), alamat varchar(200), jurusan varchar(10), telepon varchar(20)) Berikut ini adalah beberapa perintah yang dapat digunakan untuk menampilkan objek pada db2. 1. List Database Directory, untuk menampilkan daftar database yang ada pada sistem. 2. Values Current Schema, untuk menampilkan schema yang sedang aktif. 3. List Tables, untuk menampilkan tabel atau view yang ada pada schema yang sedang aktif. 4. List Tables for Schema=nama-schema, digunakan untuk menampilkan tabel atau view yang ada pada schema tertentu. 5. Describe Table nama-tabel, digunakan untuk menampilkan struktur dari suatu table. 6. Describe Table nama-tabel Detail, digunakan untuk menampilkan struktur dari suatu tabel secara detail Salah satu praktek yang baik didalam pemakaian database adalah melakukan backup data, secara sederhana anda dapat melakukan backup data dengan perintah backup database to , dengan contoh sebagai berikut: db2 backup database akademik to e:\920403024 Berikut ini adalah image hasil backup perintah tersebut diatas: Hendra, MT. & Jimmy, S.Kom. 13

Database Lanjut dengan IBM DB2

AKADEMIK.0.DB2.NODE0000.CATN0000.20110401155123.001 dimana 20110401155123 adalah timestamp backup file. dan jika suatu saat hasil backup perlu direstore kembali, anda dapat menggunakan perintah restore database from taken at to , pada saat restore anda perlu menyebutkan timestamp dari image backup yang akan direstore dengan contoh berikut ini: db2 restore database akademik from e:\920403024 taken at 20110401155123 Perintah untuk memutuskan koneksi dari database dapat menggunakan perintah: db2 disconnect all

Koneksi ke DB dengan JDBCJDBC merupakan API yang terdefinisi pada paket java.sql dan javax.sql untuk koneksi pada database tertentu melalui program Java. Untuk melakukan koneksi ke database tertentu, anda perlu memuat driver untuk database bersangkutan dengan metode Class.forName("com.ibm.db2.jcc.DB2Driver"); yang merupakan driver type 4, dan membuka koneksi dengan menggunakan url yang dispesifikasikan pada driver type 4 yaitu: jdbc:db2://:/. Pemakaian tipe driver tergantung kepada versi JDK yang digunakan. Membuka database Untuk dapat menggunakan driver koneksi ke DB2, maka perlu ditambahkan db2jcc4.jar yang merupakan driver untuk JDBC 4.0 (jika JDK anda tidak mendukung, maka dapat menggunakan db2jcc.jar) kedalam project anda, file-file tersebut diatas dapat diperoleh dari lokasi instalasi DB2 yaitu %db2path%sqllib\java.

Untuk menambah file-file jar tersebut, gunakan klik kanan pada node Libraries, dan pilih Add jar/folder, dan kemudian browsing ke folder dimana jar file berada, pilih file-file tersebut dan klik pada open. Jika proses ini berhasil dilakukan maka pada node Libraries akan tampil sebagai berikut: Selanjutnya untuk membuka koneksi ke database dapat menggunakan perintah: Hendra, MT. & Jimmy, S.Kom. 14

Database Lanjut dengan IBM DB2 Class.forName("com.ibm.db2.jcc.DB2Driver"); con = DriverManager.getConnection("jdbc:db2://localhost:50000/akademik", username, password); dan untuk menutup koneksi dapat menggunakan perintah: con.close(); Catatan: nomor port dapat saja berbeda, untuk setting nomor port dapat dilakukan pada db2cc (control center), dengan setup communication pada instance DB2.

Kemudian klik pada Properties(2), dan tentukan nomor port (secara default adalah 50000)

Hendra, MT. & Jimmy, S.Kom.

15

Database Lanjut dengan IBM DB2

Membuat static class MyDbOpenHelperAnda dapat membuat sebuah static class yang melakukan pembukaan database yang nantinya dapat digunakan oleh seluruh class pada daur hidup aplikasi anda. public class MyDBOpenHelper { private static Connection con; public static boolean bukaDatabase(String username, String password) { boolean berhasil = false; try { Class.forName("com.ibm.db2.jcc.DB2Driver"); con = DriverManager.getConnection("jdbc:db2://localhost:50000/akademik", username, password); berhasil = true; } catch (SQLException ex) { Logger.getLogger(MyDBOpenHelper.class.getName()) .log(Level.SEVERE, null, ex); } catch (ClassNotFoundException e) { e.printStackTrace(); } return berhasil; } public static void closeConnection() { try { con.close(); } catch (SQLException ex) { Logger.getLogger(MyDBOpenHelper.class.getName()) .log(Level.SEVERE, null, ex); } } public static Connection getConnection() { return con; } }

Latihan1. Aktifkan db2cmd. 2. Buatlah sebuah database akademik Hendra, MT. & Jimmy, S.Kom. 16

Database Lanjut dengan IBM DB2 3. 4. 5. 6. Aktifkan database akademik Buatlah sebuah schema nobody Aktifkan schema nobody Buatlah sebuah tabel mahasiswa dengan struktur sebagai berikut: nim varchar(12) nama varchar(100) alamat varchar(200) jurusan varchar(10) telepon varchar(20) Dalam hal ini nim adalah primary key. 7. Buatlah perintah yang dapat menunjukan struktur dari tabel mahasiswa. 8. Buatlah perintah yang dapat menampilkan database yang ada pada sistim anda. 9. Lakukan backup terhadap database akademik dengan target folder nim anda. 10. Hapus database akademik dengan perintah db2 drop database akademik 11. Tampilkan kembali semua database yang ada pada sistim anda. 12. Lakukan restore kembali database anda. 13. Buatlah suatu aplikasi KoneksiDB, dan buatlah class MyDBOpenHelper yang berisi metode static untuk pembukaan koneksi, penutupan koneksi, dan pengambilan koneksi. 14. Ujilah class tersebut dengan melakukan modifikasi pada metode main aplikasi anda. package koneksidb; public class Main { public static void main(String[] args) { if (MyDBOpenHelper.bukaDatabase("db2admin","password")) { System.out.println("Berhasil buka database"); } else { System.out.println("Gagal buka database"); } } }

Hendra, MT. & Jimmy, S.Kom.

17

Database Lanjut dengan IBM DB2

Bab 3, Siklus hidup databaseSebagaimana siklus hidup dari sistim, pemanfaatan database pada organisasi juga melalui berbagai tahapan proses mulai dari analisa kebutuhan sampai kepada pemanfaatannya. Secara umum tahapan ini dapat dibagi menjadi tahapan analisa kebutuhan, perancangan secara logika, perancangan secara fisik, dan implementasi Pada masing-masing tahapan membutuhkan berbagai alat pemodelan untuk membuat proses menjadi sistematis dan terdokumentasi dengan baik.

Gambar 2, Siklus hidup database (Sumber: Toby J. Teorey, Sam S. Lightstone, Tom Nadeau, H. V. Jagadish , 2011) Hendra, MT. & Jimmy, S.Kom. 18

Database Lanjut dengan IBM DB2 Perancangan database tidak sifatnya linier atau sekali jalan, tetapi merupakan proses berulang (iteratif) dan bertumbuh (incremental). Proses bertumbuh diperlukan untuk menghasilkan database yang dapat digunakan, sedangkan proses berulang bertujuan menyempurnakan maupun memenuhi perubahan spesifikasi kebutuhan terkait dengan perkembangan organisasi maupun perubahan lingkungan.Perancangan database, sama seperti semua perancangan sistim, menggunakan prinsip perataan (Hohmann 1997). Perataan adalah sama seperti air yang mencari perataannya ketika gelas atau botol digerakan. Ketika situasi berubah, anda perlu bergerak untuk menyesuaikan kebutuhan pada saat tersebut, dalam hal ini berarti kadang-kadang kita perlu membuat struktur fisik, dan pada saat yang lain kita perlu merancang ulang dengan membuat model dan struktur baru.

Analisa kebutuhanDatabase dimulai dari pemakai dan kebutuhan mereka, pada tahapan ini biasanya dilakukan pengumpulan informasi awal melalui interview baik penghasil data maupun pemakai dari data dan informasi untuk mendapatkan suatu spesifikasi kebutuhan, spesifikasi tersebut meliputi data yang diperlukan untuk proses, hubungan data secara alamiah, dan platform software untuk database.

Perancangan secara logikaTahapan awal dari perancangan logika adalah pemodelan, yang merupakan suatu skema secara global yang menunjukan semua data dan keterkaitan antara mereka, dikembangkan dengan menggunakan entity-relationship (ER) diagram maupun unifiedmodeling-language (UML). Hal ini merupakan penghubung antara kebutuhan pemakai dengan solusi software yang akan ditawarkan. Abstraksi pada model menyembunyikan kompleksitas dari sistem sehingga pengembang dapat fokus kepada tujuan sistem dan batasannya yang telah disepakati. Semakin luasnya cakupan permasalahan, maka tahapan pemodelan ini semakin penting. Berbagai varian dari ER dapat digunakan untuk pemodelan (Teorey 1999), dimaka berfokus pada entitas dan hubungan antara mereka.

Perancangan secara fisikPada perancangan logika, kita terfokus pada entitas, dan kaitan diantaranya melalui beberapa proses iterasi. Pada perancangan fisik lebih terfokus pada proses optimisasi perfomance melalui proses denormalisasi untuk mendapatkan akses yang lebih cepat dengan menghindari data join yang merupakan konsekuensi mengutamakan kecepatan dari pada menjaga integritas, dimana bisa saja data timbul lebih dari satu tempat didalam database (redundancy). Perancangan fisik umumnya terdiri dari pembuatan lokasi akses, dan struktur penyimpanan, pembuatan indeks untuk tuning kinerja.

Hendra, MT. & Jimmy, S.Kom.

19

Database Lanjut dengan IBM DB2

ImplementasiPekerjaan perancangan tidak selesai begitu saja pada tahapan implementasi, tetapi membutuhkan perawatan dan perubahan untuk merespon perkembangan kebutuhan organisasi maupun perubahan lingkungan terkait dengan tuntutan konsumen maupun perubahan peraturan pemerintah, sehingga siklus hidup database merupakan siklus perulangan dan pertumbuhan yang berkembang untuk memenuhi kebutuhan pemakai.

Mengenal SQLStructured Query Language (SQL) merupakan bahasa tingkat tinggi yang memperbolehkan pemakai untuk melakukan manipulasi pada database relational. Salah satu keunggulan dari SQL adalah pemakai hanya perlu menspesifikasikan informatsi yang mereka butuhkan tanpa mengetahui bagaimana mereka akan menerimanya. DBMS bertanggung jawab untuk mengatur semua upaya untuk mendapatkan informasi tersebut. SQL dikembangkan oleh Don Chamberlin dan Ray Boyce dari IBM pada tahun 2970 sebagai bagian dari proyek System R: yang merupakan suatu proyek yang dikembangkan untuk menyediakan implementasi praktis dari model relational Codd. Dewasa ini SQL diterima sebagai bahasa standard untuk database relational. SQL diadopsi menjadi bahasa standard pada tahun 1986 oleh ANSI dan oleh ISO pada tahun 1987. Sejak standarisasi, standard SQL telah diupdate enam kali, dan update yang terakhir adalah pada tahun 2008 yang dikenal seabagai SQL:2008.

Data Definition Language (DDL)DDL adalah singkatan dari Data Definition Language adalah bagian dari SQL yang yang digunakan untuk melakukan definisi terhadap objek database. Dalam hal ini objek adalah schema, table, view, sequence, catalog, index dan alias.

Pembuatan SchemaSchema merupakan pengelompokan secara logika dari objek database, suatu schema biasanya dimiliki oleh seorang pemakai atau aplikasi, suatu database dapat terdiri dari beberapa schema dari pemakai maupun aplikasi yang berbeda, beberapa perintah terkait dengan pengelolaan schema adalah sebagai berikut: 1. Create Schema nama-schema, membuat sebuah schema. 2. Set Schema=nama-schema, mengaktifkan ke schema yang disebutkan, secara default schema yang aktif adalah sesuai dengan username dari pemakai yang sedang aktif. 3. Values Current Schema, menampilan schema yang sedang aktif. 4. List table for schema nama-schema, manampilan tabel-tabel yang terorganisasi pada schema tertentu. Hendra, MT. & Jimmy, S.Kom. 20

Database Lanjut dengan IBM DB2

TableTable merupakan visualisasi dari data yang diatur secara dua dimensi yang terdiri dari baris dan kolom, untuk pembuatan table digunakan perintah CREATE TABLE. Contoh: create table matakuliah (kmk varchar(6) not null primary key, keterangan varchar(50), semester integer, sks integer default 4) create table krs (nim varchar(12) not null, kmk varchar(6) not null, semester integer not null, id integer NOT NULL GENERATED ALWAYS AS IDENTITY, primary key(nim, kmk, semester)) Catatan: Pernyataan generated always as identity akan menghasilkan auto-increment field pada kolom id. Jika tidak ditentukan schema sebelumnya (set schema=nama-schema atau schema.namatable), maka secara default tabel akan ditempatkan dibawah schema pemakai yang menjalankan perintah create table tersebut.

Menghapus tableSetelah suatu tabel dibentuk, maka dimungkinkan untuk dihapus. Contoh: drop table krs

Menambah dan menghapus columnSetelah suatu tabel dibentuk, maka dimungkinkan untuk ditambah maupun dihapus kolom-kolom yang ada. Contoh: alter table krs drop column semester alter table krs add column semester integer

Hendra, MT. & Jimmy, S.Kom.

21

Database Lanjut dengan IBM DB2

Mengubah definisi column tertentuSetelah suatu tabel dibentuk, maka dimungkinkan untuk perubahan pada column tertentu Contoh: alter table matakuliah alter column sks set default 2 alter table matakuliah alter column semester set not null alter table matakuliah alter column semester drop not null alter table matakuliah alter column keterangan set data type varchar(100) alter table matakuliah rename column kmk to kodemk

Menambah dan menghilangkan constraintDalam beberapa kasus tertentu, kolom-kolom tertentu membutuhkan batasan tertentu untuk memenuhi aturan bisnis tertentu, adapun jenis constraint yang tersedia pada DB2 adalah NOT NULL constraint, Unique constraint, Primary key constraint, Foreign key constraint, Check constraint. Contoh: alter table mahasiswa add constraint pk_mahasiswa primary key(nim) Perintah tersebut diatas berfungsi menambah sebuah primary key dengan field nim pada tabel mahasiswa . Contoh: alter table mahasiswa add constraint unikktp unique (noktp) Perintah tersebut diatas akan menentukan kolom noktp menjadi unik Contoh: alter table matakuliah add constraint batas_semester check(semester > 0 and umur < 10) alter table krs add constraint batas_semester_krs check(semester > 0 and umur < 19) alter table mahasiswa add constraint bataskelamin check (jkelamin in ('P','W')) Perintah tersebut diatas akan menambahkan constraint check dengan kriteria tertentu.

Hendra, MT. & Jimmy, S.Kom.

22

Database Lanjut dengan IBM DB2 Contoh: alter table siswaku drop constraint batasumur Perintah tersebut diatas akan menghapus constraint dengan nama batasumur

SQL statement Object pada JavaSuatu object Statement digunakan untuk menjalankan perintah SQL seperti untuk pembuatan objek database berupa record baru, table dan view, secara sederhana anda dapat membuat suatu objek Statement dan menjalankannya dengan metode executeUpdate (Insert, Update, Delete) ataupun executeQuery (Select) beserta perintah SQL yang anda inginkan, secara default perintah executeUpdate adalah AUTO COMMIT, contoh: public static void createDatabaseObject() { try { Statement stmtEx; stmtEx = con.createStatement(); stmtEx.executeUpdate("create table mahasiswa " + "(nim varchar(12) not null primary key," + "nama varchar(100)," + "alamat varchar(200)," + "jurusan varchar(10)," + "telepon varchar(20))"); } catch (SQLException ex) {Logger.getLogger(MyDBOpenHelper.class.getName()).log(Level.SEVERE, null, ex);

} }

Batch UpdateJika perintah update yang ingin dijalankan banyak, anda dapat menggunakan batchUpdate, contoh: try { Statement stmtEx; stmtEx = con.createStatement(); con.setAutoCommit(false);stmtEx.addBatch("insert into relasi (koderelasi, nama, alamat, hubungi, telepon) " + "values ('s001','xxx','','','')"); stmtEx.addBatch("insert into relasi (koderelasi, nama, alamat, hubungi, telepon) " + "values ('c001','xxx','','','')");

Hendra, MT. & Jimmy, S.Kom.

23

Database Lanjut dengan IBM DB2 int[] result = stmtEx.executeBatch(); con.commit(); } catch (SQLException ex) {Logger.getLogger(MyDBOpenHelper.class.getName()).log(Level.SEVERE, null, ex);

}

Latihan1. 2. 3. 4. Tampilkan database yang ada di sistem, dan hapus semua database tersebut Buatlah database akademik yang secara fisik disimpan di drive D: Buatlah masing-masing tabel mahasiswa, matakuliah, dan krs. Buatlah check constraint untuk semester pada matakuliah dalam batasan 1 s/d 9 semester dan krs dalam batasan 1 s/d 18 semester. 5. Aktifkan kembali project KoneksiDB pada bagian sebelumnya, dan tambahkan metode createDatabaseObject pada class MyDBOpenHelper, dan kemudian jalankan metode createDatabaseObject pada metoda main. 6. Tambahkan kemampuan pada metode createDatabaseObject dengan pembuatan tabel Matakuliah, dan Krs, serta check constraint pada soal no. 4.

Hendra, MT. & Jimmy, S.Kom.

24

Database Lanjut dengan IBM DB2

Bab 4, ER-DiagramEntity-Relationship Diagram merupakan salah satu alat pemodelan database yang banyak digunakan untuk memodelkan data pada tahapan analisa kebutuhan dan perancangan logika serta dokumentasi. ER-Diagram awalnya diusulkan oleh Peter Chen pada tahun 1976. Pada dasarnya pemodelan ER menggunakan tiga jenis objek yaitu entitas, hubungan, dan atribut.

EntitasEntitas adalah objek data dimana informasi diambil, mereka biasanya berupa orang, tempat, ataupun sesuatu, maupun kejadian dari sumber informasi seperti Mahasiswa, Dosen, Matakuliah, Kelas, Absensi, Ujian. Masing-masing entitas digambarkan sebagai persegi panjang. Dosen Matakuliah Jurusan Mahasiswa Kelas Absensi Ruang

Ujian

HubunganHubungan merepresentasikan asosiasi dunia nyata antara entitas yang satu dengan yang yang lain (Mahasiswa memilih jurusan, Mahasiswa mengambil Matakuliah, Mahasiswa memiliki Ijazah). Hubungan dinyatakan dalam istilah dari tingkatan, konektivitas, dan keberadaan. Hubungan antara entitas dapat berupa cardinalitas3 one-to-one, one-to-many, dan many-to-many. Hubungan ini digambarkan sebagai suatu bentuk ketupat, secara notasi matematika hubungan tersebut dapat digambarkan sebagai berikut: Mahasiswa M1 M2 M3 M4 ... M:13

Jurusan

Mahasiswa

Matakuliah

Mahasiswa

Ijazah

SI TI

M1 M2 M3 M4 ... M:N

K1 K2 K3 K4 ...

M1 M2 M3 M4 ... 1:1

S1 S2 S3 S4 ...

Cardinalitas mereferensikan jumlah maksimal dari suatu instant didalam suatu entitas dapat berasosiasi dengan instant lainnya pada entitas yang berhubungan.

Hendra, MT. & Jimmy, S.Kom.

25

Database Lanjut dengan IBM DB2 Secara notasi Chen dapat digambarkan sebagai berikut: M Mahasiswa memilih 1

Jurusan

Mahasiswa

M

Mengambil

N

Jurusan

Mahasiswa

1

Memilki

1

Ijazah

AtributAtribut adalah karakteristik dari entitas yang menyediakan keterangan detail tentang mereka. Atribut dari seorang manhasiswa dapat terdiri dari nim, nama, alamat, jurusan, asal smu, telepon, nama orang tua, dst. Ada dua jenis atribut yaitu indentifier (atau key) yang digunakan secara unik untuk menentukan keberadaan dari suatu entitas, sebagai contoh indentifier atau key dari mahasiswa adalah nim, masing-masing mahasiswa memiliki nim yang berbeda, sehingga tidak ada duplikasi dari nim pada himpunan mahasiswa. Atribut key digambarkan dengan garis bawah pada ER-Diagram.Selanjutnya atribut lainnya adalah deskriptor (bukan key) digunakan untuk menspesifikasikan karakteristik tidak unique dari keberadaan entitas tertentu, sebagai contoh nama, alamat, asal smu, telepon, nama orangtua, dst. nim nama alamat Asal smu

Mahasiswa

Hendra, MT. & Jimmy, S.Kom.

26

Database Lanjut dengan IBM DB2

Berapa notasi ERNotasi Crow's Foot

Notasi Chen

Hendra, MT. & Jimmy, S.Kom.

27

Database Lanjut dengan IBM DB2

Notasi Bachman

Notasi Martin

Pada notasi Chen hanya menunjukan cardinalitas, dan tidak menunjukan modalitas4 dibandingkan dengan notasi lainnya.

4

Modalitas mereferensikan jumlah minimal dari suatu instant didalam suatu entitas dapat berasosiasi dengan instant lainnya pada entitas yang berhubungan. Cardinalitas dapat berupa 1 atau Banyak, dan Modalitas dapat berupa 1 atau 0.

Hendra, MT. & Jimmy, S.Kom.

28

Database Lanjut dengan IBM DB2

Menjaga integritasSalah satu ciri utama dari sistem database adalah perhatian terhadap integritas data, integritas data dibagi menjadi empat jenis yaitu domain integrity, entity integrity, referential integrity, dan semantic integrity. Umumnya integritas domain diaplikasikan pada atribut, integritas entitas diaplikasikan pada record, integritas referensial diaplikasikan pada relasi, dan integritas semantik memastikan data secara logika pada database. Integritas Domain Digunakan untuk menspesifikasikan untuk masing-masing atribut dengan mendefinisikan suatu jangkauan tertentu, hal tersebut untuk menjaga nilai dari atribut berada didalam jangkauan yang ditentukan untuk menjadi valid, contoh untuk jenis kelamin nilai yang valid adalah P atau W, contoh perintah untuk menspesifikasikan integritas domain. Contoh: alter table matakuliah add constraint batas_semester check(semester > 0 and umur < 10) alter table krs add constraint batas_semester_krs check(semester > 0 and umur < 19) alter table mahasiswa add constraint bataskelamin check (jkelamin in ('P','W')) Integritas Entitas Digunakan untuk menjaga konsistensi dari database pada level record, dimana untuk menjaga agar masing-masing record didalam tabel adalah memiliki identitas unique dan dalam hal ini adalah Primary Key dimana tidak memperbolehkan terjadinya nilai duplikat dan bersifat not null. Contoh: create table matakuliah (kmk varchar(6) not null primary key, keterangan varchar(50), semester integer, sks integer) Integritas Referensial Referential integrity diperlukan untuk menjamin semua nilai atribut (foreign key) pada suatu tabel juga ada sebagai satu nilai atribut (primary key) pada tabel yang memiliki hubungan, kecuali kalau nilai atribut pada foreign key tersebut adalah null, misalnya pada tabel mahasiswa tercatat bahwa mahasiswa ini mengambil jurusan TI, tetapi ternyata Hendra, MT. & Jimmy, S.Kom. 29

Database Lanjut dengan IBM DB2 ditabel jurusan tidak terdapat atribut jurusn TI, tentu saja data jurusan TI pada tabel mahasiswa adalah tidak konsisten, karena merujuk kepada sesuatu nilai yang tidak pernah ada, kecuali kalau jurusan pada tabel mahasiswa diisi sebagai null. Contoh: create table mahasiswa (nim varchar(12) not null primary key, nama varchar(100), alamat varchar(200), jurusan varchar(10), telepon varchar(20), namaortu varchar(100), smu varchar(10)) create table jurusan (jurusan varchar(10) not null primary key, keterangan varchar(100), jenjang varchar(10), jlhsemester integer) create table smu (smu varchar(20) not null primary key, keterangan varchar(100), alamat varchar(200), kota varchar(50), kepalasekolah varchar(100), telepon varchar(20)) alter table mahasiswa add constraint fk_jurusan foreign key (jurusan) references jurusan alter table mahasiswa add constraint fk_smu foreign key (smu) references smu Integritas Semantik Semantic integrity memastikan bahwa data yang dimasukan pada suatu record merefleksikan nilai yang diperbolehkan pada record tersebut, nilai tersebut harus berada dalam domain, atau himpunan nilai yang diperbolehkan, berikut ini beberapa konstraint untuk memaksakan integritas semantik seperti tipe data, nilai default, check constraint.

Membuat indexSuatu index adalah himpunan dari pointer kepada baris-baris pada tabel dasar. MasingHendra, MT. & Jimmy, S.Kom. 30

Database Lanjut dengan IBM DB2 masing index didasarkan pada nilai dari data dalam satu atau lebih kolom pada tabel. Ketika suatu index dibuat, database manager akan membangun objek tersebut dan secara otomatis melakukan maintainance terhadapnya. Index digunakan oleh database manager untuk: Meningkatkan perfomance. Dalam banyak kasus, akses kedata menjadi lebih cepat dengan suatu index, walaupun suatu index tidak dapat dibuat untuk sebuah view, tetapi index yang dibuat untuk tabel akan menjadi dasar bagi view untuk meningkatkan perfomance operasi terhadap view tersebut Memastikan keunikan. Suatu tabel dengan suatu index unik tidak dapat memiliki baris dengan nilai yang sama pada key tersebut. Contoh: alter table mahasiswa add column kodepos varchar(5) create index alamat_idx on mahasiswa(alamat, kodepos) create unique index krs_idx on krs(nim, matakuliah, semester) Jika anda mendapatkan pesan kesalahan Operation not allowed for reason code 7 on table ..., maka anda dapat menggunakan perintah REORG TABLE nama_table untuk menghilangkan reorg pending state setelah pemberian perintah ALTER. Catatan: harus dapat dibedakan antara unique constraint dengan unique index, dimana secara DDL mereka disimpan pada tabel yang berbeda pada system catalog, kemudian secara DML, pemeriksaan terhadap unique constraint dilakukan pada akhir statement, tetapi pada unique index pemeriksaan dilakukan secara baris-per-baris. Sebagai contoh anda memiliki suatu kolom yang berisi nilai 1, 2, dan 3. Jika anda memberikan perintah update xxxx set kolom = kolom + 1, maka perintah ini akan berhasil pada unique constraint kolom, tetapi gagal pada unique index kolom.

Latihan1. Definisikan entitas-entitas yang mungkin pada suatu database Akademik. 2. Definisikan hubungan antara entitas-entitas tersebut dengan menggambarkannya dalam bentuk notasi Chen. 3. Definisikan atribut-atribut untuk masing-masing entitas dan tentukan mana yang merupakan Atribut key. 4. Buatlah perintah SQL untuk pembuatan masing-masing entitas dengan memperhatikan integritas entitas, integritas domain, integritas referensial dan integritas semantik. 5. Buatlah index yang memungkinkan akses data yang cepat untuk pembuatan laporan tertentu atau pencarian berdasarkan kriteria tertentu. 6. Modifikasi metoda createDatabaseObject untuk menghasilkan database Akademik seperti rancangan anda dan team. Hendra, MT. & Jimmy, S.Kom. 31

Database Lanjut dengan IBM DB2

QuizQ1) Manakah yang berikut ini yang akan menjadi konsekuensi dari mendefinisikan kolom IDCOL2 pada TABEL2 sebagai foreign key yang mengacu pada primary key (IDCOL1) pada TABEL1? A. DB2 tidak akan pernah lagi memperbolehkan update nilai pada IDCOL1 pada TABLE1 B. Ketika penyisipan suatu baris pada TABEL2, hanya nilai yang diperbolehkan untuk IDCOL2 adalah yang terdapat nilainya pada IDCOL1 C. Ketika penyisipan suatu baris pada TABEL2, hanya nilai diperbolehkan untuk IDCOL2 adalah yang tidak terdapat nilainya pada IDCOL1 D. Ketika suatu perintah SELECT join TABEL1 dengan TABEL2, DB2 akan secara otomatis menambahkan kondisi TABLE1.IDCOL1=TABLE2.IDCOL2 jika tidak dituliskan didalam perintah tersebut. Q2) constraint apa yang dapat diberikan untuk memastikan bahwa, setiap baris yang dimasukan kedalam dalam suatu tabel, sehingga nilai pada suatu kolom tidak dapat melebihi nilai pada kolom lain? A. Check B. Range C. Referential D. Informational Q3) Mana yang berikut ini benar dari suatu index menggunakan dukungan dari suatu constraint UNIQUE? A. Dia harus memiliki atribut UNIQUE. B. Dia tidak dapat dibuat secara ekplisit oleh user. C. Dia harus memiliki atribut UNIQUE dan CLUSTER. D. Dia harus memiliki atribut UNIQUE WHERE NOT NULL Q4) Jika suatu constraint unique didefinisikan pada kolom COL1 pada tabel TAB1, apa yang menjadi karakteristik dari COL1? A. COL1 akan menerima nilai NULL dan dapat direferensi pada tabel lain sebagai spesifikasi bagi foreign key. B. COL1 tidak akan menerima nilai NULL dan tidak dapat direferensikan pada tabel lain sebagai foreign key. C. COL1 tidak akan menerima nilai NULL dan dapat direferensikan pada tabel lain sebagai foreign key D, COL1 tidak akan menerima nilai NULL dan tidak dapat direferensikan pada tabel lain sebagai foreign key Q5) Dua diantara ini yang bersifat optional pada saat penbuatan tabel? A. Nama tabel B. Nama kolom C. Default constraint D. Tipe data Column E. constraint NOT NULL Q6) Pemberian perintah CREATE TABLE berikut: CREATE TABLE table2 LIKE table1 Dua hal dibawah ini tidak akan terjadi ketika perintah tersebut dijalankan? A. TABLE2 akan memiliki nama kolom dan tipe data sama sebagaimana TABLE1 B. TABLE2 akan memiliki kolom default sebagaimana TABLE1 C. TABLE2 akan memiliki karakteristik nullability sebagaimana TABLE1 D. TABLE2 akan memiliki index yang sama sebagaimana TABLE1. E. TABLE2 akan memiliki referential constraints sebagaimana TABLE1 Q7 Jika SQL statements berikut ini dieksekusi:

Hendra, MT. & Jimmy, S.Kom.

32

Database Lanjut dengan IBM DB2CREATE TABLE tab1 (id SMALLINT NOT NULL PRIMARY KEY, name VARCHAR(25)); CREATE TABLE tab2 (empid SMALLINT, weekno SMALLINT, payamt DECIMAL(6,2), CONSTRAINT const1 FOREIGN KEY (empid) REFERENCES tab1(id) ON UPDATE NO ACTION); Pernyataan berikut ini yang benar adalah? A. Hanya nilai yang terdapat pada kolom ID pada TAB1 yang diperbolehkan untuk disisipkan pada kolom empid pada tabel TAB2 B. Update terhadap nilai pada kolom ID ditabel TAB1 tidak diperbolehkan C. Hanya nilai yang tidak terdapat pada kolom ID ditabel TAB1 yang diperbolehkan disisipkan pada kolom EMPID pada tabel TAB2 D. Ketika nilai yang telah ada dikolom ID pada tabel TAB1 diupdate, nilai yang bersesuaian pada kolom EMPID di tabel TAB2 juga akan diupdate Q8) Mana dari skenario berikut ini yang akan memastikan bahwa nilai pada kolom NEXT_STEPNO pada baris di tabel TABLEX nilainya ada pada kolom STEPNO (biasanya pada baris lain) ditabel yang sama? A. Mendefinisikan constraint UNIQUE pada kolom NEXT_STEPNO dan STEPNO. B. Mendefinisikan constraint CHECK pada kolom NEXT_STEPNO (NEXT_STEPNO = STEPNO). C. Mendefinisikan kolom STEPNO sebagai primary key dari tabel TABLEX dan kolom NEXT_STEPNO sabagai suatu foreign key yang mengacu pada kolom STEPNO pada tabel yang sama. D. Mendefinisikan kolom NEXT_STEPNO sebagai primary key pada TABLEX dan kolom STEPNO sebagai suatu foreing key yang mengacu pada kolom NEXT_STEPNO pada tabel yagn sama. Q9) Berikut ini yang mana merupakan karakteristik dari schema? A. Referensi foreign key tidak dapat keluar dari batasan schema. B. Suatu pemakai DB2 harus dibuat terlebih dahulu sebelum suatu schema dengan nama yang sama dapat dibuat. C. Jika tidak ada schema yang ditentukan ketika suatu objek dibuat, maka secara default schema PUBLIC akan digunakan. D. Suatu schema memungkinkan untuk pembuatan banyak objek pada suatu database tanpa terhadap bentrokan terhadap namespace. Q10) Jenis constraint berikut ini yang dapat digunakan untuk memastikan nilai INTEGER pada suatu kolom hanya akan berisi nilai positif? A. Unique B. Check C. Referential D. Informational Q11) Jenis constraint apa yang digunakan untuk memastikan bahwa setiap baris yang disisipkan pada tabel EMPLOYEE dengan suatu nilai pada kolom WORKDEPT memiliki baris nilai yang berkoresponden pada kolom DEPTNO pada tabel DEPARTEMEN? A. Suatu constraint chek pada tabel EMPLOYEE B. Suatu constraint unique pada tabel kolom WORKDEPT C. Suatu referensi foreign key dari tabel DEPARTEMEN kolom DEPTNO ke kolom WORKDEPT pada tabel EMPLOYEE D. Suatu referensi foreign key dari tabel EMPLOYEE kolom WORKDEPT ke kolom DEPTNO pada tabel DEPARTEMEN Q12) Berikut ini yang tidak dapat digunakan untuk membatasi nilai tertentu yang akan disisipkanpada

Hendra, MT. & Jimmy, S.Kom.

33

Database Lanjut dengan IBM DB2kolom di tabel tertentu? A. Index B. Check constraint C. Referential constraint D. Default constraint Q13) Jika tabel TAB1 dibuat dengan menggunakan perintah berikut: CREATE TABLE tab1 (col1 INTEGER NOT NULL, col2 CHAR(5), CONSTRAINT cst1 CHECK (col1 in (1, 2, 3))) Dimana yang berikut ini akan berhasil disisipkan pada tabel TAB1? A. INSERT INTO tab1 VALUES (0, 'abc') B. INSERT INTO tab1 VALUES (NULL, 'abc') C. INSERT INTO tab1 VALUES (ABS(2), 'abc') D. INSERT INTO tab1 VALUES (DEFAULT, 'abc') Q14) Perhatikan definisi tabel berikut ini: EMPLOYEES ---------------------EMPID INTEGER NAME CHAR(20) SALARY DECIMAL(10,2) Jika perintah berikut ini dijalankan: CREATE UNIQUE INDEX empid_ui ON employees (empid) Dimana dua pernyataan berikut ini yang benar? A. Lebih dari satu nilai null diperbolehkan pada kolom EMPID di tabel EMPLOYEES. B. Nilai not null diperbolehkan pada kolom EMPID pada tabel EMPLOYEES. C. Satu (dan hanya satu) nilai null yang diperbolehkan pada kolom EMPID pada tabel EMPLOYEES. D. Tidak ada index unique lainnya yang dapat dibuat pada tabel EMPLOYEES. E. Setiap nilai yang ditemukan didalam kolom EMPID dari tabel EMPLOYEES akan berbeda. Q15) Perhatikan perintah berikut: CREATE TABLE tablea (col1 INTEGER NOT NULL, CONSTRAINT const1 CHECK (col1 in (100, 200, 300)) Berikut ini mana yang dapat disisipkan pada TABLEA ? A. 0 B. NULL C. 100 D. '100' Q16) Gambar entitas-entitas yang mungkin pada database perpustakaan, gambarkan hubungan yang mungkin, dan definisikan atribut-atribut dalam notasi Chen. Q17) Buatlah perintah SQL untuk pembuatan tabel, dan check constraint serta referensial integritas. Q18) Buatlah aplikasi java yang dapat membuat database yang dimasuk beserta tabel, referensial integritas yang ada.

Hendra, MT. & Jimmy, S.Kom.

34

Database Lanjut dengan IBM DB2

Bab 5, NormalisasiNormalisasi digunakan oleh perancang database untuk merancang database sehingga data mudah diatur, diorganisasikan dan menjaga akurasi data didalam database. Tujuan dari normalisasi adalah untuk menghilangkan duplikasi data, mengurangi kompleksitas, dan mempermudah perbaikan data (menghilangkan anomali), memfasilitasi integritas data (konstraint). Pada proses normalisasi akan dilakukan pengujian pada beberapa kondisi apakah ada anomali pada proses insert, update, delete, bila terdapat anomali pada pengujian tersebut berarti rancangan basis data yang ada belum optimal, sehingga perlu dipecahkan relasi pada tabel tersebut menjadi beberapa tabel baru dan membuat relasi antar tabel tersebut. Proses normalisasi lebih mudah dijelaskan dengan contoh dari pada pernyataan apa itu normal satu, normal dua, dan seterusnya, oleh karena itu kita akan mulai dari contoh terlebih dahulu. Kartu Piutang Kode Relasi : H001 Nama : Hendra Soewarno Alamat : Jl. Rencong No., 52-A Medan Hubungi : Hendra Telepon : 081533113285No. Piutang A001 A002 Tanggal 1-jan-11 5-jan-11 Tgl. JTempo 15-jan-11 19-jan-11 Nilai 100.100 250.000 No. DK B001 B002 B011 Tanggal DK 15-jan-11 16-jan-11 19-jan-11 Kod eDK 101 102 103 Keterangan Pembayaran Potongan tambahan Retur Nilai DK 100.000 100 250.000

Pada tahapan awal kita akan mentransformasikan kartu piutang tersebut diatas menjadi sebuah tabel flat yang berisi semua informasi tersebut diatas sehingga menjadi sebagai berikut.(1) Kode Relasi H001 H001 (2) Nama Hendra Soewarno Hendra Soewarno (3) Alamat Jl. Rencong No. 52A Medan. Jl. Rencong No. 52A Medan. (9) Nilai (10) No. DK1 (4) Hubungi Hendra Hendra (5) Telepon 081533113285 081533113285

(6) No. Piutan

(7) Tanggal

(8) Tgl. JTempo

(11) Tanggal DK1

(12) KodeDK 1

(13) Keterangan1

(14) Nilai DK1

Hendra, MT. & Jimmy, S.Kom.

35

Database Lanjut dengan IBM DB2g A001 A002 1-jan-11 5-jan-11 15-jan-11 19-jan-11 100.100 250.000 B001 B011 15-jan-11 19-jan-11 101 101 Pembayaran Retur 100.00 0 250.00 0

(15) No. DK2 B002

(16) Tanggal DK2 16-jan-11

(17) KodeD K2 102

(18) Keterangan2 Potongan tambahan

(19) Nilai DK2 100

Definisi 1NF: Suatu tabel dikatakan memenuhi bentuk normal pertama jika dan hanya jika setiap atribut pada tabel tersebut adalah atomic, atau dengan kata lain adalah tidak ada perulangan kelompok (repeating group) data pada kolom yang sama atau berbeda pada tabel yang sama. Berdasarkan tabel tersebut diatas terlihat bahwa ada perulangan kelompok data pada kolom 11 dan 15, 12 dan 16, 13 dan 17, kolom 14 dan 18, serta kolom 15 dan 19. Solusi agar tabel diatas memenuhi 1NF adalah mengeluarkan kelompok data yang berulang menjadi baris baru, sehingga tabel diatas menjadi sebagai berikut:(1) Kode Relasi H001 H001 H001 (2) Nama Hendra Soewarno Hendra Soewarno Hendra Soewarno (3) Alamat Jl. Rencong No. 52A Medan. Jl. Rencong No. 52A Medan. Jl. Rencong No. 52A Medan. (9) Nilai 100.100 100.100 250.000 (10) No. DK B001 B002 B011 (11) Tanggal DK 15-jan-11 16-jan-11 19-jan-11 (4) Hubungi Hendra Hendra Hendra (5) Telepon 081533113285 081533113285 081533113285

(6) No. Piutang A001 A001 A002

(7) Tanggal 1-jan-11 1-jan-11 5-jan-11

(8) Tgl. JTempo 15-jan-11 15-jan-11 19-jan-11

(12) KodeD K 101 102 103

(13) Keterangan Pembayaran Potongan tambahan Retur

(14) Nilai DK 100.000 100 250.000

Jika dilihat tabel tersebut diatas, maka telah memenuhi 1NF, dimana nilai pada masingmasing kolom bersifat atomic dan perulangan kelompok telah dihilangkan, tetapi rancangan tersebut diatas menghadapi masalah insert anomali, update anomali dan delete anomali. Insert anomali Ketika kita menyisipkan relasi baru ke tabel diatas, dan relasi tersebut belum memiliki Hendra, MT. & Jimmy, S.Kom. 36

Database Lanjut dengan IBM DB2 piutang, otomatis kolom yang terisi adalah 1, 2, 3, 4, dan 5, sedangkan kolom 6 s/d 14 harus diisi sebagai null, masalah inilah yang disebut sebagai insert anomali. Update anomali Misalkan terjadi perubahan telepon pada kode relasi H001, sehingga perubahan tersebut harus dilakukan pada 3 record yang berbeda, masalah inilah yang disebut sebagai update anomali. Delete anomali Misalkan dilakukan penghapusan data pembayaran pada baris ketiga, menyebabkan terhapusnya data relasi dan piutang, hal inilah yang disebut sebagai delete anomali. Definisi 2NF: untuk memenuhi bentuk normal kedua, suatu tabel harus dalam bentuk 1NF, ditambah dengan setiap kolom bukan key didalam tabel harus bergantung secara fungsional5 terhadap primary key. Jika kita melakukan analisa terhadap tabel tersebut diatas maka kolom 2,3,4, dan 5 adalah memiliki ketergantungan secara fungsional terhadap Kode Relasi, sedangkan kolom 6 s/d 14 adalah tidak memiliki ketergantungan secara fungsional terhadap Kode Relasi, tetapi tergantung kepada No. Piutang, sehingga perlu dipecah menjadi dua tabel berbeda. Relasi(1) Kode Relasi (PK) H001 (2) Nama Hendra Soewarno (3) Alamat Jl. Rencong No. 52A Medan. (4) Hubungi Hendra (5) Telepon 081533113285

Piutang(1) No. Piutang A001 A001 A002 (2) Kode Relasi (FK) H001 H001 H001 (3) Tanggal 1-jan-11 1-jan-11 5-jan-11 (4) Tgl. JTempo 15-jan11 15-jan11 19-jan11 (5) Nilai 100.100 100.100 250.000 (6) No. DK B001 B002 B011 (7) Tanggal DK 15-jan-11 16-jan-11 19-jan-11 (8) Kode DK 101 102 103 (9) Keterangan Pembayaran Potongan tambahan Retur (10) Nilai DK 100.000 100 250.000

Jika kita analisa, maka tabel Relasi telah memenuhi 2NF, tetapi untuk tabel Piutang belum memenuhi, dimana kolom 2, 3, 4, dan 5 berasosiasi tepat pada satu No Piutang, sedangkan kolom 6, 7, 8, 9, dan 10 tidak berasosiasi tepat pada satu No. Piutang, tetapi5

Notasi dari ketergantungan fungsional adalah A B, dalam hal ini berarti bahwa A menentukan B, B secara fungsional tergantung kepada B, A disebut sebagai determinan, dan B disebut sebagai objek dari determinan. A B, jika masing-masing nilai dari A berasosiasi dengan persisnya satu nilai B, sehingga A secara fungsional menentukan B.

Hendra, MT. & Jimmy, S.Kom.

37

Database Lanjut dengan IBM DB2 kepada NoDK, sehingga tabel Piutang dipecah menjadi dua tabel berbeda. Relasi(1) Kode Relasi (PK) H001 (2) Nama Hendra Soewarno (3) Alamat Jl. Rencong No. 52A Medan. (4) Hubungi Hendra (5) Telepon 081533113285

Piutang(1) No. Piutang (PK) A001 A002 (2) Kode Relasi (FK) H001 H001 (3) Tanggal 1-jan-11 5-jan-11 (4) Tgl. JTempo 15-jan-11 19-jan-11 (5) Nilai 100.100 250.000

DKPiutang(1) No. DK (PK) B001 B002 B011 (2) No Piutang (FK) A001 A001 A002 (7) Tanggal DK 15-jan-11 16-jan-11 19-jan-11 (8) KodeDK 101 102 103 (9) Keterangan Pembayaran Potongan tambahan Retur (10) Nilai DK 100.000 100 250.000

Jika dianalisa bahwa tabel-tabel tersebut diatas telah memenuhi 2NF, yaitu masingmasing kolom berasosiasi tepatnya pada masing-masing Primary Key. Definisi 3NF: Agar berada dalam bentuk normal ketiga, suatu tabel harus memenuhi semua syarat pada 2NF, ditambah dengan semua atribut yang tidak tergantung secara langsung terhadap Primary Key harus dikeluarkan (tidak boleh membuat ketergantungan transitive6). Jika dianalisa, maka tabel Relasi, dan Piutang telah memenuhi 3NF, karena semua atribut bergantung kepada Primary Key-nya masing-masing, tetapi khusus untuk tabel pembayaran, kolom keterangan tidak bergantung langsung kepada No. DK sebagai primary key, tetapi tergantung kepada Kode DK, sedangkan Kode DK bergantung secara langsung kepada No. DK, dalam hal ini kolom Keterangan bergantung kepada No DK dengan transisi melalui KodeDK, sehingga kolom Keterangan harus dikeluarkan. KodeDK(1) KodeDK (PK) 1016

(2) Keterangan Pembayaran

Untuk memahami ketergantungan transitive, misalkan kita memiliki tiga buah atribut A, B, dan C yang memiliki koneksi sebagai berikut A B dan B C, dengan kata lain A C, jika kita mengetahui nilai A, kita dapat mengetahui nilai B, dan dapat kita gunakan untuk mendapatkan nilai C, ketergantungan jenis inilah yang disebut sebagai ketergantungan transitive.

Hendra, MT. & Jimmy, S.Kom.

38

Database Lanjut dengan IBM DB2102 103 Potongan tambahan Retur

DKPiutang(1) No. DK (PK) B001 B002 B011 (2) No Piutang (FK) A001 A001 A002 (7) Tanggal DK 15-jan-11 16-jan-11 19-jan-11 (8) KodeDK (FK) 101 102 103 (10) Nilai DK 100.000 100 250.000

Setelah proses normaliasi dilakukan, maka dapat terlihat bahwa tabel-tebel tersebut telah terhindar dari masalah anomali pada insert, update dan delete. Pada kasus praktek umunya bentuk 3NF telah mencukupi walaupun masih terdapat BCNF, 4NF dan 5NF yang akan dibahas pada bagian selanjutnya.

Mengenal DMLData manipulation language adalah perintah yang digunakan untuk mengatur data didalam objek skema database. Adapun beberapa perintah DML yang akan dibahas pada bagian ini adalah INSERT, DELETE dan UPDATE.

INSERTPerintah insert digunakan untuk menyisipkan record kedalam tabel atau view. Penyisipan baris pada view juga menyisipkan menyisipkan baris kedalam tabel. Contoh : create table relasi (koderelasi varchar(10) not null, nama varchar(50), alamat varchar(100), hubungi varchar(50), telepon varchar(20)) alter table relasi add constraint p_key primary key (koderelasi) insert into Relasi (koderelasi, nama, alamat, hubungi, telepon) values ('H001', 'Hendra Soewarno', 'Jl. Rencong No. 52-A Medan', 'Hendra', '081533113285') Perintah tersebut diatas akan menyisipkan satu record baru ke tabel relasi.

Hendra, MT. & Jimmy, S.Kom.

39

Database Lanjut dengan IBM DB2

UPDATEPerintah update digunakan untuk mengupdate data pada suatu tabel atau view. Anda dapat mengubah nilai dari satu atau lebih baris yang mana memenuhi kondisi. Misalnya berdasarkan data diatas, terjadi perubahan nilai HP dari Sdr. Hendra menjadi 0816306344, sehingga perintah update yang diberikan adalah: update relasi set telepon='081533113285' where koderelasi='H001' Setelah perintah tersebut diatas dijalankan, maka otomatis data pada tabel relasi khususnya nomor telepon Sdr. Hendra menjadi sebagai berikut:

DELETEPerintah delete digunakan untuk menghapus record-record dari suatu tabel atau view. Anda dapat menghapus semua record dalam tabel yang memenuhi kondisi. Contoh: delete from relasi Perintah tersebut diatas akan menghapus semua record yang ada didalam tabel relasi. Contoh: delete from relasi where koderelasi='H001' Perintah tersebut diatas akan menghapus semua record yang memiliki koderelasi 'H001'

Prepared Statement pada JavaJika anda mengeksekusi suatu perintah SQL secara berulang-ulang, adalah perlu memperhatikan bahwa setiap perintah yang dilewatkan ke database server akan melalui proses kompilasi, keunggulan dari prepared statement adalah perintah SQL tersebut telah dikompilasi terlebih dahulu (precompiled), sehingga hanya perlu ditentukan nilai masingmasing parameter dan dieksekusi, jadi proses kompilasi hanya terjadi sekali saja. Selain itu pemakaian prepared statement juga dapat menghindarkan terjadinya eksploitasi SQL Injection. Membuat objek prepared statement Pada awalnya perlu dideklarasikan suatu variabel dengan type PreparedStatement, kemudian juga disiapkan SQL statement dengan masing-masing parameter ditandai sebagai ?, karena nanti pada saat kompilasi awal, nilai dari masing-masing parameter belum diketahui, untuk jelasnya lihat koding berikut ini: Hendra, MT. & Jimmy, S.Kom. 40

Database Lanjut dengan IBM DB2

private PreparedStatement insert; String updateString = "insert into relasi (koderelasi," + "nama, alamat, hubungi, telepon) values (?,?,?,?,?)"; public Relasi() { try { insert = MyDBOpenHelper.getConnection().prepareStatement(updateString); } catch (SQLException ex) { Logger.getLogger(Relasi.class.getName()).log(Level.SEVERE, null, ex); } } Menyediakan nilai untuk parameter Untuk memasukan masing-masing nilai ke parameter, dapat menggunakan metode setxxx seperti setString, setInteger, setDate, setDouble, sesuai dengan tipe data untuk masingmasing parameter. insert.setString(1, koderelasi); insert.setString(2, nama); insert.setString(3, alamat); insert.setString(4, hubungi); insert.setString(5, telepon); Menjalankan prepared statement Setelah nilai untuk masing-masing parameter telah ditentukan, maka dapat menggunakan metode executeUpdate yang akan mengembalikan suatu nilai integer yang menunjukkan jumlah record yang dipengaruhi oleh perintah executeUpdate tersebut. int result = insert.executeUpdate(); System.out.println("Berhasil insert " + result + " baris.");

Latihan:1. Buatlah sebuah database Piutang pada sistim DB2 anda. 2. Buatlah sebuah project baru dengan nama Piutang, persiapkan class KoneksiDB, kemudian lengkapi dengan metode createDatabaseObject yang mampu membuat objek-objek database Piutang beserta dengan memperhatikan dengan memperhatikan integritas entitas, integritas Hendra, MT. & Jimmy, S.Kom. 41

Database Lanjut dengan IBM DB2 domain, integritas referensial dan integritas semantik.domain integrity. 3. Buatlah entity class untuk Relasi dengan koding sebagai berikut, dan class AddRelasi, serta modifikasi metoda main untuk menjalankan AddRelasi. Metode createDatabaseObject pada MyDBOpenHelper.java public static void createDatabaseObject() { try { Statement stmtEx; stmtEx = con.createStatement(); stmtEx.executeUpdate("create table relasi " + "(koderelasi varchar(10) not null primary key," + "nama varchar(100) not null," + "alamat varchar(200)," + "hubungi varchar(50)," + "telepon varchar(20))"); stmtEx.executeUpdate("create table piutang " + "(nopiutang varchar(10) not null primary key," + "koderelasi varchar(10) not null," + "tanggal date not null," + "tgljtempo date not null," + "nilai decimal(10,2))"); stmtEx.executeUpdate("create table jenisDK " + "(kodeDK varchar(10) not null primary key," + "keterangan varchar(100))"); stmtEx.executeUpdate("create table DKpiutang " + "(noDK varchar(10) not null primary key," + "nopiutang varchar(10) not null," + "tanggalDK date not null," + "kodeDK varchar(10) not null,"+ "nilaiDK decimal(10,2))"); stmtEx.executeUpdate("alter table piutang " + "alter column nilai set default 0"); stmtEx.executeUpdate("alter table DKpiutang " + "alter column nilaiDK set default 0"); stmtEx.executeUpdate("alter table piutang " + "add constraint periksa_tanggal " + "check(tgljtempo >= tanggal)"); stmtEx.executeUpdate("alter table piutang add constraint " + "fk_relasi foreign key (koderelasi) " + "references relasi"); stmtEx.executeUpdate("alter table DKpiutang add constraint " + Hendra, MT. & Jimmy, S.Kom. 42

Database Lanjut dengan IBM DB2 "fk_piutang foreign key (nopiutang) " + "references piutang"); stmtEx.executeUpdate("alter table DKpiutang add constraint " + "fk_kodeDK foreign key (kodeDK) " + "references jenisDK"); } catch (SQLException ex) {Logger.getLogger(MyDBOpenHelper.class.getName()).log(Level.SEVERE, null, ex);

} } Relasi.java package piutang.entity; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.logging.Level; import java.util.logging.Logger; import piutang.MyDBOpenHelper; public class Relasi { private String koderelasi; private String nama; private String alamat; private String hubungi; private String telepon; private PreparedStatement insert; String insertString = "insert into relasi (koderelasi," + "nama, alamat, hubungi, telepon) values (?,?,?,?,?)"; public Relasi() { try { insert = MyDBOpenHelper.getConnection().prepareStatement(insertString); } catch (SQLException ex) { Logger.getLogger(Relasi.class.getName()).log(Level.SEVERE, null, ex); } } public String getAlamat() { return alamat; }

Hendra, MT. & Jimmy, S.Kom.

43

Database Lanjut dengan IBM DB2 public void setAlamat(String alamat) { this.alamat = alamat; } public String getHubungi() { return hubungi; } public void setHubungi(String hubungi) { this.hubungi = hubungi; } public String getKoderelasi() { return koderelasi; } public void setKoderelasi(String koderelasi) { this.koderelasi = koderelasi; } public String getNama() { return nama; } public void setNama(String nama) { this.nama = nama; } public String getTelepon() { return telepon; } public void setTelepon(String telepon) { this.telepon = telepon; } public void create() { try { insert.setString(1, koderelasi); insert.setString(2, nama); insert.setString(3, alamat); insert.setString(4, hubungi); Hendra, MT. & Jimmy, S.Kom. 44

Database Lanjut dengan IBM DB2 insert.setString(5, telepon); int result = insert.executeUpdate(); System.out.println("Berhasil insert " + result + " baris."); } catch (SQLException ex) { Logger.getLogger(Relasi.class.getName()).log(Level.SEVERE, null, ex); } } } AddRelasi.java package piutang.relasi; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.logging.Level; import java.util.logging.Logger; import piutang.entity.Relasi; public class AddRelasi { public void start() { InputStreamReader converter = new InputStreamReader(System.in); BufferedReader in = new BufferedReader(converter); Relasi relasi = new Relasi(); String koderelasi=""; do { try { System.out.println("Ketik quit untuk selesai"); System.out.println("Masukan kode relasi:"); koderelasi = in.readLine(); if (!"quit".equals(koderelasi.toLowerCase())) { System.out.println("Masukan nama:"); String nama = in.readLine(); System.out.println("Masukan alamat:"); String alamat = in.readLine(); System.out.println("Masukan hubungi:"); String hubungi = in.readLine(); System.out.println("Masukan telepon:"); String telepon = in.readLine(); relasi.setKoderelasi(koderelasi); relasi.setNama(nama); Hendra, MT. & Jimmy, S.Kom. 45

Database Lanjut dengan IBM DB2 relasi.setAlamat(alamat); relasi.setHubungi(hubungi); relasi.setTelepon(telepon); relasi.create(); } } catch (IOException ex) { Logger.getLogger(AddRelasi.class.getName()).log(Level.SEVERE, null, ex); } } while (!"quit".equals(koderelasi.toLowerCase())); } } Main.java package piutang; import piutang.relasi.AddRelasi; public class Main { public static void main(String[] args) { if (MyDBOpenHelper.bukaDatabase("hendra","920403024")) { System.out.println("Berhasil buka database"); //MyDBOpenHelper.createDatabaseObject(); AddRelasi addRelasi = new AddRelasi(); addRelasi.start(); } else { System.out.println("Gagal buka database"); } } }

Hendra, MT. & Jimmy, S.Kom.

46

Database Lanjut dengan IBM DB2

Bab 6, Normalisasi LanjutanBCNF (Coyce-Codd Normal Form)Setelah diteliti lebih lanjut, ternyata bentuk 3NF masih dapat terjadi redundancy, sehingga diperlukan bentuk normal berikutnya yang BCNF. Trivial function dependency, didalam suatu tabel R, suatu ketergantungan fungsional dalam bentuk A B disebut sebagai trivial functional dependency, jika B adalah himpunan bagian dari A (tidak perlu berupa proper subset), dimana B . Sebagai contoh, A A adalah suatu trivial functional dependency. Subset dan Proper subset, misalkan A = {1, 2, 3, 4}, B = {1, 2, 3}, dan C = {1, 2, 3, 4}, anda dapat mengatakan bahwa C adalah subset dari A, tetapi C bukan merupakan suatu proper subset dari A karena C = A, sedangkan B adalah proper subset dari A karena B A (dimana terdapat menimal satu elemen didalam A tidak ada didalam B). Non-trivial functional dependency, didalam suatu tabel R, suatu ketergantungan fungsional dari bentuk A B dikatakan sebagai non-trivial, jika B bukan merupakan subset dari A, dimana B A. Untuk berada dalam BCNF, tabel harus berada dalam bentuk 3NF dan untuk setiap nontrivial function dependency A B, A adalah suatu super key. Dengan kata lain, suatu tabel dalam BCNF jika dan hanya jika setiap determinan adalah suatu Candidate key7. Misalkan kita memiliki tabel Pertemuan(Mahasiswa, MataKuliah, Dosen) sebagai berikut: Pertemuan Mahasiswa Tony Thomas Indra Wilson Matakuliah DBLanjut DBLanjut ClientServer ClientServer Dosen Hendra Hendra Jimmy Jimmy

Tabel tersebut diatas memenuhi 3NF, tetapi dapat terjadi anomali, dimana kita tidak dapat menambahkan dosen dan matakuliah tanpa memasukan mahasiswa. Sehingga tabel pertemuan tersebut dapat diubah menjadi BCNF dengan memecah tabel tersebut kedalam7

Suatu Candidate key dari suatu tabel adalah suatu Superkey minimal untuk tabel tersebut.

Hendra, MT. & Jimmy, S.Kom.

47

Database Lanjut dengan IBM DB2 dua tabel . Pertemuan(Mahasiswa, Matakuliah, Dosen) {Mahasiswa, Matakuliah} Dosen Matakuliah Dosen Sehingga T1 (Mahasiswa, Dosen) T2 (Dosen, Matakuliah) Mahasiswa Tony Thomas Indra Wilson Matakuliah DBLanjut DBLanjut ClientServer ClientServer

Matakuliah DBLanjut ClientServer

Dosen Hendra Jimmy

Perlu diketahui bahwa semua BCNF adalah dalam bentuk 3NF, tetapi tidak semua 3NF adalah BCNF, secara ringkas proses normalisasi sampai kepada BCNF diillustrasikan sebagai berikut:

4NF dan 5NFBentuk normal sampai dengan BCNF telah cukup untuk tingkat normalisasi, tetapi pada kenyataannya ada dua bentuk normal yang diperlukan untuk mengeleminasi sisa dari Hendra, MT. & Jimmy, S.Kom. 48

Database Lanjut dengan IBM DB2 anomali yang diketahui yaitu terjadinya multivalued dependency8 dan join dependency pada suatu tabel, pada situasi umumnya semua tabel BCNF adalah secara otomatis memenenui 4NF dan 5NF, tetapi jika keterbatasan ini muncul, diperlukan perbaikan lanjutan untuk mengkoreksi anomali.

4NFTujuan dari bentuk normal keempat adalah mengeleminasi non-trivial multivalued dependency dari suatu tabel dengan memproyeksi mereka kedalam tabel yang lebih kecil. Definisi 4NF: suatu tabel dalam bentuk 4NF jika dan hanya jika berada dalam BCNF, dan hanya memiliki satu ketergantungan multivalued didalam R (sebagai contoh X Y), paling sedikit satu dari padanya mengandung ketergantungan multivalued adalah trivial atau X adalah SuperKey dari tabel R. Contoh: joborder(Departemen, Pekerjaan, Mesin) yang menunjukan departemen dan pekerjaan yang ditanggani serta mesin yang dimiliki. joborder departemen d1 d1 d1 d1 d2 d2 d2 d2 pekerjaan j1 j1 j2 j2 j3 j3 j4 j4 mesin p1 p2 p1 p2 p3 p4 p3 p4

Jika kita ingin menambah suatu mesin kepada departemen, maka kita perlu menyisipkan beberapa baris, dan jika kita ingin menghapus suatu mesin dari departemen, maka dapat menyebabkan kehilangan pekerjaan yang ditangani departemen tersebut.8

Misalkan sebuah tabel R memiliki tiga buah atribut yaitu A, B, dan C, dimana untuk setiap nilai didalam A adalah himpunan untuk nilai B dan himpunan untuk nilai C, dan tetapi himpunan nilai B dan C tidak tergantung satu sama yang lain, dengan demikian terjadi ketergantungan multivalued antara atribut A, B, dan C didalam tabel R. A B menyatakan bahwa untuk setiap nilai dari A terdapat himpunan nilai untuk B, A C menyatakan untuk setiap nilai A terdapat himpunan nilai untuk C.

Hendra, MT. & Jimmy, S.Kom.

49

Database Lanjut dengan IBM DB2

Dalam hal ini terjadi ketergantungan multivalued yaitu: Departemen Pekerjaan, dimana menyatakan bahwa satu departemen dapat mengerjakan beberapa pekerjaan (multivalued dependency) Departemen Mesin, diaman menyatakan bahwa satu departemen dapat memiliki beberapa mesin(multivalued dependency) Pada tabel joborder, departemen bukan merupakan SuperKey, untuk mengubah tabel tersebut menjadi 4NF dengan dekomposisi menjadi dua tabel sebagai berikut: T1 (departemen, pekerjaan) T2 (departemen, mesin) Dekomposisi: proses memecah suatu tabel menjadi dua tabel atau lebih. departemen d1 d1 d2 d2 pekerjaan j1 j2 j3 j4

departemen d1 d1 d2 d2

mesin p1 p2 p3 p4

5NFJoin dependency , dapat dikatakan ada jika gabungan dari R1 dan R2 melalui C adalah sama dengan relasi R, dimana R1 dan R2 adalah dekomposisi dari R1(A, B, C) dan R2(C, D) dari relasi diberikan R(A, B, C, D) Suatu tabel berada dalam bentuk 5NF jika setiap join dependency adalah suatu konsekuensi dari Candidate key relasinya. dengan kata lain suatu tabel dalam bentuk 5NF jika dia tidak ada join dependency.

Hendra, MT. & Jimmy, S.Kom.

50

Database Lanjut dengan IBM DB2 Contoh: Karyawan Thomas Thomas Thomas Thomas John Abhishek Ketrampilan Analyst Analyst DBA Analyst DBA Analyst Pekerjaan P-1 P-2 P-2 P-3 P-1 P-1

Tabel tersebut dalam bentuk BCNF dan 4NF, dapat menimbulkan anomali karena terjadi saling ketergantungan diantara gabungan, sebagai contoh Thomas dimana memiliki ketrampilan Analyst dan DBA ditugaskan kepada P-2, dimana P-2 membutuhkan kedua ketrampilan tersebut. Karyawan yang sama Thomas ditugaskan hanya sebagai Analyst pada P-1 yang hanya membutuhkan ketrampilan Analyst dan bukan ketrampilan DBA. Maka timbul anomali ketika kita menghapus Thomas, P-2 (mengeluarkan Thomas dari Pekerjaan P-2), karena kita kehilangan data bahwa Thomas memiliki ketrampilan DBA, sehingga tabel diatas dapat didekomposisi menjadi: Ketrampilan Karyawan Thomas Thomas John Abhishek KebutuhanKetrampilan Pekerjaan P-1 P-2 P-2 P-3

Ketrampilan Analyst Analyst DBA Analyst

Ketrampilan Analyst Analyst DBA DBA

Hendra, MT. & Jimmy, S.Kom.

51

Database Lanjut dengan IBM DB2

Penugasan Karyawan Thomas Thomas Thomas John Abhishek

Pekerjaan P-1 P-2 P-3 P-1 P-1

Jika Thomas dikeluarkan dari P-2, maka kita menghapus Thomas, P-2, tetapi tidak mempengaruhi tabel lainnya. Secara ringkas proses Normalisasi didalam perancangan database adalah ditunjukan pada Gambar

Hendra, MT. & Jimmy, S.Kom.

52

Database Lanjut dengan IBM DB2

Mengenal Data Query LanguagePerintah select digunakan untuk mengambil data dari satu atau beberapa tabel maupun view. Anda dapat melakukan filter dengan menggunakan kondisi untuk membatasi pengambilan data tertentu. Contoh: select * from relasi Perintah diatas akan mengambil semua data dari tabel relasi Contoh: select * from relasi fetch first 5 rows only Perintah ditas akan mengambil lima baris pertama dari tabel relasi. Contoh: select * from relasi where koderelasi like J% Perintah diatas akan mengambil semua baris yang memiliki kode relasi dimulai dengan huruf J. Contoh: select nama, alamat from relasi Perintah diatas akan mengambil kolom nama dan alamat dari semua baris ditabel relasi.

AggregateFungsi aggregate yang tersedia pada DB2 terdiri dari COUNT, COUNT_BIG, AVG, MAX, MIN, STDDEV, SUM dan VARIANCE, untuk perintah COUNT dan COUNT_BIG hasilnya tidak dapat berupa nilai null, sedangkan untuk perintah lainnya dapat menghasilkan jika diaplikasi pada suatu himpunan kosong. Contoh: select count(*) as hitung_baris from relasi Perintah diatas akan mendapatkan jumlah baris yang ada pada tabel relasi Contoh: select count(*) as hitung_baris from relasi where nama like 'hendra%'

Hendra, MT. & Jimmy, S.Kom.

53

Database Lanjut dengan IBM DB2 Perintah diatas akan mendapatkan jumlah baris yang namanya diawali dengan kata Hendra.

ORDER BYUntuk mendapatkan hasil pengembalian data sesuai dengan urutan berdasarkan kolom tertentu, maka pada perintah Select dapat dilengkapi dengan pernyataan ORDER BY Contoh: select * from relasi order by nama select * from relasi order by nama DESC select * from relasi order by nama, kota select * from relasi order by nama DESC, kota DESC

GROUP BYPerintah GROUP BY dapat digunakan untuk meringkas data berdasarkan pengelompokan kolom tertentu. Biasanya pemakaian perintah GROUP di kombinasikan dengan pemakaian aggregate. Contoh :(1) No. DK (pk) B001 B002 B011 B012 (2) Tanggal DK 15-jan-11 16-jan-11 19-jan-11 25-jan-11 Tabel Bayar (3) Kode DK (fk) 101 102 101 101 (4) Nilai DK 100.000 100 200 50.000 (5) No. Piutang (fk) A001 A001 A002 A002

select nopiutang, sum(nilaidk) as jumlah_bayar from bayar group by nopiutang Akan mengembalikan NoPiutang A001 A002

Jumlah_bayar 100100 250000

Perintah tersebut diatas akan meringkas data jumlah pembayaran untuk masing-masing nopiutang.

HAVINGEvaluasi kondisi terhadap nilai yang merupakan hasil dari fungsi Aggregate dapat Hendra, MT. & Jimmy, S.Kom. 54

Database Lanjut dengan IBM DB2 dilakukan dengan menggunakan pernyataan Having. select nopiutang, sum(nilaidk) as jumlah_bayar from bayar group by nopiutang having sum(nilaidk) > 200000 Perintah tersebut diatas akan menampilkan data pembayaran piutang dinama jumlah pembayaran per-nomor piutang memiliki nilai diatas 200000

ResultsetSebagai hasil dari eksekusi DQL adalah sebuah Resultset, suatu resultset dapat berupa satu baris baris tunggal maupun lebih. Untuk pengambilan nilai dari masing-masing kolom menggunakan metoda dengan format sebagai berikut: type getType(int | String) Dalam hal ini berupa getInt, getString, getDate, getDouble, kemudian argumen adalah nomor kolom yang akan diambil nilainya, karena resultset bekerja pada satu baris suatu saat, untuk berpindah ke baris berikutnya dapat menggunakan metoda next(). Jika metoda next() berhasil, maka akan mengembalikan true, dan false jika tidak ada baris berikutnya. Contoh: Relasi.java package piutang.entity; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.logging.Level; import java.util.logging.Logger; import koneksidb.MyDBOpenHelper; public class Relasi { private String koderelasi; private String nama; private String alamat; private String hubungi; private String telepon; private PreparedStatement insert; String insertString = "insert into relasi (koderelasi," + "nama, alamat, hubungi, telepon) values (?,?,?,?,?)"; Hendra, MT. & Jimmy, S.Kom. 55

Database Lanjut dengan IBM DB2

private PreparedStatement update; String updateString = "update relasi set nama=?," + "alamat=?, hubungi=?, telepon=? where koderelasi=?"; private PreparedStatement select; String selectString = "select nama, alamat, hubungi, telepon " + "from relasi where koderelasi=?"; public Relasi() { try { insert = MyDBOpenHelper.getConnection().prepareStatement(insertString); update = MyDBOpenHelper.getConnection().prepareStatement(updateString); select = MyDBOpenHelper.getConnection().prepareStatement(selectString); } catch (SQLException ex) { Logger.getLogger(Relasi.class.getName()).log(Level.SEVERE, null, ex); } } public String getAlamat() { return alamat; } public void setAlamat(String alamat) { this.alamat = alamat; } public String getHubungi() { return hubungi; } public void setHubungi(String hubungi) { this.hubungi = hubungi; } public String getKoderelasi() { return koderelasi; } public void setKoderelasi(String koderelasi) { this.koderelasi = koderelasi; } Hendra, MT. & Jimmy, S.Kom. 56

Database Lanjut dengan IBM DB2

public String getNama() { return nama; } public void setNama(String nama) { this.nama = nama; } public String getTelepon() { return telepon; } public void setTelepon(String telepon) { this.telepon = telepon; } public void create() { try { insert.setString(1, koderelasi); insert.setString(2, nama); insert.setString(3, alamat); insert.setString(4, hubungi); insert.setString(5, telepon); int result = insert.executeUpdate(); System.out.println("Berhasil insert " + result + " baris."); } catch (SQLException ex) { Logger.getLogger(Relasi.class.getName()).log(Level.SEVERE, null, ex); } } public void update() { try { update.setString(1, nama); update.setString(2, alamat); update.setString(3, hubungi); update.setString(4, telepon); update.setString(5, koderelasi); int result = update.executeUpdate(); System.out.println("Berhasil update " + result + " baris."); } catch (SQLException ex) { Logger.getLogger(Relasi.class.getName()).log(Level.SEVERE, null, ex); Hendra, MT. & Jimmy, S.Kom. 57

Database Lanjut dengan