Sunday, November 23, 2014

Praktikum VIII Fungsi , PL/SQL dan Trigger

A. LANDASAN TEORI
1. Pendukung Fungsi
PostgreSQL memiliki fungsi yang dapat mengubah suatu nilai dalam suatu kolom atau barismenjadi huruf besar. Fungsi tersebut bernama upper(nama_kolom), berfungsi memanggilfungsi upper dengan nama_kolom sebagaii argumen sehingga menghasilkan nilai padakolom dalam huruf besar. Berikut Struktur SQL untuk menampilkan data dalam huruf besar semua :
SELECT upper ([nama kolom]) FROM [nama tabel];
- Berikut struktur SQL untuk menampilkan data dimana huruf pertama saja yang besar :
SELECT initcap ([nama kolom]) FROM [nama tabel];

2. Fungsi
a. Fungsi pada PostgresSQL
Fungsi SQL adalah sebuah kumpulan query, biasanya query yang detail dan panjangyang dibungkus menjadi satu dan disimpan dalam database dan kemudian apabiladiperlukan hanya tinggal mengaksesnya tanpa mengetikan query detail. Ada beberapa konsep yang menarik dari fungsi antara lain:
• Bahasa yang dipakai dapat didefenisikan sendiri dengan tersedianya parameter LANGUAGE, tanpa harus mengkompilasi ulang PostgreSQL.
•  Kita dapat membuat dua buah fungsi dengan nama yang sama namun parametermasukkannya yang berbeda, baik tipe data maupun jumlahnya.

Ada beberapa faktor yang perlu diperhatikan dalam membuat fungsi antara lain:
• Nama Fungsi
• Nomor dari fungsi argument
• Tipe data dari setiap argument
• Tipe dari hasil fungsi
• Fungsi action
• Bahasa yang digunakan oleh fungsi action.
- Berikut contoh sederhana pembuatan fungsi SQL untuk perkalian dari tiga inputan :  db_personal=> CREATE FUNCTION perkalian (FLOAT, FLOAT, FLOAT)
- db_personal-> RETURNS FLOAT
- db_personal-> AS 'SELECT ($1 + $2) * $3;'
- db_personal-> LANGUAGE 'sql';
- CREATE

db_personal=> SELECT perkalian (10,10,10);
perkalian ----------- 200 (1 row)


b. Fungsi pada MySQL
Secara default, routine (procedure/function) diasosiasikan dengan database yang sedang aktif. Untuk dapat mengasosiasikan routine secara eksplisit dengan database yang lain, buat routine dengan format: db_name.sp_name.
MySQL mengijinkan beberapa routine berisi statemen DDL, seperti CREATE dan DROP. MySQL juga mengijinkan beberapa stored procedure (tetapi tidak stored function) berisi statemen SQL transaction, seperti COMMIT. Stored function juga berisi beberapa statemen baik yang secara eksplisit atau implisit commit atau rollback.
Sintak :
CREATE FUNCTION sp_name ([func_parameter[,...]])  
RETURNS type     [characteristic ...] routine_body        

proc_parameter:     [ IN | OUT | INOUT ] param_name type        

func_parameter:     param_name type

type:  
Any valid MySQL data type

characteristic:  
 LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL
| NO SQL
| READS SQL DATA
| MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'

routine_body:  
Valid SQL procedure statement or statements
Keterangan :
- sp_name: Nama routine yang akan dibuat
- proc_parameter: Spesifikasi parameter sebagai IN, OUT, atau INOUT valid hanya untuk
PROCEDURE. (parameter FUNCTION selalu sebagai parameter IN)
- returns: Klausa RETURNS dispesifikan hanya untuk suatu FUNCTION. Klausa ini digunakan untuk mengembalikan tipe fungsi, dan routine_body harus berisi suatu statemen nilai RETURN.
- comment: Klausa COMMENT adalah suatu ekstensi MySQL, dan mungkin digunakan untuk mendeskripsikan stored procedure. Informasi ini ditampilkan dengan statemen SHOW CREATE PROCEDURE dan SHOW CREATE FUNCTION.

Contoh: mysql> delimiter //
mysql> create function fcNamaMHS(x char(25)) returns char(40)  
-> return concat('Nama : ', x);  
-> // Query OK, 0 rows affected (0.00 sec)
mysql> select fcNamaMHS('Sholihun');




Dari contoh diatas terlihat bahwa parameter “x” diperlakukan sebagai IN karena sebagaimana dijelaskan sebelumnya bahwa fungsi hanya bisa dilewatkan dengan
parameter IN. Kemudian untuk pengembalian nilainya, digunakan tipe data dengan kisaran nilai tertentu (dalam hal ini char(40)) dengan diawali pernyataan returns.

Pernyataam “concat('Nama : ', x)” merupakan routine_body yang akan menghasilkan gabungan string “Nama :” dengan nilai dari parameter “x” yang didapat ketika fungsi ini dieksekusi. Perintah yang digunakan untuk mengeksekusi fungsi adalah “select fcNamaMHS('Sholihun')”.

c. Fungsi PL/PGSQL PL/PGSQL
Merupakan bahasa yang lain untuk membuat sebuah fungsi, biasanya bahasa ini digunakan untuk menangani fungsi yang lebih kompleks. Pl/pgsql sudah terdapat dalam instalasi PostgreSQL.  Keuntungan penggunaan Fungsi PL/PGSQL :
1. Meningkatkan kinerja karena mengurangi pengiriman kode dari klien ke server.
2. Meningkatkan keamanan karena pengaksesan data tertentu ditangani dalam server.
3. Meningkatkan konsistensi data saat sejumlah aplikasi memanggil prosedur yang sama;

Sebaliknya kelemahannya yaitu server akan lebih terbebani karena banyak proses yang harus ditangani. Sedangkan query PL/PGSQL agar lebih mudah di pahami akan dibagi menjadi 2 yaitu pembuatan fungsi dan pembuatan definisi

- Berikut Struktur pembuatan fungsi dalam pl/pgsql
1. Pembuatan fungsi :
CREATE [OR REPLACE] FUNCTION nama_fungsi (  argtype , ... ])
RETURNS tipe_data
AS ‘definisi’
LANGUAGE ‘plpgsql’;

2. Pembuatan definisi :
DECLARE nama_variable tipe_data  /* deklarasi variabel, type */
BEGIN  /* prosedural dan SQL masuk disini seperti select, update dan sebagainya*/
Return nama_variable /* blok ini yang wajib */
END;

 - Menghapus fungsi :
DROP FUNCTION nama_fungsi(paramater, parameter, parameter ... ); Contoh :  DROP FUNCTION pembagian(text);

d. Triger
a. Triger pada PostgresSQL
Trigger digunakan untuk menyisipkan sebuah fungsi pada saat suatu record di- INSERT, UPDATE dan DELETE. Trigger sangat ideal untuk mengecek atau memodifikasi sebuah data pada kolom sebelum dimasukkan ke dalam database, sehingga sebuah fungsi dapat dipanggil setiap saat secara otomatis ketika sebuah row akan dimodifikasi. Ciri khas dari fungsi yang diperuntukkan untuk trigger adalah menghasilkan output bertipe OPAQUE. Tipe opaque adalah sebuah tipe yang menginformasikan pada database bahwa fungsi tersebut tidak menghasilkan satu dari tipe data yang ditetapkan SQL dan tidak secara langsung dapat digunakan dalam statemen SQL. Language (bahasa) PL/PGSQL dapat digunakan untuk trigger procedure, fungsi untuk trigger ini memiliki beberapa variabel khusus yang terdeklarasi secara otomatis. Variabel tersebut antara lain:
• NEW:  Variabel yang berisi nilai baru suatu record pada saat INSERT atau UPDATE, bertipe RECORD.
• OLD:  Variabel yang berisi nilai lama suatu record pada saat UPDATE atau DELETE, juga bertipe RECORD. Berikut ini beberapa contoh penggunaan fungsi sebagai trigger procedure: Contoh : trigger berikut ini memastikan isi field atau kolom nama pada tabel anggota selalu huruf besar.

b. Triger pada MySQL
Pernyataan CREATE TRIGGER digunakan untuk membuat trigger, termasuk aksi apa yang dilakukan saat trigger diaktifkan. Trigger berisi program yang dihubungkan dengan suatu tabel atau view yang secara otomatis melakukan suatu aksi ketika suatu baris di dalam tabel atau view dikenai operasi INSERT, UPDATE atau DELETE.
Sintak :
CREATE     [DEFINER = { user | CURRENT_USER }]  
TRIGGER trigger_name trigger_time trigger_event  
ON tbl_name FOR EACH ROW trigger_stmt

Keterangan :
- [DEFINER = { user | CURRENT_USER }]: Definisi user yang sedang aktif, sifatnya opsional.
- trigger_name: Nama trigger.
- trigger_time: waktu menjalankan trigger. Ini dapat berupa BEFORE atau AFTER.
o BEFORE: Membuat trigger diaktifkan sebelum dihubungkan dengan suatu operasi.
o AFTER: Membuat trigger diaktifkan setelah dihubungkan dengan suatu operasi.
- trigger_event: berupa kejadian yang akan dijalankan trigger.
- trigger_event dapat berupa salah satu dari berikut:
o INSERT : trigger diaktifkan ketika sebuah record baru disisipkan ke dalam tabel. Contoh: statemen INSERT, LOAD DATA, dan REPLACE.
o UPDATE : trigger diaktifkan ketika sebuah record dimodifikasi. Contoh: statemen UPDATE.
o DELETE : trigger diaktifkan ketika sebuah record dihapus. Contoh: statemen DELETE dan REPLACE. Catatan : trigger_event tidak merepresentasikan statemen SQL yang diaktifkan trigger sebagai suatu operasi tabel. Sebagai contoh, trigger BEFORE untuk INSERT akan diaktifkan tidak hanya oleh statemen INSERT tetapi juga statemen LOAD DATA.
- tbl_name: Nama tabel yang berasosiasi dengan trigger.
- trigger_stmt: Statemen (tunggal atau jamak) yang akan dijalankan ketika trigger aktif.
Contoh yang akan dibahas adalah mencatat kejadian-kejadian yang terjadi beserta waktunya pada tabel mahasiswa, dan catatan-catatan tadi disimpan dalam tabel yang lain, misal log_mhs. Misalkan struktur tabel log_mhs adalah sebagai berikut.
mysql> describe log_mhs;

Contoh 1:
mysql> create trigger ins_mhs after insert on mahasiswa  
-> for each row insert into log_mhs values('Tambah data',now());
mysql> insert into mahasiswa values('00631','Hanif','Kalasan','P01');
mysql> select * from log_mhs;


Dari contoh diatas dapat dilihat bahwa ketika satu record pada tabel mahasiswa disisipkan (insert), maka secara otomatis tabel log_mhs akan disisipkan satu record, yaitu kejadian ‘Tambah data’ dan waktu saat record pada tabel mahasiswa disisipkan.

B. HASIL PRAKTIKUM
1. Membuat fungsi konversi suhu dari Fahrenheit ke derajat celcius dengan rumus konversi sebagai berikut : celcius=5/9 * (nilai Fahrenheit-32) Kemudian jalankan hasilnya dengan menSELECT fungsi tadi
seperti gambar berikut :




2. Memuat fungsi untuk mencari alamat mahasiswa dari tabel mahasiswa berdasarkan nama mahasiswa dan di jalankan melalui select






3. Membuat fungsi untuk menghitung nilai dengan menggunakan bahasa pl/sql seperti berikut ;






4. Membuat fungsi menggunakan pl/pgsql untuk mencari bilangan ganjil atau genap dari bilangan yang diinputkan dan tampilkan select




5. Tambahkan kolom modifikasi pada tabel mahasiswa. Dimana setiap ada insert atau update maka tanggal pada kolom modifikasi akan menunjukkan tanggal perubahan tersebut dilakukan.



C. PERBEDAAN DBMS
Banyak perbedaan yang terjadi di antara Postgres dengan Mysql apalagi dalam querinya , untuk Mysql kalau membuat query fungsi harus ada delimeternya berikut perbedaannya ;
-PostgresSQL 
Perbedaan :
1. Perlu menuliskan Bahasa yang dipakai seperti pl pgsql.
2. Pada tipe Char atau Varchar tidak perklu diberi ukuran.
3. Tentang percabangan, setelah query if, atau else if serta else maka menggunakan select  into variable (values).
-MySQL 
Perbedaan : 
1. Tidak perlu menuliskan Bahasa yang dipakai dan bisa langsung meng eksekusi query.
2. Pada tipe Char atau Varchar tidak diberi ukuran jika tidak maka akan error.
3. Perlu adanya concat (nilai kembalian di akhir query).
4. Tentang percabangan, setelah query if, atau else if serta else maka menggunakan then return concat (values).


D. KESIMPULAN
Berdasarkan apa yang telah kita pelajari pada praktikum ini tentang Fungsi, plpgsql dan trigger maka dapat disimpulkan bahwa antara PostgresSQL dengan MySQL sangatlah berbeda. Dan itu banyak juga perbedaannya.
Semoga sedikit ilmu yang kami tularkan nantinya akan dapat mempermudah pembaca dalam memcahkan masalah-masalah atau mungkin tugas-tugas pembaca sekalian. 

E. DAFTAR PUSTAKA
Modul Praktikum Desain Basis Data 2014

Sunday, November 9, 2014

Laporan Praktikum VII "Sub Query dan Indeks"

A. Landasan Teori

SELECT INTO STATEMENT
Query select  into statement merupakan query SQL yang digunakan untuk mengopi informasi dari tabel ke tabel yang lain tanpa membuat tabel sebelumnya. Berikut  struktur  query  penggunaan  select  into  statement  untuk mengopi semua data dari tabel1 ke tabel yang baru :
SELECT * INTO newtable FROM table1;
Berikut struktur query penggunaan select into statement  untuk mengopi data berdasarkan kolom tertentu dari tabel1 ke tabel yang baru :
SELECT column_name(s) INTO newtable [IN externaldb] FROM table1;

SUB QUERY
Subquery atau query Nested merupakan bentuk query yang terdapat dalam query yang lain. Subquery dapat ditempatkan dalam klausa where, having, from bersama dengan  operator perbandingan seperti = untuk baris tunggal dan untuk baris berganda menggunakan in, not in atau <>, < any, >, >=,<=. Penggunaan  sub  query  dapat diterapkan  pada  pernyataan  SELECT,  UPDATE,  DELETE,  dan  INSERT.  Bentuk penggunaannya sebagai berikut :
Select  nama_kolom  from  nama_tabel  where  nama_kolom  operator
(subquery);

INDEKS
Indeks disini berguna dalam suatu pencarian nilai atau  data dalam database. Dalam suatu kasus ketika mengakses sebuah tabel biasanya DBMS akan membaca seluruh tabel baris perbaris hingga selesai. Ketika baris sangat banyak dan hasil dari query hanya sedikit, maka hal ini sangat tidak efisien. Seperti halnya ketika kita membaca sebuah buku dan ingin mencari kata atau istilah tertentu dalam buku maka biasanya akan di cari dengan membuka setiap halaman dari awal sampai akhir. Dengan adanya indeks buku maka kita cukup dengan membuka indeks, sehingga akan cepat dalam pencarian
kata tersebut. PostgreSQL tidak bisa membuat indeks dengan otomatis, sehingga user dapat membuat indeks tersebut untuk sering kali digunakan kolom,  biasanya dalam clause WHERE. Berikut struktur SQL :
CREATE INDEX nama_index ON nama_tabel (nama kolom);

indeks sebaiknya jangan digunakan  pada tabel atau kolom yang sangat jarang atau tidak pernah diakses. Selain untuk perintah SELECT Indeks juga bermanfaat untuk UPDATE dan DELETE yang menggunakan kondisi pencarian.  Sedangkan Unique index mirip dengan indeks tetapi lebih digunakan untuk mencegah duplikasi nilai yang terdapat dalam tabel. Jadi dengan adanya unique index berarti pembaca tidak dapat meng-insert nilai yang sama dalam sebuah tabel. Berikut struktur SQL nya :
CREATE UNIQUE INDEX nama_index ON nama_tabel (nama kolom);

Untuk menghapus index berikut strukturnya :
DROP INDEX Nama_index;


KOLOM UNIK
Unique berfungsi untuk menjaga agar tidak terjadinya duplikasi nilai (kesamaan data) dalam sebuah kolom, hal ini dapat ditangani dengan membuat sebuah indeks unik atau fungsi unik sendiri pada kolom yang dimaksud.  Unique ini sering digunakan dalam pembuatan bukan primary key namun membutuhkan cek dupikasi agar tidak ada yang sama, karena dalam  primary key  sudah otomatis mempunyai sifat unik. Berikut Struktur SQL saat pembuatan tabel baru :
CREATE TABLE nama_tabel (nama_kolom tipe_data unique);

Ketika tabel sudah ada kita bisa menggunakan cara seperti pada BAB.2 berikut struktur SQL nya :

ALTER TABLE nama_tabel ADD UNIQUE (nama_kolom);
Untuk menghapus unique berikut caranya :
ALTER TABLE nama_table DROP CONSTRAINT NAMA_CONSTRAIN

Check
Check berfungsi untuk melakukan pembatasan nilai masukan dalam sebuah kolom, sebagai contoh misalkan kita ingin agar kolom gender yang terdiri  dari  satu karakter hanya memiliki dua pilihan karakter yaitu  M (male) atau  F  (Fimale) ini dapat kita seting dengan menggunakan CHECK. Dengan menggunakan CHECK maka sebuah kolom hanya bisa diisi dengan data yang memenuhi kriteria  dalam  CHECK. Berikut query contoh pengunaan check :
db_contoh=> CREATE TABLE pelanggan (
db_contoh(> nama varchar(35),
db_contoh(> kode_area CHAR(10) CHECK
(length(trim(kode_area)) = 2),
db_contoh(> umur INTEGER CHECK (umur >= 0),
db_contoh(> gender CHAR(1) CHECK (gender IN ('L', 'P')),
db_contoh(> ttl DATE CHECK (ttl BETWEEN '1998-01-01' AND
CURRENT_DATE),
db_contoh(> CHECK (upper(trim(nama)) != 'nita' OR
db_contoh(> upper(trim(nama)) != 'jeki')
db_contoh(> );
CREATE

Penggunaan TRIM
Suatu ketika pasti akan memiliki data yang di dalamnya terdapat spasi kosong yang tidak diperlukan, misalnya spasi ganda. Jika ada masalah seperti ini, kita dapat membersihkan spasi-spasi kosong yang tidak diperlukan menggunakan fungsi TRIM, RTRIM, dan LTRIM. Ketiga fungsi ini memiliki bentuk penggunaan sebagai berikut :
-  RTRIM : digunakan untuk membersihkan spasi kosong yang ada di bagian kanan (Right) String.
-  LTRIM : digunakan untuk membersihkan spasi kosong yang ada di bagian kiri (Left) String.
-  TRIM : digunakan untuk membersihkan spasi kosong yang ada di bagian kiri, kanan, maupun tengah String
Berikut Struktur SQL nya :
Select trim(nama_kolom) from nama_tabel;
Dalam penggunaannya, fungsi TRIM memiliki tiga opsi. Ketiga opsi ini dapat digunakan untuk menentukan  karakter apa yang akan dihapus dari suatu String. Jadi, fungsi TRIM juga dapat menghilangkan karakter tertentu (bukan spasi kosong saja) dari suatu string. Opsinya sebagai berikut :
-  LEADING  : merupakan opsi untuk menghilangkan karakter terpilih yang ada di sebelah kiri. Parameter Leading diartikan sebagai sufik dari karakter yang ada.
-  TRAILING  : merupakan opsi untuk menghilangkan karakter terpilih yang ada di sebelah kanan String. Parameter Trailing diartikan sebagai sufik dari  karakter yang ada.
-  BOTH : merupakan opsi yang dapat menangani parameter Leading maupun Trailing.
Berikut Struktur SQL nya :
Select trim(LEADING ‘karakter, misal : -’ from nama_kolom) from nama_tabel;





B. Hasil Praktikum

Setelah melakukan praktikum ke 7 ini kita dapa mengetahui tentang Sub Query dan Indeks. Kita juga telah mengerjakan beberapa soal tentang sub query dan index berikut adalah hasil praktikum kita yang di kerjakan menggunakan my SQL :

1. Menampilkan nama fakultas dan jumlah mahasiswa yang mampunyai ketentuan nama fakultas yang dimunculkan dengan jumlah mahasiswanya terkecil

ketik queri seperti berikut :



2. Menampilkan nama mahasiswa, nama fakultas, alamat dengan syarat nama fakultas sama dengan ian dan alamatnya tidak sama dengan ismail ;
masukan query seperti gambar di bawah ini :



3. Membuat index di tabel mahasiswa(alamat). Kemudian membuat lagi index yang bersifat unik pada tabel fakultas(fak_nama) kemudian amati perbedaannya ketika memasukkan data yang sama

ketikan queri seperti di bawah ini ;






dan ini ;




4. Membuat kolom nama di mahasiswa menjadi unik dan inputkan 2 data yang sama. Kemudian amati perbedaannya




5. Memindahkan data dari tabel mahasiswa, fakultas ambil kolom nim, nama mahasiswa, alamat, nama fakultas ke tabel baru yang dinamai tabel identitas‟.





6. Membuat contoh penggunaan check pada sub bab pembahasan CHECK. Kemudian masukkan beberapa data baik yang sesuai dengan criteria check maupun yang bukan dan amati perbedaannya



7. Menginput data di tabel mahasiswa dimana pada kolom nama sebelum inputkan karakter dahulukan  dengan spasi dan di akhiri dengan tanda “+” seperti berikut : “   andi cahyono++++”. kemudian munculkan seluruh data dan hilangkan spasi didepan





8. Memunculkan data mahasiswa dengan hilangkan karakter “+” di akhir data dan karakter “a” di awal kata pada kolom nama




C. Evaluasi


Dari hasil kita praktikum , menurut saya sub query dalam postgres ataupun mysql tidak jauh beda namu pada indeks terjadi beberapa perbedaan, yang mana pada penghapusan indeks di postgress dan mysql sedikit berbeda berikut dapat kita lihat perbedaannya

POSTGRESS

drop index nama_index;

MYSQL

alter table nama_table_dari_index drom index nama_index;

Dalam mysql spasi pada count () pun mempengaruhi queri.



D. Kesimpulan


Dari hasil praktikum ini dapat kita simpulkah bahwa sub query pada postgress dan my sql tak jauh beda , adapun beberapa yang dapat kita ambil garis besarnya adalah sub queri ini terdiri dari dua perintah select yang pertama disebut outer query atau disebut induk queri dan yang kedua disebut inner query, unique sendiri berfungsi agar tidak ada kesamaan data yang kita inputkan lebih mirip dengan primari keys.
 serta disini kita juga mengenal tentang check yang mana di gunakan untuk pembatasab nilai masukan dalam sebuah kolom.

E. Daftar Pustaka

Modul Praktikum Desain Basis Data 2014

Tuesday, October 28, 2014

LAPORAN 6 "NORMALISASI"

A. Landasan Teori

Memahami Normalisasi

Normalisasi merupakan suatu proses untuk mengubah suatu tabel yang memiliki masalah tertentu ke dalam dua buah  tabel  atau lebih yang tidak lagi memiliki masalah tersebut  (Abdul  Kadir,  2008). Ada juga yang berpendapat normalisasi adalah proses penyusunan tabel – tabel yang tidak redundan (dobel), yang dapat menyebabkan anomali yaitu proses basis data yang memberikan efek samping yang tidak diharapkan (Misalnya menyebabkan data tidak konsisten atau  membuat  data  hilang ketika data yang lain dihapus).
Normalisasi digunakan sebagai teknik analisis data pada database, sehingga dapat diketahui apakah pembuatan tabel – tabel yang terelasi dalam database itu sudah baik. Kondisi sudah baik yaitu suatu kondisi pada saat proses insert, update, delete dan modifikasi pada satu atau beberapa atribut suatu tabel tidak berpengaruh terhadap integritas data yang lain dalam satu hubungan relasi database.

Langkah –  langkah Normalisasi

Langkah –  langkah Normalisasi terdiri dari :

1. Unnormalization Form
Bentuk yang tidak normal dimaksudkan suatu kumpulan data yang akan diolah yang diperoleh dari format – format yang beraneka ragam, masih terdapat duplikasi,  bisa saja tidak sempurna atau tidak lengkap, dan sesuai fakta lapangan.
Bentuk ini didapat dari dokumen yang ada dilapangan atau manual dengan atribut bukan nilai sederhana.

2. First Normal Form (1NF) 
Suatu tabel dianggap normal ke satu (1NF) jika :
- Tidak terdapat baris yang bernilai ganda atau duplikat.
- Masing -  masing baris bernilai tunggal dan tidak bernilai null.
Langkah –  langkah :
- Isikan setiap data bernilai tunggal dan tidak null
- Membuang perulangan data dalam satu baris dengan baris yang lain.

3. Second Normal Form (2NF)
Bentuk normal kedua (2NF) terpenuhi jika : 
- Harus telah berbentuk normal pertama (1NF).
- pada sebuah tabel semua atribut yang tidak termasuk dalam primary key memiliki ketergantungan fungsional pada primary key secara utuh. Suatu atribut dikatakan ketergantungan fungsional jika harga pada atribut tersebut menentukan harga dari atribut yang lain. Misalnya, nim ? mhs_nama.
Langkah –  langkah :
-  Jika  terdapat atribut yang bergantung terhadap atribut bukan kunci utama dan merupakan atribut kunci maka pecah menjadi table baru.

4. Third Normal Form (3NF)
Bentuk normal ketiga (3NF) terpenuhi jika :
- Harus telah berbentuk normal kedua (2NF).
- Tidak terdapat anomali – anomali hasil dari ketergantungan transitif. 
ketergantungan transitif adalah ketergantungan fungsional antara 2 atau lebih atribut bukan kunci.
Langkah –  langkah :
- Pastikan semua atribut non kunci bergantung penuh terhadap atribut kunci.
- Pisahkan menjadi tabel baru jika menemukan ketergantungan transitif dalam tabel 
tersebut.

5. Boyce Codd Normal Form (BCNF)
Secara praktis tujuan analisis database cukup sampai pada 3NF, Akan tetapi dalam suatu kasus tertentu lebih baik bila dapat mencapat BCNF. Beberapa pemikir menyamakan antara 3NF dengan BCNF. Bentuk normal BCNF terpenuhi jika :
-  Masing-masing atribut utama bergantung fungsional penuh pada masing kunci dimana kunci tersebut bukan bagiannya.
-  Setiap determinan atribut-atribut relasi adalah kunci relasi atau kandidat kunci.
-  BCNF dapat memiliki lebih dari satu kunci.
-  BCNF hampir sama dengan 3NF atau bisa dibilang sama dengan 3NF.
Langkah –  langkah :
-  Hilangkan dependensi pada bukan kunci kandidat.

6. Fourth Normal Form (4NF)
Dilakukan jika terdapat anomali pada (3NF)

7.  Fifth Normal Form (5NF)
Langkah ini untuk memecah relasi menjadi dua sehingga relasi tersebut tidak digabungkan kembali manjadi satu dan jika terdapat anomali pada (5NF)


B. Hasil Praktikum

Pada praktikum ke 6 ini kita membahas tentang normalisasi yang mana pada pertemuan ini kita menggunakan exel untuk mengerjakan tugas pertemuan ini berikut ini adalah langkah - langkah mengerjakan normalisasi :

Soal 




Pertama - pertama kita Buka Ms.exel


1. Langkah Pertama,Melakukan tahap unnormalisasi yang mana dalam tahab ini kita menuliskan semua data dalam bentuk satu tabel.



untuk memperjelas table diatas maka saya akan membuat tabel menjadi 2 agar dapat terlihat :






2. Berikutnya kita akan melakukan tahap First Normal Form (1NF) yaitu dalam tahab ini kita 

akan mengisikan data yang bukan null. seperti pada kolom nama, tanggal dll.



agar dapat dilihat dengan jelas maka tabel saya bagi menjadi 2 :





3. Tahap ketiga kita melakukan Second Normal Form (2NF) pada langkah ini kita memisah tabel secara global.



Dari gambar diatas dapat dilihat dengan jelas dengan gambar per sub table berikut :







4. Langkah ke empat adalah Third Normal Form (3NF) tahap ini kita memisahkan tabel- tabel yang tidak terdapat anomali - anomali hasil ketergantungan tansitif dan ketergantungan fungsional. Dalam hal ini kita juga akan menentukan primary key serta foregn key.



Lihat gambar di bawah ini, sub tabel dari tahab 3NF








5. Pada point akhir ini kita membuat sebuah ERD dari tabel tabel diatas seperti gambar di bawah ini :




C Kesimpulan

Dari hasil praktikum 6 tentang Normalisasi kita dapat menyimpulkan bahwa normalisasi dapat berguna untuk memecah kerancuan dalam suatu tabel . Yang mana dengan tujuan untuk memudahkan jika ada penambahan data , perubahan data , dan penghapusan Data.

D. Daftar Pustaka

Modul Praktikum Desain Basis Data 2014

Sunday, October 19, 2014

LAPORAN PRAKTIKUM V AGREGASI SQL DAN VIEW

I. Landasan Teori
A. AGREGATE OPERATOR
Fungsi aggregate atau disebut fungsi ringkasan digunakan untuk melakukan penghitungan menjadi  sebuah  nilai  dari  beberapa  nilai  input.  Aggregate  dapat
digabungkan dengan sebuah parameter  seperti  WHERE  untuk  menghasilkan suatu hasil yang lebih kompleks lagi. Adapun fungsi  agregate  yang  disediakan  oleh
PostgreSQL dapat dilihat pada tabel berikut :




B. GROUP BY
Group By merupakan fungsi yang digunakan untuk melakukan pengelompokan dari perintah SELECT. Group by seringkali diperlukan untuk menjalankan agregate menjadi sebuah kelompok dari hasil Query. Berikut struktur SQL untuk penampilan data :
select nama_kolom from nama_tabel group by nama_kolom;


C. HAVING
Pemakaian HAVING terkait dengan GROUP BY, kegunaanya adalah untuk menentukan kondisi bagi GROUP BY, dimana kelompok yang memenuhi kondisi saja yang akan di hasilkan.
Berikut Struktur yang digunakan :


D. CASE
Meskipun SQL bukan merupakan sebuah prosedur bahasa perograman, namun dalam prosesnya dapat dengan bebas mengontrol data yang kembali dari query. Kata WHERE menggunakan perbandingan untuk mengontrol pemilihan data, sedangkan CASE perbandingan dalam bentuk output kolom. Jadi intinya penggunaan CASE akan membentuk output tersendiri berupa sebuah kolom baru dengan data dari operasi yang di dalamnya.Struktur didalam select seperti berikut :
CASE WHEN condition THEN result
[WHEN ...]
[ELSE result] END



E. VIEW
Views dapat juga disebut tabel bayangan tetapi bukan temporary table, bukan juga merupakan sebuah tabel yang asli.  Suatu view adalah suatu relasi virtual yang tidak perlu ada database tetapi dapat diproduksi atas permintaan oleh pemakai tertentu, pada ketika permintaan. Satu lagi kelebihan yang dimiliki oleh view yaitu dapat menyimpan perintah query, dan dapat mewakili sebuah subset dari tabel asli dan memilih kolom atau row tertentu dari tabel biasa.
create view nama_tabel_view as query;


II. Hasil Praktikum

Dari praktikum ke lima kemarin kita dapat mengetahui tentang "Agresi SQL dan VIEw" yang ada pada progesmysql. Namum pada laporan kali ini kita akan membahasnya dalam DBMS Mysql berikut beberapa queri yang telah saya pelajari :

1. Menampilkan nim mahasiswa yang paling kecil, paling besar dan rata-ratanya dari tabel mahasiswa yang  telah kita buat .


 berikut adalah queri - queri untuk menampilkan nilai minimal,nilai maksimal serta rata - ratanya.

 select min(nim_mah) from mahasiswa;
 select max(nim_mah) from mahasiswa;
 select avg(nim_mah) from mahasiswa;


2. Kemudian kita akan menampilkan rata-rata nim mahasiswa yang data nimnya lebih dari 12.
berikut queri dari langkah no 2 :
    select avg(nim_mah) from mahasiswa where nim_mah > 12;




3. Menampilkan jumlah mahasiswa berdasarkan fakultas.
queri dari langkah diatas yaitu seperti ini :
 select nama_fak as nama_fakultas,count(*) from mahasiswa,fakultas where mahasiswa.id_fak=fakultas.id_fak group by nama_fak;



4. Langkah ke empat menampilkan seperti nomor 3 dengan persyaratan jumlah mahasiswa yang lebih dari   sama dengan 2 saja yang ditampilkan.

 select nama_fak as nama_fakultas,count(*) from mahasiswa,fakultas where mahasiswa.id_fak=fakultas.id_fak group by nama_fak;




karena data minimun jumlah fakultas 2 maka tampilannya seperti gambar no 3

5. Menampilkan  data  mahasiswa  dengan  persyaratan, jika jenis kelaminnya “L” maka tertulis laki-laki dan bila “P” maka tertulis perempuan.

 select*,case when gender='L' then 'laki-laki' else 'perempuan'end as jenis_kelamin from mahasiswa ;



6. Membuat view untuk query penampilan data mahasiswa, fakultas.Yang mengambil berdasarkan nim, nama mahasiswa, nama fakultas.

create view baru as select nim_mah as NIM,nama_mah as Nama,nama_fak as Fakultas from mahasiswa,fakultas where mahasiswa.id_fak=fakultas.id_fak;
select*from baru;




C. PERBANDINGAN DBMS

Secara garis besar diantara kedua DBMS ini memiliki query yang sama, kecuali beberapa uraian di bawah ini :
- PostgresSQL
Perbedaan :
1. Pada fungsi agregasi, seperti untuk mencari rata – rata, struktur query-nya kita boleh atau tidak ada spasi setelah query avg.

- MySQL

Perbedaan :
1. Pada fungsi agregasi, seperti untuk mencari rata – rata, struktur query-nya kita tidak boleh ada spasi setelah query avg. jika ada maka hasilnya akan error.



D. KESIMPULAN

Dari hasil praktikum yang telah kita pelajari pada pertmuan ke 5 ini. Maka dapat disimpulkan bahwa secara garis besar Query-query untuk membuat yang terdapat di DBMS PostgresSQL maupun MySQL tidak jauh berbeda. Dan dengan adanya fungsi view ini maka akan lebih memudahkan kita jika ingin menampilkan tabel berulang-ulang maka tanpa harus membuat query yang panjang.
Demikian laporan praktikum yang dapat saya utarakan semoga bermanfaat khususnya untuk saya dan umumnya untuk yang membaca blog ini terimakasih.

E. DAFTAR PUSTAKA

Modul Praktikum Desain Basis Data 2014.pdf


Saturday, October 11, 2014

Laporan Desain Basis Data 4


Laporan Praktikum 4
“Pengenalan Operator Dasar”

A.    Dasar Teori

·         AS
AS biasa digunakan untuk menampilkan label kolom dengan  nama lain sehingga yang akan muncul dalam hasil query bukan nama asli kolom, tetapi  nama yang mungkin lebih sesuai dan mudah dimengerti. AS digunakan setelah nama kolom  yang akan diganti yang kemudian diikuti dengan nama penggantinya.  Berikut struktur querynya :
select namakolom as namakolompengganti from namatabel;
Contoh :


·         AND dan OR
Pada  bagian  sebelumnya  kita  menggunakan  anak  kalimat  atau  sintaks  WHERE hanya  pada  konteks  yang  sederhana.  Berikut  ini  kita  akan  mencoba  menggunakan WHERE  untuk  konteks  yang  lebih  kompleks  lagi,  anak  kalimat  where  yang  kompleks akan  bekerja dengan  baik dengan  menggunakan  kata  AND  dan  OR.  SQL menggunakan standar logika boolean three-valued seperti pada tabel berikut ;

Berikut struktur SQL untuk penampilan data  ;
select * from namatabel  where namakolom = ‘pencarian 1’ and namakolom = ‘pencarian 2’;
Atau
select * from namatabel  where namakolom  = ‘pencarian 1’  or namakolom = ‘pencarian 2’;

Contoh :

·         BETWEEN
BETWEEN  digunakan untuk menentukan  lebar nilai dari  nilai terendah dan nilai tertinggi. Pada BETWEEN menggunakan operator pembanding seperti pada tabel berikut;
Logika operator BETWEEN sebagai berikut :
ร˜  Nilai a dalam formula “a BETWEEN x AND y” indentik dengan “a >= x AND a <= y“
ร˜   “a NOT BETWEEN x AND y “ identik dengan “a < x OR a > y”
Berikut Struktur yang digunakan :
select  *  from  nama_tabel  where  nama_kolom  between  ‘nilai_awal’  and ‘nilai_akhir’;
Contoh  :  Memunculkan  data  pegawai  dimana  tanggal  lahirnya  antara  tanggal  9 -9-1999 sampai 1-1-2001.
·      IN dan NOT IN
         Operator  IN  berguna  melakukan  pencocokan  dengan  salah  satu  yang ada pada suatu daftar nilai. Berikut Struktur yang digunakan
select  *  from  nama_tabel  where  in  (kata_kunci1,  kata_kunci2, kata_kunci13, kata_kunci14);
Contoh : menampilkan data pegawai yang memiliki ip 1,2, dan 3


·      LIKE
LIKE digunakan ketika kita ingin mencari sebuah data yang hanya diwakili oleh salah  satu  atau  lebih  hurufnya  saja.  Misalkan  kita  ingin  mencari  nama  yang  huruf awalnya  R,  maka  kita  harus  menggunakan  LIKE.  Berikut  adalah  tabel  contoh  kasus penggunaan LIKE :

Berikut struktur SQL untuk pencarian data menggunakan LIKE :
select * from nama_tabel where nama_kolom like  ‘operator’;
Contoh : Mencari data pegawai yang mempunyai nama dengan huruf awalan r.

·      REGEXP
Regular  Expression  atau  Regex,  merupakan  sebuah  teknik  atau  cara  untuk mencari persamaan - presamaan string atau data dan memanipulasinya. Biasanya lebih sering digunakan untuk string. Didalam PostgreSQL disimbolkan dengan “~”. Berikut tabel daftar simbol pada reguler expression :

Berikut struktur SQL untuk pencarian data menggunakan REGEXP :select  *  from  nama_tabel  where  nama_kolom  ~  ‘operator_regexp dan patern’;
Contoh :


·      DISTINCT
DISTINCT  sering  kali  diperlukan  untuk  mengembalikan  hasil  dari  sebuah query  dengan  tidak  terdapat  duplikasi,  artinya  pada  hasil  outputnya  tidak  terjadi kesamaan data meskipun pada data sesungguhnya sangat mungkin banyak duplikasi. Hal ini juga berlaku jika data yang ada dalam bentuk angka. Berikut struktur perintah dasar SQL :
select distinct nama_kolom from nama_tabel;
Contoh :


·      LIMIT
LIMIT  dan  OFFSET  digunakan  untuk  membatasi  jumlah  output  dari  query berdasarkan jumlah row bukan karena kondisi seperti WHERE. Bisa dikatakan LIMIT adalah untuk menentukan jumlah baris yang akan ditampilkan yang dihitung dari baris pertama, sedangkan  OFFSET  digunakan  untuk  menghilangkan  baris  sesuai  dengan jumlah yang diberikan pada OFFSET. Berikut struktur perintah dasar SQL :
select * from nama_tabel limit 2;
Atau
select * from nama_tabel offset 2;
Contoh :

·      UNION, EXCEPT dan INTERSECT
Hasil  dari  dua  buah  query  dapat  dikombinasikan  dengan  menggunakan UNION,  EXCEPT  atau  INTERSECT.  UNION  digunakan  untuk  menggabungkan hasil dua buah query menjadi satu kolom. Berikut struktur query untuk UNION :
select  nama_kolom  from  nama_tabel  union  select  nama_kolom  from nama_tabel;
atau
select  nama_kolom  from  nama_tabel  union  all  select  nama_kolom  from nama_tabel;
EXCEPT digunakan untuk menampilkan hanya query pertama saja, sedangkan hasil query kedua dan yang sama dengan hasil query kedua tidak akan ditampilkan.Berikut struktur query penggunaan EXCEPT :
select  nama_kolom  from  nama_tabel  except  select  nama_kolom  from nama_tabel;
Perintah  INTERSECT  hanya  akan  menampilkan  seluruh  isi  dari  data yangmemiliki  kesaman  diantara  hasil  kedua  query  tersebut .  Berikut  struktur  query penggunaan INTERSECT :
select  nama_kolom  from  nama_tabel  except  select  nama_kolom  from nama_tabel;
Contoh :


A.    Hasil Praktikum menggunakan Mysql
Sebelum kita menyelesaikan soal – soal dalam praktikum ke empat ini mari kita  Gunakan  tabel  mahasiswa  dan  fakultas  pada  pertemuan  3. Tambahkan kolom gender di tabel mahasiswa kemudian update data mahasiswa.  Insert  data mahasiswa hingga 7 baris.
ร˜  Langkah pertama kita memakai database praktikum 3 dimana telah terdapat tabel fakultas & tabel mahasiswa.
ร˜  Tambahkan data fakultas ‘saintek’ dan ‘ekonomi’ pada tabel fakultas
insert into fakultas values (1,'saintek'),(2,’ekonomi’);

ร˜  Tambahkan data mahasiswa menjadi 7 mahasiswa dengan menambahkan kolom gender pada data sebelumnya.
alter table mahasiswa add column gender varchar (1);
update mahasiswa set gender=’L’ where nim_mah=14;



select into mahasiswa values (11,’binta’,’jakarta’,2,08564732345,’P’), (12,’ismail’,’bojonegoro’,1,085655333232,’L’),(13,’pipit’,’jombang’,3,085733235721,’P’),(15,’arin’,’lamongan’,2,0847306926804,’P’), (17,’fatah’,’tuban’,2,085706234534,’L’);




Soal
1.      Menampilkan data mahasiswa dengan nama dari kolomnya berubah menjadi  nomor_identitas, nama, alamat,nama_fakultas  tanpa harus merubah nama kolom secara permanen.
select nim_mah as nomor_identitas,nama_mah as nama,alamat_mah as alamat,nama_fak as nama_fakultas from mahasiswa,fakultas where mahasiswa.id_fak=fakultas.id_fak;


2.      Tampilkan  nama  mahasiswa  fakultas  saintek  yang  berjenis  kelamin  laki-laki.Kemudian nama mahasiswa fakultas saintek atau berjenis kelamin laki-laki.
select nama_mah from mahasiswa where id_fak=2 and gender='L';


select nama_mah from mahasiswa where id_fak=2 or gender='L';


3.      Menampilkan data mahasiswa dari nomor 13 sampai dengan 15, kemudian tampilkan juga data mahasiswa yang bukan dari  nomor 13 sampai  dengan 15 menggunakan  between  dan  tanpa  menggunakan between.
select * from mahasiswa where nim_mah between '13' and '15';



select * from mahasiswa where nim_mah not between '13' and '15';

select * from mahasiswa where nim_mah >= '13' and nim_mah <='15';

select *from mahasiswa where nim_mah < '13' or nim_mah >'15';


4.      Menampilkan mahasiswa dengan nomor 12,13,15 menggunakan operator IN.
select* from mahasiswa where nim_mah in(12,13,15);




5.      Menampilkan semua data mahasiswa yang namanya mempunyai awalan huruf “a”.
select* from mahasiswa where nama_mah like'a%';



6.      Tampilkan semua data mahasiswa yang namanya mempunyai akhiran “a” dan huruf ke-3 dari nama tersebut terdapat huruf “n”.
select* from mahasiswa where nama_mah like'__n%a';


7.      Tampilkan  nomor  fakultas  di  tabel mahasiswa dengan  nomor  harus  tidak  ada  yang sama dari baris pertama sampai akhir.
select distinct id_fak from mahasiswa;


8.      Tampilkan data mahasiswa 3 baris saja.
select * from mahasiswa limit 3;


9.      Tampilkan data mahasiswa dengan ciri-ciri memiliki nama awalan a kemudian kata selanjutnya boleh r atau boleh n atau boleh i.
select * from mahasiswa where nama_mah regexp ~'a[rni]';


10.  Membuat tabel dengan organ_dalam dan organ_luar.
create table organ_dalam(nomor int primary key,nama varchar (20));
create table organ_luar(nomor int primary key,nama varchar (20));



insertinto organ_dalam values(1,'jantung'),(2,'paru-paru'), ('tenggorokan'); 
insert into organ_luar values(1,'hidung'),(2,'mata'),(3,'tenggokan');


Menampilkan data dari kedua tabel tersebut menggunakan UNION, EXCEPT  dan INTERSECT.

a.       Union
select*from organ_dalam union select * from organ_luar;


b.      Except / not in
select*from organ_dalam where nama not in (select nama from organ_luar);




c.       Intersect/in
select*from organ_dalam where nama in (select nama from organ_luar);



C. Perbandingan ProgresmySql dan DBMSMySqlDalam beberapa operator keduanya mempunyai query yang sangat mirip bahkan sama persis, seperti pada AND,OR,AS,BEETWEN,LIMIT,IN,DISTINCT,LIKE. Tetapi keduanya memiliki perbedaan kecil ketika REGEXP,INTERSECT, dan EXCEPT. Dan berikut hasil evaluasi saya setelah praktikum dan mencoba keduanya
Postgresql
Kelebihan
·         Querynya lebih mudah dimengert,terdapat fungsi UNION,EXCEPT dan INTERSECT sendiri 
    PostgreSQL terkenal akan fitur-fitur yang disediakannya, di mana telah diketahui sejak dulu bahwa PostgreSQL mempunyai sekumpulan fitur yang kaya dan lengkap, yang mendukung transaksi, view, subselect, foreign key support, pemeriksaan, dan lain-lain. Akan tetapi PostgreSQL selama ini telah banyak memberikan keuntungan yang lebih terhadap para perusahaan atau kegiatan bisnis yang menggunakan database system ini dari pada dengan database system yang lainnya.
     Untuk menggunakan data base dan tabel query pada postgresql lebih mudah dan singkat
     Untuk mengoneksikan dan menampilkan database serta tabel dengan query lebih mudah






Kekurangan

Kurang fokus dalam hal kelangsingan dan kecepatan. arsitektur dengan multiproses ini sulit diterapkan ke Windows, sebab Windows amat thread-oriented.
•Tidak dapat mengetahui jika ada kesalahan query

·         
Mysql

Kelebihan
·         Menggunakan bahasa yang lebih manusiawi yaitu ketika menggunakan REGEXP simbol ~ digantikan dengan tulisan REGEXP
Kekurangan
· Tapi imbas digantinya simbol dengan tulisan querynya menjadi lebih panjang
· Dan Mysql tidak mempunyai fungsi EXCEPT dan INTERSECT sendiri tapi kita bisa mengakalinya dengan menggunakan cara lain yaitu dengan fungsi IN

D.  Kesimpulan
            Kesimpulan seperti yang telah dijelaskan diatas bahwa fungsi beberapa operator dasar sql adalah sebagai berikut
AS     :  Digunakan untuk menampilkan label kolom dengan nama lain sehingga yang akan muncul dalam hasil query bukan nama asli kolom.
AND dan OR    : Pengembangan dari fungsi WHERE.
BEETWEN    : Untuk menampilkan data yang ada diantara dua nilai.
IN    : Melakukan pencocokan dengan salah satu yang ada pada suatu daftar nilai.
LIKE    : Untuk mencari sebuah data yang hanya diwakili oleh salah satu atau lebih hurufnya saja.
REGEXP   : Teknik atau cara untuk mencari persamaan - presamaan string atau data dan memanipulasinya
DISTINCT     : Untuk mengembalikan hasil dari sebuah query dengan tidak terdapat duplikasi.
LIMIT  : Untuk menentukan jumlah baris yang akan ditampilkan yang dihitung dari baris pertama.
OFFSET   : Untuk menghilangkan baris sesuai dengan jumlah yang diberikan pada       OFFSET.
UNION    : Untuk menggabungkan hasil dua buah query menjadi satu kolom.
EXCEPT   : Untuk menampilkan hanya query pertama saja
INTERSECT  : Menampilkan seluruh isi dari data yangmemiliki kesaman

E. Daftar Pustaka
Modul Praktikum Desain Basis Data 2014