Relacijska algebra
Iz E-študij, proste zakladnice študentskega znanja
- Relacijska algebra in relacijski račun sta formalna jezika povezana z relacijskim modelom
- Neformalno je relacijska algebra visoko-nivojski postopkovni jezik, relacijski račun pa nepostopkovni ali deklarativni jezik
- Formalno sta ekvivalentna
- Vsak jezik, s katerim lahko pridobimo relacije, ki jih je moč pridobiti z relacijskim računom, je relacijsko popoln (relationally complete)
- Operacije relacijske algebre se izvedejo na eni ali več relacij, z namenom, da bi pridobili novo relacijo. Pri tem se osnovna relacija ne spremeni
- Tako operandi kot tudi rezultat so relacije -> izhod ene operacije je lahko vhod v drugo
- Omogoča gnezdenje izrazov – tako kot velja za aritmetične izraze. Tej lastnosti jezika pravimo zaprtje (closure)
Vsebina |
Osnovne operacije
Relacijska algebra definira šest osnovnih operacij. Lastnosti osnovnih operacij so, da lahko z njimi definiramo katero koli drugo operacijo in, da ne moremo nobeno izmed njih izpustiti, brez izgube izrazne moči.
- Selekcija
- Projekcija
- Kartezijski produkt
- Unija
- Razlika
- Preimenovanje
Selekcija
Selekcija je unarni operator, definiran kot σF(R), kjer je R relacija, F pa pogoj oblike aθb. a in b sta atributa (ali pa je eden izmed njiju konstanta), θ pa je operator iz množice {<, ≤, =, >, ≥,
} (gre torej za primerjavo dveh atributov ali atributa in konstante). Rezultat selekcije so vse n-terice relacije R, za katere je izjava F pravilna (po domače: vse vrstice tabele nad katero delamo selekcijo, za elemente katerih velja pogoj F).
Rezultat selekcije je definiran samo, če so imena atributov, nad katerimi operira, prisotna v glavi relacije, nad katero operira.
Formalni zapis selekcije z relacijskim računom:
- Primerjava dveh atributov: σaθb(R) = { t(k): t ∈ R, t[a] θ t[b] }
- Primerjava atributa s konstanto: σaθv(R) = { t(k): t ∈ R, t[a] θ v }
Zapis selekcije z SQL stavkom:
SELECT * FROM `R` WHERE a θ b SELECT * FROM `R` WHERE a θ v
Primer:
|
|
|
Projekcija
Projekcija je unarni operator, definiran kot πa1,..,an(R), kjer so a1,..,an is a set of imena atributov. Rezultat projekcije so vse n-terice (vrstice v tabeli), ki pa so sestavljene samo iz komponent, ki pripadajo atributom {a1,..,an} (po domače: iz tabele odrežemo vse stolpce ki niso navedeni pri projekciji).
Rezultat projekcije je definiran samo, če je množica atributov a1,..,an podmnožica atributov relacije R.
Formalni zapis projekcije z relacijskim računom:
- πa1,..,ak(R) = { t(k): ∃ u (u ∈ R ∧ t[1] = u[a1] ∧ ... ∧ t[k] = u[ak]) }
Zapis projekcije z SQL stavkom:
SELECT a1, ... ,ak FROM `R`
Primer:
|
|
Kartezijski produkt
Kartezijski produkt se pogosto imenuje tudi križni produkt ali križni stik. Zapišemo ga kot R × S, kjer sta R in S relaciji. Rezultat kartezijskega produkta je množica vseh kombinacij n-teric iz R in S.
Formalni zapis kartezijskega produkta z relacijskim računom:
- R × S = { t(n+m): ∃ u (u &isin R ∧ t[1] = u[1] ∧ ... ∧ t[n] = u[n]) ∧ ∃ v (v &isin S ∧ t[n+1] = v[1] ∧ ... ∧ t[n+m] = v[m])}
Zapis kartezijskega produkta z SQL stavkom:
SELECT * FROM `R`, `S`
Primer:
|
|
|
Kartezijski produkt navadno omejimo s selekcijo.
Unija
Unija je binarni operator, definiran enako kot unija nad množicami.
Rezultat unije je definiran samo, če so imena atributov, nad katerimi operira, prisotna v glavi relacije, nad katero operira.
Formalni zapis unije z relacijskim računom:
- R ∪ S = { t(n) : t ∈ R ∨ t ∈ S }
Zapis unije z SQL stavkom:
... (SELECT * FROM `R`) UNION (SELECT * FROM `S`) ...
Rezultat je definiran samo ko imata oba operanda isti shemi (ujemata se v istoležečih atributih).
|
|
|
Pozor: Anja se pojavi v rezultatu samo enkrat (rezultat je namreč množica).
Razlika
Razlika je binarni operator nad dvema relacijama, ki je definiran enako kot razlika nad množicami.
Rezultat razlike je definiran samo, če so imena atributov, nad katerimi operira, prisotna v glavi relacije, nad katero operira.
Formalni zapis razlike z relacijskim računom:
- R - S = { t(n) : t ∈ R ∧ ¬ t ∈ S }
Zapis razlike z SQL stavkom:
... (SELECT * FROM `R`) MINUS (SELECT * FROM `S`) ...
Rezultat je definiran samo ko imata oba operanda isti shemi (ujemata se v istoležečih atributih).
|
|
|
Preimenovanje
Tega operatorja na predavanjih nismo omenili.
Zapis preimenovanja z SQL stavkom:
SELECT a1 AS b1, ... ,ak AS bn FROM `R`
Izvedene operacije
Poleg šestih osnovnih operatorjev poznamo tudi mnoge operatorje, ki jih lahko zapišimo kot kombinacijo osnovnih. Zaradi njihovih zanimivih algebraičnih lastnosti (in boljše preglednosti zapisa) jih pogosto uporabljamo v zapisih operacij.
- Stik
- Presek
- Količnik (razlika)
Presek
Presek je binarni operator nad dvema relacijama, ki je definiran enako kot presek nad množicami.
Rezultat preseka je definiran samo, če so imena atributov, nad katerimi operira, prisotna v glavi relacije, nad katero operira.
Zapis preseka z osnovnimi operacijami:
- R ∩ S = R - (R - S)
Formalni zapis preseka z relacijskim računom:
- R ∩ S = { t(n) : t ∈ R ∧ t ∈ S }
Zapis preseka z SQL stavkom:
... (SELECT * FROM `R`) INTERSECT (SELECT * FROM `S`) ...
Rezultat je definiran samo ko imata oba operanda isti shemi (ujemata se v istoležečih atributih).
|
|
|
Naravni stik
Naravni stik je binarna operacija, zapisana kot: R [X] S, kjer sta R in S relaciji. Rezultat naravnega stika so vse kombinacije n-teric iz R in S, ki se ujemajo v vseh skupnih atributih. Če relaciji R in S nimata skupnih atributov, potem je naravni stik enak kartezijskemu produktu.
Primer:
|
|
|
Količnik
θ-stik
R F S
Stik Theta med relacijama R in S vrne n-terice (vrstice), ki zadoščajo predikatu F kartezijskega produkta R in S
Predikat F je oblike R.ai S.bi, kjer je aritmetična operacija (<, ≤, =, >, ≥,
).
Theta stik lahko izpeljemo s pomočjo selekcije in kartezijskega produkta: R F S = F(R S)
Stopnja Theta stika med R in S je seštevek stopenj operandov relacij R in S. Če predikat F vsebuje zgolj enakost (=), gre za stik tipa Equijoin
Za tiskanje
Del članka je na voljo v obliki skripte v pdf formatu.

