Rachunek relacyjny

Wikipedia:Weryfikowalność
Ten artykuł od 2021-04 wymaga zweryfikowania podanych informacji.
Należy podać wiarygodne źródła w formie przypisów bibliograficznych.
Część lub nawet wszystkie informacje w artykule mogą być nieprawdziwe. Jako pozbawione źródeł mogą zostać zakwestionowane i usunięte.
Sprawdź w źródłach: Encyklopedia PWN • Google Books • Google Scholar • Federacja Bibliotek Cyfrowych • BazHum • BazTech • RCIN • Internet Archive (texts / inlibrary)
Po wyeliminowaniu niedoskonałości należy usunąć szablon {{Dopracować}} z tego artykułu.

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 R {\displaystyle \mathbf {R} }

R
           
t {\displaystyle \leftarrow t}
t {\displaystyle \leftarrow t}
t {\displaystyle \leftarrow t}

2) Zmienna t {\displaystyle t} posiada zakres dla wszystkich krotek relacji R . {\displaystyle \mathbf {R} .}

3) Podstawowa forma: { t 1 A i 1 , t 2 A i 2 , t 3 A i 3 , | θ } , {\displaystyle \{t_{1}A_{i}1,t_{2}A_{i}2,t_{3}A_{i}3,\dots |\theta \},} gdzie

  • t {\displaystyle t} – zmienna,
  • A {\displaystyle A} – atrybut,
  • θ {\displaystyle \theta } – warunek.

Przykład 1

Niech istnieje relacja

Student (id, imię, nazwisko, płeć,)

Zapytanie: Znajdź id oraz imiona wszystkich studentek.

{ t . i d , t . i m i e   |   S t u d e n t ( t )   t . p l e c = k o b i e t a   } {\displaystyle \{t.id,t.imie\ |\ Student(t)\land \ t.plec='kobieta\ '\}}

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.

{\displaystyle \exists } – Takie [...], że [...]

{\displaystyle \forall } – Zastosowane dla wszystkich

{ s . i m i e , s . n a z w i s k o | S t u d e n t ( s ) w ( W y d z i a l ( w ) w . n a z w a = M a t e m a t y k a s . w i d = w . w i d ) } {\displaystyle \{s.imie,s.nazwisko\,|\,Student(s)\land \exists w(Wydzial(w)\land w.nazwa='Matematyka\,\,'\land s.wid=w.wid)\}}

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: { x 1 , x 2 , x 3 , | θ } , {\displaystyle \{x_{1},x_{2},x_{3},\dots |\theta \},} 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: { a b | c d ( S t u d e n t ( a b c d ) ( d = k o b i e t a ) ) } , {\displaystyle \{ab\,|\,\exists c\exists d\,(Student(abcd)\land (d='kobieta'))\},} gdzie

a,b – szukane,

c d {\displaystyle \exists c\exists d} – 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: { a b | d ( S t u d e n t ( a b c d ) ( d = k o b i e t a ) ) } {\displaystyle \{ab\,|\,\exists d\,(Student(abcd)\land (d='kobieta'))\}}

Można również podać daną zmienną wprost:

3) Trzecia wersja: { a b | ( S t u d e n t ( a , b , c , k o b i e t a ) } {\displaystyle \{ab\,|\,\,(Student(a,b,c,'kobieta')\}}

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,

{ b c | e ( S t u d e n t ( a b c d e ) x y ( W y d z i a l ( x y ) ( y = M a t e m a t y k a ) e = x ) ) } , {\displaystyle {\{bc\,|\,\exists e(Student(abcde)\land \exists x\exists y(Wydzial(xy)\land (y='Matematyka')\land e=x))\}},}

gdzie

c,b – szukane,

a y z {\displaystyle \exists a\exists y\exists z} – 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

Bibliografia

  • http://tadeusz.pankowski.pracownik.put.poznan.pl/02-rachunki-relacji.pdf