basis data, ch 4 - relasonal aljabar & calculus
DESCRIPTION
TRANSCRIPT
BAB
4
RELASIONAL
ALJABAR DAN KALKULUS
ljabar dan Kalkulus bersifat formal, non-user-friendly. Dua-duanya telah digunakan sebagai bahasa dasar
bagi yang lain, Data Manipulation Language (DML) adalah bahasa tingkat tinggi untuk database relasional.
Yang menarik dari Aljabar dan Kalkulus yaitu dapat menggambarkan operasi dasar yang dibutuhkan DML
apapun dan dan juga berfungsi sebagai pembanding untuk relasional lainnya
4.1 ALJABAR RELASIONAL
Aljabar relasional adalah bahasa teoritis dengan operasi yang bekerja pada satu atau lebih relasi untuk
mendefinisikan relasi lain tanpa mengubah relasi aslinya. Dengan demikian, kedua operan dan hasilnya adalah
sebuah hubungan relasi, sehingga output dari satu operasi dapat menjadi masukan untuk operasi yang lain. Hal ini
memungkinkan menjadi ekspresi bersarang dalam aljabar relasional, seperti operasi aritmatika bersarang. Propeti
tersebut dinamai Closure. Suatu hubungan relasi ditutup dalam aljabar, seperti nomor ditutup di bawah operasi
aritmatika.
Ada banyak variasi dari operasi yang termasuk dalam aljabar relasional. Codd (1972) awalnya diusulkan
delapan operasi. Adapun kelima operasi dasar dalam aljabar relasional antara lain, Selection, Projection, Cartesian
product, Union, dan Set difference, dan sebagai tambahan terdapat operasi Join, Intersection, dan Division untuk
operasi pengambilan data. Fungsi setiap operasi diilustrasikan pada Gambar 4.1.
Operasi Seleksi dan Proyeksi adalah bagian dari Operasi Unary, karena beroperasi pada satu relasi. Operasi
lain bekerja pada pasangan hubungan relasi dan karena itu disebut Operasi Binary. Dalam definisi berikut, R dan S
menjadi dua relasi yang didefinisikan melalui masing-masing atribut A = (a1, a2, ..., aN) dan B = (b1, b2, ..., bM),.
A
Gambar 4.1a – Fungsi Operasi Aljabar Operasional
Gambar 4.1b – Fungsi Operasi Aljabar Operasional
4.1.1 OPERASI UNARY
Kita mulai pembahasan aljabar relasional dengan memeriksa dua operasi unary: Seleksi (Selection) dan Proyeksi
(Projection).
SELEKSI (SELECTION)
Contoh 4.1 : Operasi Seleksi
Daftar semua staf dengan gaji yang lebih besar dari £ 10.000. Mengunakan rumus :
σsalary > 10000 (Staf)
Hubungan input Staf dan predikat adalah gaji > 10000. Operasi Seleksi mendefinisikan hubungan relasi yang hanya
berisi tupel Staff dengan salary yang memiliki nilai lebih besar dari £ 10.000. Hasil operasi ini ditunjukkan pada
Gambar 4.2. Predikat yang lebih kompleks dapat dihasilkan dengan menambahkan operator logika ∧ (AND), ∨ (OR)
dan ~ (NOT).
Gambar 4.2 – Hasil Seleksi Salary > £ 10.000 (Table Staff)
PROYEKSI (PROJECTION)
Contoh 4.2 : Operasi Proyeksi
Operasi Proyeksi mendefinisikan hubungan relasi yang berisikan hanya didesain untuk tabel Staff dengan atribut
yang terpilih. Misalkan kita hanya menampilkan staffNo, fName, IName, dan salary. Dengan demikian rumus
operasi proyeksi menjadi :
ΠstaffNo, fName, IName, salary (Staff)
Hasil operasi ini ditunjukkan pada Gambar 4.3.
Gambar 4.3 – Hasil Proyeksi Relasi Tabel Staff
4.1.2 OPERASI SET
Operasi Seleksi dan Proyeksi mengekstrak informasi hanya dari satu relasi. Jelas ada kasus di mana kita ingin
menggabungkan informasi dari beberapa relasi. Dalam bagian ini, kita kita mempelajari Operasi Binary relasional
aljabar, dimulai dengan operasi Union, Diferensi Set , Intersection, dan Cartesian Product.
UNION
Jika R dan S memiliki I dan J tupel, masing-masing, Union diperoleh dengan menggabungkannya ke dalam satu
relasi maksimal dari tupel (I + J). Union dapat terjadi bila skema dari dari dua relasi tersebut sama, yaitu, jika
memiliki jumlah atribut yang sama dari domain yang sama. Dengan kata lain, hubungan harus Union-Compatible.
Perhatikan bahwa nama atribut tidak digunakan dalam mendefinisikan Union-Compatibility. Dalam beberapa kasus,
operasi Proyeksi dapat digunakan untuk membuat dua hubungan relasi Union-Compatible.
Contoh 4.3 : Operasi Union
Daftar semua city di mana ada salah satu Branch atau PropertyForRent.
Πcity (Branch) ∪ Πcity (PropertyForRent)
Untuk menghasilkan hubungan serikat-kompatibel, pertama kita menggunakan
operasi Proyeksi untuk memproyeksikan hubungan Branch dan
PropertyForRent atas kota atribut, menghilangkan duplikat di mana
diperlukan. Kami kemudian menggunakan operasi Union untuk menggabungkan
hubungan baru untuk menghasilkan hasil yang ditunjukkan pada Gambar 4.4.
Gambar 4.4 – Hasil Union
DIFERENSI SET
Contoh 4.4 Diferensi Set
Daftar semua city di mana ada Branch tetapi tidak ada
PropertyForRent.
Πcity (Branch) - Πcity (PropertyForRent)
Seperti pada contoh sebelumnya, hubungan tersebut menghasilkan juga Union-
Compatible dengan memproyeksikan hubungan relasi tabel Branch dan
PropertyForRent atas atribut city.
Gambar 4.5
Hasil Diferensi Set
INTERSECTION
Contoh 4.5 : Intersection
Daftar semua city di mana keduanya ada Branch dan hanya ada satu
PropertyForRent.
Πcity (Branch) ∩ Πcity (PropertyForRent)
Seperti pada contoh sebelumnya, dengan menggunakan operasi intersection
untuk menggabungkan hubungan baru untuk menghasilkan hasil hubungan
Union-Compatible yang ditunjukkan pada Gambar 4.6.
Gambar 4.6
Hasil Intersection
CARTESIAN PRODUCT
Operasi Cartesian produk merupakan operasi pengalian dua relasi untuk mendefinisikan hubungan relasi lain yang
terdiri dari semua kemungkinan pasangan tupel dari dua relasi. Oleh karena itu, jika satu relasi memiliki tupel I dan
atribut N dan yang lain memiliki tupel J dan atribut M, hubungan relasi Cartesian product akan berisi tupel (I * J)
dengan atribut (N + M). Ada kemungkinan bahwa dua relasi dapat memiliki atribut dengan nama yang sama. Dalam
hal ini, nama-nama atribut diawali dengan nama relasi untuk mempertahankan keunikan nama atribut dalam relasi.
Contoh 4.6 : Cartesian Product
Daftar nama client berada dalam relasi client dan detail orang yang telah melihat berada pada relasi Viewing.
Untuk mempertahankan daftar client dan komentar pada property yang telah mereka lihat, kita gabungkan relasi ini
menjadi :
(ΠclientNo, fName, LName (Client) ) × (ΠclientNo, propertyNo, comment (Melihat) )
Hasil dari operasi ini ditunjukkan pada Gambar 4.7.
Gambar 4.7 - Cartesian Product Mengurangi Relasi Client dan Viewing
Hubungan relasi ini berisi informasi lebih dari yang kita butuhkan. Sebagai contoh, tuple pertama dari relasi ini
mengandung nilai clientNo yang berbeda. Untuk mendapatkan daftar yang dibutuhkan, kita perlu menggunakan
operasi Seleksi pada hubungan relasi ini untuk mengekstrak tupel-tupel dimana Client.clientNo =
Viewing.clientNo . Operasi lengkap adalah sebagai berikut :
σClient.clientNo = Viewing.clientNo((ΠclientNo , fName , LName(Client)) × (ΠclientNo, propertyNo, comment(Viewing)))
Hasil operasi ini ditunjukkan pada Gambar 4.8 .
Gambar 4.8 – Pembatasan Cartesian Product Mengurangi Relasi Client dan Viewing
DEKOMPOSISI OPERASI KOMPLEKS Operasi aljabar relasional yang kompleksitas dapat terurai menjadi serangkaian operasi aljabar relasional kecil dan
memberinya nama untuk hasil ekspresi intermediate. Operasi penugasan dilambangkan dengan symbol ←, untuk
nama hasil operasi aljabar relasional, bagian kanan dari operasi adalah penugasan untuk bagian kirinya. Pada contoh
TempViewing(clientNo, propertyNo, comment) ← ΠclientNo, propertyNo, comment(Viewing)
TempClient(clientNo, fName, lName) ←ΠclientNo, fName, lName(Client)
Comment(clientNo, fName, lName, vclientNo, propertyNo, comment) ←
TempClient × TempViewing
Result ← σclientNo = vclientNo(Comment)
Alternatif lain kita dapat menggunakan operasi Rename ρ (rho), yang memberikan nama pada hasil operasi aljabar
relasional. Rename memungkinkan opsional nama untuk setiap atribut dari relasi baru yang akan ditentukan.
4.1.3 OPERASI JOIN
Biasanya, kombinasi dari Cartesian Product yang memenuhi kondisi tertentu, biasanya menggunakan Operasi Join.
Operasi Join berguna dalam menggabungkan dua relasi untuk membentuk hubungan baru. Operasi Join merupakan
turunan dari Cartesian Product, setara dengan operasi Seleksi, menggunakan predikat Join sebagai rumus Seleksi,
atas Cartesian Product dari dua hubungan relasi operan. Join adalah salah satu operasi yang paling sulit untuk
diimplementasikan secara efisien dalam sebuah RDBMS dan merupakan salah satu alasan mengapa sistem relasional
memiliki masalah kinerja intrinsik.
Ada berbagai bentuk operasi Join, masing-masing memiliki perbedaan yang sangat tipis. Adapun jenis operasi
Join terdiri dari : Theta Join, Equijoin, Natural Join, Outer Join dan Semijoin.
THETA JOIN ( Θ JOIN)
Kita bisa menulis ulang Theta Join dalam hal operasi Seleksi dasar dan Cartesian Product :
Seperti Cartesian Product, derajat Theta join adalah jumlah derajat dari operan hubungan R dan S. Dalam kasus di
mana predikat F hanya berisi kesetaraan (=) atau Equijoin. Pada contoh 4.6, kita dapat melihat contoh query.
Contoh 4.7 : Operasi Equijoin
Daftar nama dan komentar dari semua klien yang telah melihat properti untuk disewakan.
Pada Contoh 4.6, kita menggunakan Cartesian Product dan operasi Seleksi untuk mendapatkan daftar ini. Namun,
hasil yang sama dapat diperoleh dengan menggunakan operasi Equijoin:
Atau
Gambar 4.7 - Cartesian Product Mengurangi Relasi Client dan Viewing
Gambar 4.8 – Pembatasan Cartesian Product Mengurangi Relasi Client dan Viewing
NATURAL JOIN
Operasi Natural Join melakukan suatu Equijoin atas semua atribut dalam dua relasi yang memiliki nama yang sama.
Tingkat Natural Join adalah jumlah derajat dari hubungan relasi R dan S dikurang jumlah atribut dalam x.
Contoh 4.8 : Operasi Natural Join
Dalam daftar nama dan komentar dari semua client yang telah melihat properti untuk disewakan.
Pada Contoh 4.7 kita menggunakan Equijoin untuk menghasilkan daftar tersebut, tetapi hasil relasi memiliki dua
kejadian Join atribut dari clientNo. Kita dapat menggunakan Natural Join untuk menghapus satu kejadian dari
atribut clientNo:
Atau
Hasil operasi ini ditunjukkan pada Gambar 4.9.
Gambar 4.9 – Hasil dari Natural Join
OUTER JOIN Seringkali dalam menggabungkan dua relasi, tupel dalam satu relasi tidak memiliki tupel yang cocok dalam membuat
hubungan relasinya, dengan kata lain, tidak ada nilai yang cocok dalam menggabungkan atribut-atributnya.
Terkadang kita ingin tupel-tupel dari salah satu relasi untuk tampil dari hasil sebuah peristiwa bahkan walaupun
tidak ada nilai yang cocok dalam hubungan relasi tersebut. Hal ini dapat dicapai dengan menggunakan Join Outer.
Outer join digunakan lebih luas dalam sistem relasional dan operator khusus yang ditetapkan dalam standar SQL.
Keuntungan dari Outer Join adalah adanya informasi yang dipertahankan, Outer Join mempertahankan tupel yang
akan hilang oleh jenis operasi Join lainnya.
Contoh 4.9 : Operasi Outer Join Kiri
Menghasilkan status laporan pada tampilan properti.
Dalam kasus ini, Kita membuat sebuah hubungan relasi dari properti yang telah dilihat dan dikomentari dengan
orang-orang yang belum melihat. Hal ini dapat dicapai dengan menggunakan Outer Join berikut:
Hasil relasi ditunjukkan pada Gambar 4.10. Perhatikan atribut PL94, PG21, dan PG16 tidak memiliki nilai, tetapi tupel
tersebut masih ada dengan nilai atributy Null dari relasi Viewing.
Gambar 4.10 – Hasil dari Outer Join
SEMIJOIN
Operasi Semijoin didefinisikan yaitu relasi operasi Join dari dua relasi dan kemudian memproyeksikan pada atribut
operan pertama. Salah satu keuntungan dari Semijoin yaitu dapat mengurangi jumlah tupel yang perlu ditangani
untuk membentuk gabungan. Hal ini terutama berguna untuk komputasi Join dalam sistem terdistribusi. Kita bisa
menulis ulang Semijoin menggunakan Proyeksi dan Join operasi:
adalah himpunan semua atribut untuk R
Ini sebenarnya adalah Semi-Theta Join. Ada varian untuk Semi-Equijoin dan Semi-Natural Join.
Contoh 4.10 : Operasi Semijoin
Daftar rincian lengkap semua staf yang bekerja di cabang di Glasgow.
Jika kita hanya tertarik melihat atribut dari relasi Staff, kita dapat menggunakan operasi Semijoin yang
menhasilkan relasi seperti ditunjukkan pada Gambar 4.11.
Gambar 4.11 – Hasil Operasi Semijoin dari Relasi Staff dan Branch
4.1.4 OPERASI DIVISI
Operasi Divisi berguna untuk query jenis tertentu yang sering terjadi dalam aplikasi database. Diasumsikan relasi R
didefinisikan atas atribut set A dan relasi S didefinisikan lebih dari atribut himpunan B sehingga B ⊆ A (B adalah
himpunan bagian dari A). Misalkan C = A - B, yaitu, C adalah himpunan atribut R yang tidak atribut S. Kami
memiliki definisi berikut dari operasi Divisi.
Kita dapat mengekspresikan operasi Divisi dalam operasi dasar:
T1 ← ΠC (R)
T2 ← ΠC ((T1 × S) - R)
T ← T1 - T2
Contoh 4.11 : Operasi Divisi
Identifikasi semua client yang telah melihat semua properti yang memiliki tiga kamar.
Kita dapat menggunakan operasi Seleksi untuk menemukan semua properti dengan tiga kamar diikuti oleh operasi
Proyeksi untuk menghasilkan hubungan yang hanya berisi angka properti. Kemudian kita dapat menggunakan
operasi Divisi seperti di bawah ini :
Hasil relasi baru ditunjukkan pada Gambar 4.12.
Gambar 4.12 – Hasil dari Operasi Divisi
4.1.5 AGREGASI DAN PENGELOMPOKAN OPERASI
Hanya dengan mengambil tupel dan atribut dari satu atau lebih relasi tertentu, terkadang kita ingin melakukan
beberapa penjumlahan atau agregasi (Aggregation) data seperti membuat total di akhir laporan, atau beberapa
proses pengelompokan data (Grouping) seperti melakukan pembuatan subtotal dalam sebuah laporan. Operasi
tersebut tidak dapat dilakukan bila menggunakan operasi aljabar relasional. Namun, ada operasi tambahan yang
perlu dibahas, yaitu : Operasi Agregasi dan Operasi Pengelompokkan.
Operasi Agregasi
Fungsi Agregrasi yang utama adalah :
COUNT – memposisikan jumlah nilai dalam atribut terkait.
SUM – menjumlahkan nilai dalam atribut terkait.
AVG – merata-ratakan nilai atribut terkait.
MIN – mengurutkan nilai terkecil dari atribut terkait
MAX – mengurutkan nilai terbesar dari atribut terkait
Contoh 4.12 Operasi Agregasi
(a) Berapa banyak property dengan biaya lebih dari £ 350 per bulan untuk menyewa?
Kita dapat menggunakan fungsi agregasi COUNT untuk menghasilkan relasi R yang ditunjukkan pada Gambar
4.13 (a) sebagai berikut:
(b) Tentukan nilai minimum, maksimum, dan gaji staf rata-rata.
Kita dapat menggunakan fungsi agregat, MIN, MAX, dan Rerata, untuk menghasilkan hubungan R ditunjukkan
pada Gambar 4.13 (b) sebagai berikut:
Gambar 4.13 – Hasil Operasi Agregasi
OPERASI PENGELOMPOKKAN
Bentuk umum dari operasi pengelompokan adalah sebagai berikut:
a1, a2,. . . , an ℑ <Ap ap>, <Aq aq>,. . . , <Az Az> (R)
Dimana R adalah setiap hubungan, a1, a2,. . . , an adalah atribut R yang ke grup, ap, aq,. . . , az
adalah atribut lain dari R, dan Ap aq,. . . , Az adalah fungsi agregasi. Tuple dari R dipartisi menjadi beberapa
kelompok seperti :
Semua tupel dalam kelompok memiliki nilai yang sama untuk a1, a2,. . . , an;
Tupel dalam kelompok yang berbeda memiliki nilai yang berbeda untuk a1, a2,. . . , an
Kami menggambarkan penggunaan operasi pengelompokan dengan contoh berikut :
Contoh 4.13 : Operasi Pengelompokan
Carilah jumlah staf yang bekerja di setiap cabang dan jumlah gaji mereka.
Pertama-tama kita perlu group tupel berdasarkan jumlah cabag, branchNo, dan kemudian menggunakan fungsi
agregasi COUNT dan SUM untuk menghasilkan hubungan yang diperlukan. Ekspresi aljabar relasional adalah sebagai
berikut:
Relasi hasil ditunjukkan pada Gambar 4.14.
Gambar 4.14 – Hasil Operasi Pengelompokkan
4.2 KALKULUS RELASIONAL
---- || Tidak dibahas ||---
4.3 BAHASA LAINNYA
---- || Tidak dibahas ||---