Cartesian product dan Selection dapat diganti dengan operasi tunggal, Join.
Join Operation
Join merupakan turunan dari operasi Cartesian product.
Equivalen dengan fungsi Selection, menggunakan predikat join sebagai fungsi selection pada Cartesian product dari dua buah relasi.
Merupakan operasi tersulit untuk diimplementasikan secara efisien pada RDBMS dan merupakan salah satu alasan mengapa RDBMS memiliki masalah-masalah. Jenis-jenis operasi join.
Theta join
Equijoin (a particular type of Theta join) Natural join
Outer join Semijoin
Theta join (‐join)
R FS
Mendefinisikan relasi yang terdiri dari tuple-tuple yang memenuhi syarat predikat F dari Cartesian product relasi R dan S.
Predikat F yaitu bentuk dari R.ai S.bi dimana dapat berupa operator pembanding (<, , >, , =, ).
Theta join dapat dituliskan dengan menggunakan operasi dasar Selection dan operasi Cartesian product.
2014
10
Basis Data Pusat Bahan Ajar dan eLearningTim Dosen http://www.mercubuana.ac.id
Contoh - Equijoin
Tampilkan nama dan komentar semua klien yang telah melihat property untuk disewakan.
(clientNo,fName,lName(Client)) Client.clientNo=Viewing.clientNo(clientNo,propertyNo, comment(Viewing))
Natural join
R S
Equijoin dari dua relasi R dan S untuk seluruh atribut x. Perulangan akan dieliminasi dari hasil akhir.
Contoh - Natural join
Tampilkan nama dan komentar seluruh klien yang telah melihat property untuk disewakan.
memiliki nilai yang cocok (matching values) dengan kolom yang di-join. R S
(Left) outer join adalah join, dimana tuple dari R yang tidak memiliki nilai yang cocok (matching values) pada kolom dari S, yang ditampilkan dalam relasi yang dihasilkan. Contoh - Left Outer join
Buatlah laporan status dari property viewings.
propertyNo, street, city(PropertyForRent) Viewing
Semijoin
R F S
Mendefinisikan relasi yang berisikan tuple-tuple dari relasi R yang ada pada join R dengan S.
Semijoin dapat dituliskan dengan menggunakan Projection dan join : R F S = A(R F S)
Contoh - Semijoin
Tampilkan detail lengkap semua staff yang bekerja pada kantor cabang di Glasgow.
2014
12
Basis Data Pusat Bahan Ajar dan eLearningTim Dosen http://www.mercubuana.ac.id
Division
R S
Mendefinisikan relasi antara atribut-atribut C yang terdiri dari himpunan tuple R yang merupakan kombinasi yang cocok/sesuai (match) dengan setiap tuple S.
Ekpresi dengan menggunakan operasi dasar : T1 C(R)
T2 C((S X T1) – R) T T1 – T2
Contoh - Division
Identifikasi seluruh klien yang telah melihat seluruh properti dengan 3 buah ruang/kamar.
Query kalkulus relasional lebih menspesifikasikan apa yang harus ditampilkan/diambil daripada bagaimana menampilkan/ mengambilnya. Pada kalkulus relasional tidak ada deskripsi bagaimana meng-evaluasi suatu query.
Relational calculus merupakan Non-Procedural Language. Pengguna hanya
memberikan deskripsi formalnya saja, tanpa menentukan bagaimana urutan-urutan proses untuk mendapatkan informasi tersebut dari sebuah basis data. Relational calculus termasuk tipe manipulasi data yang tidak menyediakan suatu set operator dan memberikan
fleksibilitas yang sangat baik dalam relasi-relasi. Relational calculus terbagi menjadi dua, yaitu: 1. Tuple Oriented Relational calculus
2. Domain Oriented Relational calculus
Nama kalkulus relasional diambil dari predicate calculus. Ketika diaplikasikan untuk database, kalkulus relasional berbentuk : tuple relational calculus dan domain relational calculus.
Dalam first-order logic (atau predicate calculus), predicate merupakan fungsi berargumen yang bernilai benar. Ketika suatu nilai disubtitusikan untuk argumen tersebut, fungsi menghasilkan ekspresi, yang disebut proposition, yang dapat bernilai benar atau salah.
Contoh : terdapat kalimat “john white is a member of staff “ dan “ john white earns more than ann beech “, kedua kalimat tersebut adalah proposisi. Kalimat pertama mempunyai fungsi “is a member of staff “ dengan argumen john white, begitupun kalimat kedua.
Jika predikat berisi sebuah variable (mis, ‘x adalah jumlah staff’), maka harus ada range untuk x. Ketika disubtitusikan beberapa nilai dari range x ini, proposisi mungkin bernilai benar untuk suatu nilai, dan bernilai salah untuk lainnya.
Maka jika P adalah predikat, maka himpunan x untuk P dapat dituliskan sbb : { x | P (x) }
2014
14
Basis Data Pusat Bahan Ajar dan eLearningTim Dosen http://www.mercubuana.ac.id
Variable-variabel di tuple relational calculus merepresentasikan value(nilai) tuple-tuplenya. Query di sebuah tuple calculus direpresentasikan sebagai berikut:
{ t | P (t) }.
Sejumlah tuple dari seluruh tuple t dengan predicate P adalah TRUE untuk tuple t tersebut. Simbol lainnya adalah sebagai berikut:
t [ A ] : value tuple t di atribut A t _ r : tuple t berada di relasi r
Ditujukan untuk menampilkan tuple untuk predikat yang bernilai benar dengan menggunakan variabel tuple (tuple variables).
Variable Tuple adalah variable yang meliputi (ranges over) relasi bernama, contoh : variable yang hanya diperbolehkan yang merupakan tuple-tuple dari suatu relasi.
menetapkan range dari variable tuple S sebagai relasi Staff sbb : Staff(S)
Untuk mengetahui himpunan dari semua tuple S dimana P(S) adalah benar : {S | P(S)}
Contoh :
mencari detail dari semua staff yang berpenghasilan lebih dari £10,000 : {S | Staff(S) S.salary > 10000}
S.salary berarti nilai dari atribut salary diberikan untuk variabel tuple S.
Untuk menampilkan atribut tertentu seperti salary, dapat ditulis : {S.salary | Staff(S) S.salary > 10000}
Dapat menggunakan dua buah quantifier untuk mengetahui berapa banyak instances yang diperoleh dari suatu predikat, yaitu:
Existential quantifier (‘there exists’), akan bernilai benar jika sedikitnya terdapat 1 buah instance yang memenuhi syarat. Contoh :
Staff(S) (B)(Branch(B) (B.branchNo= S.branchNo) B.city = ‘London’)
Berarti, terdapat tuple branch dengan branchNo yang sama dengan branchNo dari tuple Staff , S, dan berlokasi di London’.
Universal quantifier (‘for all’) , akan bernilai benar jika setiap instance memenuhi syarat. Contoh :
(B) (B.city ‘Paris’)
Berarti, untuk semua tuple Branch, yang tidak beralamat di paris atau dapat ditulis :
~(B) (B.city = ‘Paris’),
2014
16
Basis Data Pusat Bahan Ajar dan eLearningTim Dosen http://www.mercubuana.ac.id
variable bebas(free ).
Penerapan hokum De Morgan:
(X) (F(X)) ~ (X) (~(F(X))) (X) (F(X)) ~ (X) (~(F(X)))
(X) (F1(X) F2(X)) ~ (X) (~(F1(X)) V ~(F2(X))) (X) (F1(X) F2(X)) ~ (X) (~(F1(X)) V ~(F2(X)))
Formula/rumus yang ditulis harus tidak ambigu dan dapat dimengerti.
Ekspresi dalam kalkulus tuple relasional mempunyai bentuk umum sbb : { S1.a1, S2.a2,…,Sn.an | F (S1,S2,…Sm ) m >= n
keterangan:
R(Si ), dimana Si adalah variable tuple dan R adalah relasi
Si.a1 Sj.a2 ,dimana Si. dan Sj. merupakan variable tuple. a1 adalah atribut dari relasi pada range Si., a2 adalah atribut dari relasi pada range Sj. dan operator pembanding.
Si.a1 c dimana Si. adalah variable tuple. a1 adalah atribut dari relasi pada range Si., c adalah konstanta dari domain atribut a1 dan operator pembanding. Ekspresi dapat dibuat dengan beberapa ketentuan :
ekspresi tersebut tersebut bersifat atomic
jika F1 dan F2 adalah suatu ekspresi, maka conjunction F1F2; disjunction F1VF2; dan negasi, ~F1 juga ekspresi.
jika F adalah ekspresi dengan variable bebas X, maka (X)(F) dan (X)(F) juga merupakan ekspresi.
1. Tampilkan nama seluruh manager yang memiliki penghasilan lebih dari £25,000.
{S.fName, S.lName | Staff(S) S.position = ‘Manager’ S.salary > 25000}
2. Tampilkan staff yang mengatur property untuk disewakan dikota Glasgow.
{S | Staff(S) (P) (PropertyForRent(P) (P.staffNo = S.staffNo) P.city = ‘Glasgow’)}
3. Tampilkan nama staff yang tidak mengatur property apapun
{S.fName, S.lName | Staff(S) (~(P) (PropertyForRent(P)(S.staffNo = P.staffNo)))}
Atau
{S.fName, S.lName | Staff(S) ((P) (~PropertyForRent(P) ~(S.staffNo = P.staffNo)))}
4. Tampilkan nama klien yang telah melihat property di Glasgow.
{C.fName, C.lName | Client(C) ((V)( P) (Viewing(V) PropertyForRent(P) (C.clientNo = V.clientNo) (V.propertyNo=P.propertyNo) P.city =‘Glasgow’))}
2014
18
Basis Data Pusat Bahan Ajar dan eLearningTim Dosen http://www.mercubuana.ac.id
Untuk mengatasi hal tersebut, tambahkan batasan bahwa semua nilai yang dihasilkan harus merupakan nilai dalam domain ekspresi.