Database Management Systems Bab 4 – Bagian B Kalkulus Relasional (Chap Database Management Systems Bab 4 – Bagian B Kalkulus Relasional (Chap. 4 – Ramakrishnan)
Kalkulus Relasional Terdapat 2 jenis: Tuple relational calculus (TRC) dan Domain relational calculus (DRC). Kalkulus mempunyai variables, constants, comparison ops, logical connectives dan quantifiers. TRC: Variables meliputi tuples. DRC: Variables meliputi domain elements (= nilai-nilai field). TRC dan DRC keduanya merupakan subsets dari “first-order logic”. Suatu persamaan dalam kalkulus disebut formula. Suatu tuple jawaban pada dasarnya adalah sebuah pemberian (assignment) nilai constants ke beberapa variables yang menghasilkan formula dengan nilai evaluasi benar (true).
Tuple Relational Calculus (TRC) Sebuah tuple variable adalah variabel yang berlaku pada suatu skema relasi sebagai nilai Query mempunyai bentuk: dimana T adalah sebuah tuple variable dan p(T) menyatakan sebuah formula (query) yang menjelaskan T. Hasil dari query adalah satu set tuples t dimana evaluasi formula p(T) bernilai “true” untuk T = t. Contoh ilustratif: “Dapatkan semua sailors dengan rating > 7”
Syntax TRC Atomic formula: Formula: , atau R.a op S.b, atau R.a op constant, atau constant op R.a R dan S adalah tuple variables dan op adalah salah satu dari <, >, =, , , Formula: Berupa sebuah atomic formula, atau dimana p dan q adalah formula, atau , dimana X adalah sebuah tuple variable, atau , dimana X adalah sebuah tuple variable Quantifiers dan digunakan untuk “mengikat (bind)” variabel R. Suatu variabel disebut “bebas (free)” dalam suatu formula atau subformula (formula dlm formula yang lebih besar) jika (sub)formula tidak berisikan sebuah “occurrence” dari quantifier yang mengikatnya
Semantik dari TRC Queries Sebuah query dievaluasikan pada suatu instance dari basis data. Asumsikan free variable dlm sebuah formula F akan diikat pada sebuah nilai tuple. Utk ini, F akan dievaluasi dengan nilai “true” jika memenuhi kondisi berikut: F adalah sebuah atomic formula R Rel, dan sebuah tuple dlm instance dari relasi Rel diberikan ke R F adalah perbandingan R.a op S.b, atau R.a op constant, atau constant op R.a, dan tuples diberikan ke R dan S yang menghasilkan nilai perbandingan “true” F adalah dalam bentuk p (p = not “true”), atau p q (baik p dan q = “true”), atau p q (salah satu = “true”), atau p q (q = “true” jika p = “true” F adalah dalam bentuk R(p(R)), dan terdapat beberapa pemberian tuples ke free variables dlm p(R), termasuk R, yang menyebabkan formula p(R) bernilai “true” F adalah dalam bentuk R(p(R)), dan terdapat beberapa pemberian tuples ke free variables dlm p(R) yang menyebabkan formula p(R) bernilai “true” apapun tuple yang diberikan ke R
Dapatkan nama dan age dari sailors yang mempunyai rating di atas 7 Dapatkan nama sailor, boat id, dan reservation date untuk setiap reservasi Dapatkan nama sailor yang melakukan reservasi boat dengan ID = 103
Dapatkan nama sailor yang melakukan reservasi red boat Dapatkan nama sailor yang melakukan reservasi paling sedikit 2 boats Dapatkan nama sailor yang melakukan reservasi semua boats
Domain Relational Calculus (DRC) Query mempunyai bentuk: Jawab meliputi semua tuples yang menjadikan formula bernilai true. Formula dapat didefinisikan secara rekursif, dimulai dengan atomic formulas sederhana (memperoleh tuples dari sejumlah relasi atau melakukan perbandingan dari beberapa nilai), dan membentuk formulai-formula yang lebih besar dengan menggunakan logical connectives.
DRC Formulas Atomic formula: Formula: , atau X op Y, atau X op constant op adalah salah satu dari <, >, =, , , Formula: Berupa sebuah atomic formula, atau dimana p dan q adalah formula, atau , dimana variable X adalah free dalam p(X), atau , dimana variable X adalah free dalam p(X)
Free & Bound Variables Penggunaan quantifiers X danX dalam sebuah formula ditujukan untuk mengikat (bind) X. Sebuah variabel yang not bound disebut free. Perhatikan kembali definisi sebuah query: Terdapat pembatasan: variabel-variabel x1, ..., xn yang muncul ke kiri dari `|’ harus hanya berupa “free variables” dalam formula p(...).
Dapatkan semua sailors yang mempunyai rating di atas 7 Kondisi menjamin bahwa domain variables I, N, T dan A diikat ke fields dari tuple Sailors yang sama. Term ke kiri dari `|’ (yang harus dibaca sedemikian rupa sehingga) menjelaskan bhw setiap tuple yang memenuhi T>7 ada dalam jawaban. Lakukan modifikasi pada query di atas utk menjawab: Dapatkan semua sailors yang berusia di atas 18 atau yang mempunyai rating di bawah 9, dan mempunyai nama ‘Joe’.
Dapatkan sailors dengan rating > 7 yang telah melakukan reserve boat nomor103 Dapat digunakan sebagai bentuk penyederhanaan dari Untuk cotoh di atas, perhatikan penggunaan untuk memperoleh sebuah tuple dalam Reserves yang `digabung dengan’ tuple Sailors yang sedang dimanipulasi.
Dapatkan sailors dengan rating > 7 yang telah melakukan reserve red boat Perhatikan bagaimana penggunaan tanda kurung dpt mengendalikan scope dari setiap penyatuan quantifier (quantifier’s binding). Hal tsb kelihatan tidak praktis, tetapi dengan penyediaan “user-interface” yang baik, hal tsb akan menjadi sangat intuitif. (Contoh: MS Access, QBE)
Dapatkan sailors yang telah melakukan reserve semua boat Query tsb di atas akan lebih mudah utk dinyatakan jika dituliskan kembali menjadi: Dapatkan sailors sedemikian rupa sehingga untuk SETIAP boat yang ada dalam database TIDAK terdapat boat yang TIDAK di-reserved!
Dapatkan sailors yang telah melakukan reserve semua boat (Bentuk lain Notasi lebih sederhana, untuk query yang sama. (Lebih jelas !) Utk mendapatkan sailors yang telah melakukan reserve semua red boats: .....
Unsafe Queries, Expressive Power Dimungkinkan utk menulis calculus queries yang secara sintaktik benar, tetapi mempunyai jumlah jawaban yang tak berhingga ! Queries semacam ini disebut unsafe queries. Contoh: Setiap query yang dapat dinyatakan dalam relational algebra dijamin dapat dinyatakan dengan sebuah “safe query” dalam DRC/TRC. Demikian juga sebaliknya ! Relational Completeness: Query language (seperti SQL) yang dapat menyatakan setiap query yang dapat dituliskan dalam relational algebra/calculus.
Rangkuman Relational calculus merupakan bentuk query yang bersifat “non-operational”, dimana pengguna harus mendefinisikan queries dalam bentuk apa yang diinginkan dan bukan dalam bentuk bagaimana melakukannya. (Lebih menekankan aspek deklaratif) Relational algebra dan safe relational calculus sama-sama memiliki daya ekspresif yang mengarah pada terciptanya “relational completeness”