Rachunek relacyjny
Ten artykuł od 2021-04 wymaga zweryfikowania podanych informacji. |
Rachunek relacyjny – teoretyczny, deklaracyjny i nieproceduralny model operowania danymi w bazie danych. Zawiera w sobie relacyjny rachunek krotek (RRK) oraz relacyjny rachunek dziedzin (RRD). Są to elementy modelu relacyjnego baz danych gwarantujące deklaratywny sposób określania zapytań do baz danych. Jest on oparty na alternatywie i koniunkcji.
Rachunek relacyjny a algebra relacyjna
Rachunek relacyjny jest w wielu wymiarach podobny do algebry relacyjnej. Algebra relacyjna również jest częścią modelu relacyjnego. Różnica między tymi dwoma rachunkami występuje w sposobie określania zapytań do baz danych. Podczas gdy rachunek relacyjny jest rozumiany jako język deklaratywny, czyli taki, w którym programista opisuje warunki jakie musi spełniać końcowe rozwiązanie, to algebra relacyjna jest językiem imperatywnym, gdzie nakazuje się szczegółową sekwencję kroków prowadzących do rozwiązania. Ponadto rachunek relacyjny u swoich podstaw ma logikę matematyczną, a algebra relacyjna – teorię mnogości
Twierdzenie Codda
Mówi ono o tym, że rachunek relacyjny i algebra relacyjna są równoważne logicznie i pod względem siły ekspresji, zatem dla każdego wyrażenia w rachunku relacyjnym istnieje równoważne wyrażanie algebraiczne i vice versa. Oznacza to, że można zadać zapytanie do bazy danych w jednym języku tylko wtedy, gdy również można je zadać w drugim z nich.
Relacyjny rachunek krotek (RRK)
Stanowi on teoretyczną podstawę języka SQL. Jest językiem rachunku predykatów pierwszego rzędu i można go wykorzystywać do formułowania zapytań do relacyjnej bazy danych. Wyraża zapytania za pomocą zmiennych i formuł.
1) Niech istnieje relacja
2) Zmienna posiada zakres dla wszystkich krotek relacji .
3) Podstawowa forma: gdzie
- – zmienna,
- – atrybut,
- – warunek.
Przykład 1
Niech istnieje relacja
Student (id, imię, nazwisko, płeć,)
Zapytanie: Znajdź id oraz imiona wszystkich studentek.
t.id, t.imię – szukane atrybuty,
Student(t) – Przez ‘t’ oznaczamy domenę relacji Student, warunek konieczny
t.plec – warunek
Przykład 2 z użyciem kwantyfikatorów
Niech istnieją dwie relacje
Student (sid, imię, nazwisko, płeć, wid)
Wydział (wid, nazwa)
Zapytanie: Znajdź imiona i nazwiska wszystkich studentów, którzy studiują na wydziale Matematyki
Mając dwie relacje połączone ze sobą, trzeba skorzystać z pomocy kwantyfikatorów do zapisania warunku.
– Takie [...], że [...]
– Zastosowane dla wszystkich
s.imie, s.nazwisko – szukane atrybuty,
Student(s), Wydział(w) – oznaczenia domen relacji, warunki konieczne
w.nazwa, s.wid = w.wid – warunki
Relacyjny rachunek dziedzin (RRD)
Stanowi on teoretyczną podstawę języka QBE (Query by Example). W tym rachunku operacje prowadzone są na dziedzinach atrybutów.
Podstawowa forma: gdzie
x – zmienna dziedziny,
θ – warunek.
Przykład 1
Niech istnieje relacja
Student (id, imię, nazwisko, płeć,)
Zapytanie: Znajdź id oraz imiona wszystkich studentek.
0) Na początek wprowadźmy zmienne dziedzin, takie, że:
id = a,
imię = b,
nazwisko = c,
płeć = d.
1) Pierwsza wersja: gdzie
a,b – szukane,
– kwantyfikator + zmienne, których nie szukamy,
Student(abcd) – deklaracja zmiennych do danej relacji Student, warunek konieczny
d = 'kobieta' – warunek
Jako iż nie trzeba dodawać wszystkich kwantyfikatorów ze zmiennymi, których nie szukamy, wystarczy ograniczyć się do tych, które trzeba użyć w warunku:
2) Druga wersja:
Można również podać daną zmienną wprost:
3) Trzecia wersja:
Przykład 2
Niech istnieją dwie relacje
Student (sid, imię, nazwisko, płeć, wid)
Wydział (wid, nazwa)
Zapytanie: Znajdź imiona i nazwiska wszystkich studentów, którzy studiują na wydziale Matematyki
0) Na początek wprowadźmy zmienne dziedzin, takie, że:
Student:
sid = a,
imię = b,
nazwisko = c,
płeć = d,
wid = e
Wydział:
wid = x,
nazwa = y,
gdzie
c,b – szukane,
– kwantyfikator + zmienne, których nie szukamy, ale potrzebujemy do warunku
Student(abcde), Wydzial(xy) – deklaracja zmiennych do danych relacji, warunki konieczne
y = 'Matematyka', e=x – warunki