Back to IF2240 Basis Data

Topic

Questions/Cues

  • Apa itu Kalkulus Relasional?
  • Apa itu Tuple Relational Calculus (TRC)?
  • Sintaks umum TRC?
  • Apa itu variabel tuple?
  • Bagaimana formula kalkulus predikat di TRC?
  • Apa itu quantifiers?
  • Contoh TRC: Gaji > 80000?
  • Contoh TRC: Hanya ID?
  • Contoh TRC: Departemen Watson?
  • Contoh TRC: Kursus Fall 2017 OR Spring 2018?
  • Contoh TRC: Kursus Fall 2017 AND Spring 2018?
  • Contoh TRC: Kursus Fall 2017 BUT NOT Spring 2018?
  • Apa itu Safety of Expressions di TRC?
  • Contoh ekspresi tidak aman di TRC?
  • Contoh TRC dengan Kuantifikasi Universal?
  • Apa itu Domain Relational Calculus (DRC)?
  • Sintaks umum DRC?
  • Apa itu variabel domain?
  • Contoh DRC: Gaji > 80000?
  • Contoh DRC: Hanya ID?
  • Contoh DRC: Departemen Watson?
  • Contoh DRC: Kursus Fall 2017 OR Spring 2018?
  • Contoh DRC: Kursus Fall 2017 AND Spring 2018?
  • Apa itu Safety of Expressions di DRC?
  • Contoh DRC dengan Kuantifikasi Universal?

Reference Points

  • Slide 6-18 dari “7. IF2240-SemII2425-m03-2-Relational-Calculus.pdf”

Pengantar Kalkulus Relasional

  • Kalkulus Relasional adalah bahasa query non-prosedural. Ini berarti pengguna menentukan data apa yang ingin didapatkan, bukan bagaimana cara mendapatkannya.
  • Ada dua bentuk utama Kalkulus Relasional:
    1. Tuple Relational Calculus (TRC).
    2. Domain Relational Calculus (DRC).

Tuple Relational Calculus (TRC)

  • TRC adalah bahasa query non-prosedural di mana setiap query berbentuk: .
    • Ini adalah himpunan semua tuple t sedemikian rupa sehingga predikat P benar untuk t.
  • Variabel Tuple:
    • t adalah variabel tuple.
    • t[A] menunjukkan nilai tuple t pada atribut A.
    • t ∈ r menunjukkan bahwa tuple t ada dalam relasi r.
  • Formula Kalkulus Predikat: P adalah formula yang mirip dengan kalkulus predikat.
    • Set atribut dan konstanta.
    • Set operator perbandingan: (misalnya, <, , =, , > , ).
    • Set konektor: and (), or (), not ().
    • Implikasi (): berarti “jika benar, maka benar”. Ini ekuivalen dengan .
    • Set quantifiers (penentu kuantitas):
      • Existential Quantifier (): berarti “ada (exists) sebuah tuple t dalam relasi r sedemikian rupa sehingga predikat Q(t) benar”.
      • Universal Quantifier (): berarti “Q benar untuk semua (for all) tuple t dalam relasi r”.
  • Contoh Query TRC:
    • **Mencari ID, nama, dept_name, salary untuk instruktur yang gajinya lebih besar dari {t \mid t \in \text{instructor} \wedge t[\text{salary}] > 80000}$
    • Seperti query sebelumnya, tapi hanya menghasilkan atribut ID: (Catatan: sebuah relasi pada skema (ID) secara implisit didefinisikan oleh query ini ).
    • Mencari nama semua instruktur yang departemennya di gedung “Watson”:
    • Mencari set semua mata kuliah yang diajarkan di semester Fall 2017, atau di Spring 2018, atau keduanya:
    • Mencari set semua mata kuliah yang diajarkan di semester Fall 2017, DAN di Spring 2018:
    • Mencari set semua mata kuliah yang diajarkan di semester Fall 2017, TAPI TIDAK di Spring 2018:
  • Keselamatan Ekspresi (Safety of Expressions) di TRC:
    • Dimungkinkan untuk menulis ekspresi kalkulus tuple yang menghasilkan relasi tak hingga.
    • Contoh: akan menghasilkan relasi tak hingga jika domain atribut r tak hingga.
    • Untuk mencegah masalah ini, kita membatasi set ekspresi yang diizinkan menjadi ekspresi aman (safe expressions).
    • Sebuah ekspresi dalam kalkulus relasional tuple aman jika setiap komponen t muncul di salah satu relasi, tuple, atau konstanta yang muncul di P.
    • Catatan: ini lebih dari sekadar kondisi sintaks. Contoh: tidak aman karena mendefinisikan set tak hingga dengan nilai atribut yang tidak muncul di relasi, tuple, atau konstanta di P.
  • Kuantifikasi Universal di TRC:
    • Contoh Query: “Temukan semua mahasiswa yang telah mengambil semua mata kuliah yang ditawarkan di departemen Biologi”.
    • Catatan: Tanpa kuantifikasi eksistensial pada student, query di atas tidak akan aman jika departemen Biologi belum menawarkan mata kuliah apa pun.

Domain Relational Calculus (DRC)

  • DRC adalah bahasa query non-prosedural yang setara kekuatannya dengan kalkulus relasional tuple.
  • Setiap query adalah ekspresi berbentuk: .
    • $x_1, x_2, ..., x_n$ merepresentasikan variabel domain.
    • P merepresentasikan formula yang mirip dengan kalkulus predikat.
  • Contoh Query DRC:
    • **Mencari ID, nama, dept_name, salary untuk instruktur yang gajinya lebih besar dari {<i, n, d, s> \mid <i, n, d, s> \in \text{instructor} \wedge s > 80000}$
    • Seperti query sebelumnya, tapi hanya menghasilkan atribut ID:
    • Mencari nama semua instruktur yang departemennya di gedung “Watson”:
    • Mencari set semua mata kuliah yang diajarkan di semester Fall 2017, atau di Spring 2018, atau keduanya: (Kasus ini juga bisa ditulis lebih ringkas dengan menggabungkan kondisi OR dalam satu klausa section ).
    • Mencari set semua mata kuliah yang diajarkan di semester Fall 2017, DAN di Spring 2018:
  • Keselamatan Ekspresi (Safety of Expressions) di DRC:
    • Ekspresi aman jika semua hal berikut berlaku:
      1. Semua nilai yang muncul dalam tuple ekspresi adalah nilai dari dom(P) (yaitu, nilai-nilai muncul baik di P atau di tuple relasi yang disebutkan di P).
      2. Untuk setiap subformula “ada” (there exists) dalam bentuk , subformula tersebut benar jika dan hanya jika ada nilai x di dom(P1) sedemikian rupa sehingga P1(x) benar.
      3. Untuk setiap subformula “untuk semua” (for all) dalam bentuk , subformula tersebut benar jika dan hanya jika P1(x) benar untuk semua nilai x dari dom(P1).
  • Kuantifikasi Universal di DRC:
    • Contoh Query: “Temukan semua mahasiswa yang telah mengambil semua mata kuliah yang ditawarkan di departemen Biologi”.
    • Catatan: Tanpa kuantifikasi eksistensial pada student, query di atas tidak akan aman jika departemen Biologi belum menawarkan mata kuliah apa pun.

Summary

Kalkulus Relasional adalah bahasa query non-prosedural yang memungkinkan pengguna menyatakan apa yang diinginkan tanpa menentukan bagaimana cara mendapatkannya, berbeda dengan Aljabar Relasional yang prosedural. Terdapat dua bentuk utama: Tuple Relational Calculus (TRC), yang berfokus pada variabel tuple (t) dan predikat, serta Domain Relational Calculus (DRC), yang berfokus pada variabel domain (x). Keduanya menggunakan formula kalkulus predikat dengan operator perbandingan, konektor (AND, OR, NOT), dan quantifiers ( untuk “ada” dan untuk “untuk semua”). Konsep Safety of Expressions sangat penting untuk memastikan bahwa query tidak menghasilkan relasi tak hingga, dengan syarat semua komponen tuple atau variabel domain yang dihasilkan harus muncul dalam relasi atau konstanta yang disebutkan dalam predikat query.