Transcript domain relational calculus.
Relational Calculus
Basis Data Pertemuan 05
Pendahuluan
Query kalkulus relasional lebih menspesifikasikan apa yang harus ditampilkan/diambil (
retrieved
) daripada bagaimana menampilkan/mengambilnya. Tidak ada deskripsi bagaimana meng-evaluasi suatu query.
Nama kalkulus relasional diambil dari
predicate 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. kalkulus relasional berbentuk :
tuple relational calculus
dan
domain relational calculus.
Contoh
terdapat kalimat “
john white is a member of staff
“ dan “ kedua.
john white earns more than ann beech
pertama mempunyai fungsi “ “, kedua kalimat tersebut adalah proposisi. Kalimat
is a member of staff
“ dengan argumen john white, begitupun kalimat Jika predikat berisi sebuah variable (mis, ‘ untuk
x x
adalah jumlah staff’), maka harus ada range . Ketika disubtitusikan beberapa nilai dari range
x
lainnya. ini, proposisi mungkin bernilai benar untuk suatu nilai, dan bernilai salah untuk
Predikat
Maka jika P adalah predikat, maka himpunan x untuk P dapat dituliskan sbb : { x | P (x) } predikat dapat digabungkan dengan Λ (AND), V (OR), dan ~ (NOT)
Tuple Relational Calculus
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.
Tuple Relational Calculus(2)
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}
quantifier
Dapat menggunakan dua buah
quantifier
untuk mengetahui berapa banyak instances yang diperoleh dari suatu predikat, yaitu: Existential quantifier (‘there exists’) Universal quantifier (‘for all’)
Existential quantifier
(‘there exists’)
akan bernilai benar jika sedikitnya terdapat 1 buah instance yang memenuhi syarat. Contoh : Staff(S) ( B)(Branch(B) S.branchNo) B.c
(B.branchNo= ity = ‘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’)
yang berarti ‘tidak ada branch dengan alamat paris’
Penerapan hukum 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))) F2(X)) ~ ( X) (~(F1(X)) V
Ekspresi dalam kalkulus tuple relasional
{ S1.a1, S2.a2,…,Sn.an | F (S1,S2,…Sm ) m >= n
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 a
1
dan operator pembanding.
Ketentuan Pembuatan Ekspresi
ekspresi tersebut tersebut bersifat atomic jika
F
1 dan
F
2 adalah suatu ekspresi, maka
conjunction F
1
F
2; disjunction
F
1V
F
2; dan negasi, ~
F
1 juga ekspresi.
jika
F
adalah ekspresi dengan variable bebas
X
, maka (
X)
(
F
) dan (
X)
(
F
) juga merupakan ekspresi.
Contoh
Tampilkan nama seluruh manager yang memiliki penghasilan lebih dari £25,000.
{S.fName, S.lName | Staff(S) ‘Manager’ S.salary > 25000} S.position = Tampilkan staff yang mengatur property untuk disewakan dikota Glasgow.
{S | Staff(S) ( P) (PropertyForRent(P) (P.staffNo = S.staffNo) P.city = ‘Glasgow’)}
Contoh
Tampilkan nama staff yang tidak mengatur property apapun {S.fName, S.lName | Staff(S) (~( P) (PropertyForRent(P) (S.staffNo = P.staffNo)))} Or {S.fName, S.lName | Staff(S) (~PropertyForRent(P) (( P) ~(S.staffNo = P.staffNo)))}
Contoh
Tampilkan nama klien yang telah melihat property di Glasgow.
{C.fName, C.lName | Client(C) (Viewing(V) (( V)( P) PropertyForRent(P) (C.clientNo = V.clientNo) (V.propertyNo=P.propertyNo) P.city =‘Glasgow’))}
Ekspresi tak hingga
Suatu ekspresi dapat menghasilkan himpunan tak hingga, contoh {S | ~Staff(S)} Untuk mengatasi hal tersebut, tambahkan batasan bahwa semua nilai yang dihasilkan harus merupakan nilai dalam domain ekspresi.
Domain Relational Calculus
Menggunakan variable yang diambil dari domain pada suatu relasi.
Bentuk umum ekspresi domain relational calculus: {
d
1,
d
2, . . . ,
dn
| F(
d
1,
d
2, . . . ,
dn
)} dimana F(
d
1,
d
2, . . . ,
dn
) merupakan formula yang disusun dari atom-atom dan
d
1,
d
2, . . . ,
dn
merepresentasikan domain variables.
Contoh
Tampilkan nama seluruh manager dengan penghasilan lebih dari £25,000.
{fN, lN | ( sN, posn, sex, DOB, sal, bN) (Staff (sN, fN, lN, posn, sex, DOB, sal, bN) posn = ‘Manager’ sal > 25000)}
Tampilkan staff yang mengatur property untuk disewakan di Glasgow
{sN, fN, lN, posn, sex, DOB, sal, bN | sN1,cty)(Staff(sN,fN,lN,posn,sex,DOB,sal,bN) PropertyForRent(pN, st, cty, pc, typ, rms, rnt, oN, sN1, bN1) (sN=sN1) cty=‘Glasgow’)}
Contoh
Tampilkan nama staff yang tidak mengatur property apapun
{fN, lN | ( sN)(Staff(sN,fN,lN,posn,sex,DOB,sal,bN) (~( sN1)(PropertyForRent(pN, st, cty, pc, typ, rms, rnt, oN, sN1, bN1) (sN=sN1))))}
Tampilkan nama klien yang telah melihat property di Glasgow.
{fN, lN | ($cN, cN1, pN, pN1, cty)(Client(cN, fN, lN,tel, pT, mR) Viewing(cN1, pN1, dt, cmt) PropertyForRent(pN, st, cty, pc, typ, rms, rnt,oN, sN, bN) (cN = cN1) (pN = pN1) cty = ‘Glasgow’)}
Catatan
Ketika dibatasi untuk menyimpan ekspresi, domain relational calculus ekuivalen dengan tuple relational calculus terbatas untuk menyimpan ekspresi, dimana ekuivalen dengan relational algebra. Yang berarti, setiap ekspresi aljabar relasional terdapat ekuivalensinya dalam ekspresi kalkulus relasional, dan sebaliknya.