Pertemuan 4 - Aljabar Relasional dan Optimasi Query
ALJABAR RELATIONAL
Aljabar relasional adalah sebuah bahasa
query prosedural yang terdiri dari sekumpulan operasi dimana masukkannya adalah
satu atau dua relasi dan keluarannya adalah sebuah relasi baru sebagai hasil
dari operasi tersebut.
Berikut ini adalah contoh dari suatu desain
database sebuah universitas yang terdiri dari 3 table yaitu: tabel mhs, tabel
mhs2, dan tabel nilai.
OPERASI DENGAN 1 TABEL
Select (σ)Operasi
select berfungsi untuk menyeleksi tuple-tuple yang memenuhi predikat yang
diberikan dari sebuah tabel relasi. Simbol sigma “σ” digunakan untuk
menunjukkan operasi select. Predikat muncul sebagai subscript dari σ dan
kondisi yang diinginkan yang ditulis dalam predikat. Argumen diberikan dalam
tanda kurung yang mengikuti σ dan berisi tabel relasi yang dimaksud.Ex. Dari tabel mhs kita pilih mahasiswa yang kurang dari
semester 8σ semester < 8 (mhs)Select
* from MHS where semester < 8
Project (p)
Operasi project berfungsi untuk memilih nilai
atribut-atribut tertentu saja dari sebuah tabel relasi. Simbol phi “p”
digunakan untuk menunjukkan operasi project. Predikat muncul sebagai subscript
dari p
dan hanya nama atribut yang diinginkan yang ditulis dalam predikat. Argumen
diberikan dalam tanda kurung yang mengikuti p dan
berisi tabel relasi yang dimaksud.Ex. Dari tabel mhs kita akan menampilkan mahasiswa yang
ipknya lebih dari 2,50 dan semesternya kurang dari 10.p nama (σ
ipk > 2,50 ᴠ semester < 10 (mhs))
Nah, terlihat kan perbedaan antara select dan project ?? Yupp, kalo select menampilkan semua atribut dari satu atau beberapa baris yang memenuhi kondisi. Sedangkan project, hanya menampilkan satu kolom atau atribut saja yang sesuai kondisi.
OPERASI DENGAN 2 TABEL
Union (∪)
Operasi union berfungsi untuk mendapatkan
gabungan nilai atribut dari sebuah tabel relasi dengan nilai atribut dari tabel
relasi lainnya, namun jika terdapat dua nilai yang sama makan diambil salah
satunya saja. Simbol “∪” digunakan untuk menunjukkan operasi union.
Operasi union bernilai benar bila terpenuhi 2 kondisi, yaitu : Derajat dari 2
tabel relasi yang dioperasikan harus sama dan domain dari atribut yang
dioperasikan juga harus sama.
Ex. Tabel mhs union dengan tabel mhs2
mhs ∪ mhs2
Select
* from mhs union select * from mhs2
Intersection (∩)
Operasi set intersection berfungsi untuk
mendapatkan nilai yang sama yang ada dalam sebuah tabel relasi dan juga ada
dalam tabel relasi lainnya. Simbol “∩“ digunakan untuk menunjukkan operasi set
intersection.
Ex. Tabel mhs intersection dengan tabel mhs2
mhs ∩ mhs2
Select
* from mhs intersection select * from mhs2
Set Difference (-)
Operasi set difference berfungsi untuk
mendapatkan nilai yang ada dalam sebuah tabel relasi, tapi tidak ada dalam
tabel relasi lainnya. Simbol “-“ digunakan untuk menunjukkan operasi set
difference.
Ex. Tabel mhs difference dengan tabel mhs2
mhs – mhs2
Select
* from mhs minus select * from mhs2
Cross Join ( X )
Operasi cross join berfungsi untuk mengkombinasikan
informasi yang ada dalam 2 tabel relasi dan menghasilkan sebuah tabel relasi
yang baru. Simbol “X“ digunakan untuk menunjukkan operasi set difference.
Ex. Tabel mhs cross join dengan tabel nilai
mhs X nilai
Select
* from mhs cross join nilai
Natural Join (⋈)
Operasi natural join memungkinkan kita untuk
menggabungkan operasi select dan cross join menjadi hanya 1 operasi saja.
Simbol “⋈“
digunakan untuk menunjukkan operasi natural join. Operasi natural join hanya
menghasilkan tupel yang mempunyai nilai yang sama pada 2 atribut yang bernama
sama pada 2 tabel relasi yang berbeda.
Ex. Tabel mhs natural join dengan tabel nilai
mhs ⋈ nilai
Select
* from mhs natural join nilai
OPTIMASI QUERY
Optimasi query adalah suatu proses untuk
menganalisa query dan untuk menentukan sumber-sumber apa saja yang digunakan
oleh query tersebut dan apakah penggunaan dari sumber tersebut dapat dikurangi
tanpa merubah output.
Dilakukan dengan mengetahui bagaimana rencana
eksekusi query yang baik.
Rencana
dari optimasi query dapat dilakukan dengan mengoptimalkan Ekspresi Aljabar
Relasional seperti : selection, projection, cross join, union, set difference.
SELECT
nmpel
FROM
pelanggan,daya_terpasang
WHERE
pelanggan.idpel = daya_terpasang.idpel
AND daya > 1300
Π nmpel(σdaya >1300 Λ
pelanggan.idpel=daya_terpasang.idpel(pelanggan X daya_terpasang))
Query Dekomposision
Pada Lapis Pertama ini input adalah query
diubah menjadi Aljabar query.
Query Decomposition dibagi menjadi 4 bagian :
_Normalisasi yaitu
manipulasi query
_Analisa
semantik yaitu mendeteksi query yang salah
_Memperbaiki
Query (sederhanakan) yaitu mengeliminasi predicate yang berulang
_Menata
ulang struktur dari query (restruktured) yaitu menggunakan aturan transformasi
Aturan untuk operasi logika
CONTOH 1
Mencari nama pelanggan dengan ap ‘lenteng agung ‘
dengan daya 1300 atau 900 watt
SQL :
Select nmpel
From pelanggan p , daya_terpasang d
Where p.idpel = d.idpel
And ap = “lenteng agung”
And (daya = 1300 Or daya = 900)
Normalisasi
p.idpel
= d.idpel ∧ ap=“lenteng agung” ∧
(daya = 1300 V Daya =900)
ANALISA
Menemukan queri yang salah
Tipe yang tidak benar:
1. Jika
ada atribut atau nama relasi tidak
didefenisi dalam skema global
2. Ada
operasi yang diaplikasikan ke atribut
dengan tipe yang salah
CONTOH 2
Select alamat
From pelanggan
Where ap > 1900
Query tidak benar :
Atribut
alamat tidak dideklarasikan dalam
struktur
tabel
Operator
> 1900 tidak compatible dengan type text dari ap
KESALAHAN SEMANTIK
1. Ada
komponen yang tidak memberikan konstribusi
dalam hasil akhir
2. Hanya
sebagian dari relational queris yang dapat di
tes untuk koreksi
3. Untuk
mendektesi : query graph dan Join Graph
CONTOH 3:
Cari nama pelanggan dan daya dengan tarif
kurang dari 1100
SELECT nmpel, daya
FROM pelanggan p,
daya_terpasang d, harga h
WHERE p.idpel = d.idpel
AND d.gol = h.gol
AND tarif <1100
Query Graph
Sumber :
- slide dari bu dine
http://rizarulham.wordpress.com/2009/10/16/aljabar-relasional-bahasa-pada-model-data-relasional/
http://awhnymous.blogspot.com/2013/10/sql-aljabar-relasi.html
http://andrekomputer.blogspot.com/2013/01/optimasi-query.html