Copyright © Data Nyamana
Design by Dzignine
Friday 16 November 2012

Pemrosesan Query dalam SBD

Dalam berinteraksi dengan basis data, kita memerlukan bahasa yang  tidak hanya dimengerti oleh manusia tetapi juga dimengerti oleh basis data itu sendiri. Dengan demikian komunikasi antara manusia dan basis data dapat berjalan dengan lancar tanpa masalah. Untuk itulah diciptakan bahasa khusus untuk memudahkan manusia dalam mengakses dan berinteraksi dengan basis data. Bahasa tersebut dikenal dengan Bahasa Query.

Bahasa query adalah bahasa yang digunakan dalam pemrosesan query. Sebelum ada bahasa query, pemrosesan query adalah tugas yang sangat rumit untuk dilakukan, karena manusia harus berurusan langsung dengan skema fisik basis data.

Contoh dari bahasa query ini yaitu bahasa SQL. Dalam bahasa SQL kita hanya perlu menyebutkan properti data yang ingin kita ambil. Hal ini berbeda dengan bahasa pemrograman konvensional yang juga mengharuskan user untuk mendefinisikan cara pengambilan datanya.

Bahasa query secara umum dibagi menjadi dua kategori, yaitu:
  • Bahasa Query Prosedural
  • Bahasa Query Non Prosedural
Bahasa Query Prosedural
User memberi perintah kepada sistem agar melakukan serangkaian operasi dalam basis data untuk menampilkan hasil yang diinginkan. Contohnya adalah Aljabar Relasional.

Bahasa Query Non Prosedural
User mendefinisikan informasi yang diinginkan tanpa menyebutkan prosedur yang dilakukan untuk mengasilkan informasi tersebut. Contohnya yaitu Kalkulus Relasional Tuple.

Aljabar Relasional



Aljabar relasional merupakan sekumpulan operasi terhadap suatu relasi dimana setiap operasi yang dilakukan menggunakan satu atau lebih relasi untuk menghasilkan satu relasi yang baru.

Aljabar relasional termasuk bahasa query prosedural dan juga menyediakan seperangkat operator untuk memanipulasi data.

Operasi Dasar Aljabar Relasional
  • Selection ( σ )
  • Projection ( π )
  • Cartesian-product ( x )
  • Union ( ∪ )
  • Set-difference ( − )
  • Rename ( ρ )
Operasi Turunan Aljabar Relasional
  • Set-intersection ( ∩ )
  • Theta join ( θ )
  • Natural join ( )
  • Outer join ( )
  • Division ( ÷ )
Operasi-operasi pada Aljabar Relasional


Semua operasi tersebut menghasilkan relasi baru. Bahasa disebut aljabar relasional karena bahasa berdasar sejumlah operator yang beroperasi pada relasi – relasi (tabel – tabel). Masing – masing operator beroperasi pada satu relasi atau lebih atau menghasilkan relasi – relasi lain sebagai hasil. Query adalah sekedar ekspresi yang melibatkan operator – operator itu. Hasil ekspresi adalah relasi yaitu jawaban terhadap query.

SQL adalah bahasa yang deklaratif yang berarti tidak menspesifikasikan algoritma yang digunakan untuk pengolahan query. Ekspresi relasional dapat dipandang sebagai spesifikasi algoritma (meskipun dalam level lebih tinggi dibanding algoritma untuk bahasa pemrograman konvensional).

Operasi Dasar Aljabar Relasional


Selection ( σ )

Selection / select adalah operasi untu menyeleksi tuple-tuple yang memenuhi suatu predikat, kita dapat menggunakan operator perbandingan (<, >, >=, <=, =, #) pada predikat. Beberapa predikat dapat dikombinasikan menjadi predikat majemuk menggunakan penghubung AND ( ∧ ) dan OR ( ∨ ).

Syntaxnya adalah sebagai berikut:
σ kolom = 'nilai' (Tabel)

Contoh:
  1. Query: Tampilkan daftar dosen yang tempat lahirnya di 'Jakarta' atau 'Bogor'

  2. Aljabar Relasional:
  3. σ tempat_lhr = 'Jakarta' ∨ tempat_lhr = 'Bogor' (dosen)

  4. Hasilnya:
  5. klik untuk memperbesar

Projection ( π )

Projection / project adalah operasi untuk mendapatkan kolom-kolom tertentu. Operasi project adalah operasi unary yang mengirim relasi argumen dengan kolom-kolom tertentu. Duplikasi baris dalam relasi yang diminta juga akan dihilangkan.

Syntaxnya adalah sebagai berikut:
π kolom1, kolom2, …, kolomn (Tabel)

Contoh:
  1. Query: Tampilkan nid, nama_d, kota dari relasi Dosen

  2. Aljabar Relasional:
  3. π nid, nama_d, alamat, kota (Dosen)

  4. Hasilnya:

Cartesian-product ( x )

Cartesian-product adalah operasi untuk menghasilkan tabel hasil perkalian kartesian. Operasi cartesian-product memungkinkan kita mengkombinasikan informasi beberapa relasi. Dalam operasi ini kita harus memilih atribut-atribut untuk relasi yang dihasilkan dari cartesian-product..

Syntaxnya adalah sebagai berikut:
R X S = { (x,y) | x∈R dan y∈S }

Contoh:
  1. Query: Tampilkan nid, nama_d (dari relasi Dosen), nama_mk (dari relasi Matakuliah), thn_akademik, smt, hari, jam_ke, waktu, kelas (dari relasi Mengajar) dimana semester mengajar adalah semester '1'.

  2. Aljabar Relasional:
  3. π nid, nama_d, nama_mk, thn_akademik, smt, hari, jam_ke, waktu, kelas
    (σ smt = 1 ∧ Dosen.nid = Mengajar.nid
    ∧ Mengajar.kdmk = Matakuliah.kdmk (Dosen X Matakuliah X Mengajar))

  4. Hasilnya:
  5. klik untuk memperbesar

Union ( ∪ )

Union adalah operasi untuk menghilangkan gabungan tabel dengan syarat kedua tabel memiliki atribut yang sama, sehingga jumlah komponennya sama..

Syntaxnya adalah sebagai berikut:
R ∪ S = { x | x∈R atau x∈S }

Contoh:
  1. Query: Tampilkan nid (dari relasi Dosen) Union dari nid (dari relasi Mengajar).

  2. Aljabar Relasional:
  3. π nid (Dosen) ∪ nid (Mengajar)

  4. Hasilnya:

Set-difference ( − )

Set-difference adalah operasi untuk mendapatkan tabel pada suatu relasi, tapi tidak ada pada relasi yang lainnya. Operasi ini dapat dilakukan apabila tabel R dan tabel S memiliki atribut yang tidak sama yang akan ditampilkan. Artinya adalah atribut R yang tidak ada di S aka ditampilkan, sedangkan atribut yang sama tidak ditampilkan..

Syntaxnya adalah sebagai berikut:
R − S = { x | x∈R atau x∉S }

Contoh:
  1. Query: Tampilkan nid (dari relasi Dosen) Set-difference dari nid (dari relasi Mengajar).

  2. Aljabar Relasional:
  3. π nid (Dosen) − nid (Mengajar)

  4. Hasilnya:

Rename ( ρ )

Rename adalah operasi untuk menyalin tabel lama ke dalam tabel yang baru..

Syntaxnya adalah sebagai berikut:
ρ [nama tabel baru](nama tabel lama)

Contoh:
  1. Query: Salinlah tabel baru dengan nama DosenNew dari tabel Dosen, dimana jenis kelaminnya adalah 'Pria'.

  2. Aljabar Relasional:
  3. ρ DosenNew ( σ jkelamin = 'Pria' (Dosen))

  4. Hasilnya:
  5. klik untuk memperbesar

Operasi Turunan Aljabar Relasional


Set-intersection ( ∩ )

Set-intersection termasuk kedalam operator tambahan, karena operator ini dapat didapatkan dari operator dasar seperti berikut:

A ∩ B = (A − (A − B) atau A ∩ B = B − (B − A)

Operasi ini merupakan operasi binary, yang digunakan untuk membentuk sebuah relasi baru dengan tuple yang berasal dari kedua relasi yang dihubungkan.

Contoh:
  1. Query: Tampilkan nid (dari relasi Dosen) Set-intersection dari nid (dari relasi Mengajar).

  2. Aljabar Relasional:
  3. π nid (Dosen) ∩ nid (Mengajar)

  4. Hasilnya:

Theta-join ( θ )

Theta-join ( θ ) dan equi-join ( ) adalah operasi untuk menggabungkan operasi selection dan cartesian-product dengan suatu kriteria.

Contoh:
  1. Query: Tampilkan seluruh data yang ada pada relasi Matakuliah dan relasi Mengajar.

  2. Aljabar Relasional:
  3. Matakuliah Mengajar.kdmk = Matakuliah.kdmk Mengajar

  4. Hasilnya:
  5. klik untuk memperbesar

Natural-join ( )

Natural-join ( ) sama seperti operasi theta-join / equi-join, yaitu operasi untuk menggabungkan operasi selection dan cartesian-product dengan suatu kriteria pada kolom yang sama.

Contoh:
  1. Query: Tampilkan seluruh data yang ada pada relasi Matakuliah dan relasi Mengajar.

  2. Aljabar Relasional:
  3. Matakuliah Mengajar.kdmk = Matakuliah.kdmk Mengajar

  4. Hasilnya:
  5. klik untuk memperbesar

Outer-join ( )

Outer-join adalah operasi untuk menggabungkan operasi selection dan cartesian-product dengan suatu kriteria pada kolom yang sama.

Contoh:
  1. Query: Tampilkan nid, nama_d (dari relasi Dosen) dan thn_akademik, smt, hari, jam_ke, waktu, (dari relasi Mengajar) dengan outer-join. Artinya adalah pada kolom nid, nama_d pada relasi Dosen akan ditampilkan walaupun dosen tersebut tidak melakukan transaksi mengajar.

  2. Aljabar Relasional:
  3. π nid, nama_d (Dosen) π thn_akademik, smt, hari, jam_ke, waktu (Mengajar)

  4. Hasilnya:
  5. klik untuk memperbesar

Division ( ÷ )

Division adalah operasi yang banyak digunakan dalam query yang mencakup frase "setiap" atau "untuk semua", operasi ini juga merupakan pembagian atas tuple-tuple dari dua relasi.

Contoh:
  1. Query: Tampilkan nid, hari, waktu, (dari relasi Mengajar) dan nid (dari relasi Dosen) dimana dosen yang jenis kelaminnya 'Pria' dan lakikan division pada kedua relasi tersebut.

  2. Aljabar Relasional:
  3. ( π nid, hari, waktu (Mengajar)) ÷ ( π nid (σ jkelamin = 'Pria' (Dosen)))

  4. Hasilnya:
  5. π nid, hari, waktu (Mengajar)

    π nid (σ jkelamin = 'Pria' (Dosen))

    Hasil Akhir:


Kalkulus Relasional



Pada bahasa query kalkulus relasional, pemakai mendiskripsikan informasi yang dikehendaki tanpa memberikan prosedur (deret operasi) spesifik untuk memperoleh informasi. Bahasa kalkulus relasional diekspresikan dengan menspesifikasikan predikat terhadap tuple atau domain yang harus dipenuhi.

Kalkulus relasional dibagi menjadi 2 (dua) yaitu:
  1. Kalkulus Relasional Tuple
  2. Kalkulus Relasional Domain

Kalkulus Relasional Tuple


Konsep dasar kalkulus relasional tupel adalah konsep variable tupel. Variable ini merepresentasikan tupel – tupel pada relasi dan digunakan untuk mengekstrak data dari relasi. Komponen - komponen lain rumus kalkulus tupel adalah kualifikasi data dengan membatasi nilai – nilai dari atribut – atribut yang dispesifikasikan.

Query pada kalkulus relasional tupel dapat diekspresikan dengan:

{ t | P(t) }

yaitu himpunan semua tupel t sehingga predikat P bernilai True untuk t, notasi t[A] untuk menunjukkan nilai tuple t pada atribut A. dan menggunakan t∈r untuk menunjukkan nilai tupel t di relasi r. predikat P adalah berupa rumus, beberapa variable tupel dapat muncul di rumus. Variable tupel dikatakan variable bebas kecuali dikuantifikasi ∃ atau ∀.

r ∈ R ∧ ∃s ∈ S ( r[a] = S[a] )

Dengan t adalah variable bebas, variable tupel s dikatakan sebagai variable terikat.

Bentuk umum dari kalkulus relasional tupel adalah:

TupleVariablei operator [TupleVariable | constant]

Dimana:

TupleVariablei adalah variable tupel dimana i = 1 sampai n variable tupel.
Operator adalah +, >, <, >=, <=, <>
Constant adalah sembarang nilai numerik atau string.


Konstrain yang berlaku adalah variable – variable tupel  dan konstanta harus mempunyai domain yang sama antara bagian kiri operator dan bagian kanan operator. Rumus kalkulus relasional tupel juga dapat dikoneksikan operator boolean AND, OR, dan NOT.

Contoh:
  • Cari semua nid, nama_d, gajipokok dari semua dari semua dosen yang gaji pokoknya > 1000000:

  • { D.nid \ D.nama_d \ D.gajipokok > 1000000 } dimana D ∈ Dosen.

  • Cari semua nid, nama_d dari semua dosen yang mengajar pada tahun akademik 2004 dan semester 1:

  • { D.nid \ D.nama_d \ M.thn_akademik = 2004 ∧ semester = 1 ∧ Dosen.nid = Mengajar.nid }

Kalkulus Relasional Domain


Kalkulus relasional domain menggunakan variable – variable pada nilai - nilai domain atribut, bukan nilai – nilai untuk sebuah tupel. Ekspresi pada kalkulus relasional domain berbentuk:

{ < X1, X2, …, Xn > | P ( X1, X2 …, X) }

Dimana:
  • X1, X2, …,Xn menyatakan variable – variable domain.

  • P menyatakan rumus – rumus yang disusun dari atom – atom sebagaimana pada kalkulus relasional tupel.
Contoh:
  • Cari nip, nama_d, gajipokok daridosen, dimana jenis kelaminnya adalah Pria dan gaji pokoknya lebih besar 1200000

{ nip | ∃ nama_d | ∃ gajipokok ( Dosen( nid, nama_d, gajipokok ) AND jkelamin = ’Pria’ AND gajipokok > 1200000 ) }


2 comments: