Reláció algebra
Műveletek
Projekció (Vetítés)
Adott relációt vetít le az alsó indexben szereplő attribútumokra.
\(\Pi_{A,\,B}(R):\)
Szelekció (Kiválasztás)
Adott relációból kiválasztja az alsó indexben szereplő feltételnek eleget tevő sorokat
Adott \(R(A1,\;\ldots,\;A_n)\) reláció esetén a \(\sigma_F\) kiválasztás \(F\) feltételének felépítése:
- Atomi feltételek
- \(A_i\,\circ\,A_j,\;A_i\,\circ\,c\)
- ahol \(c\) konstans, \(\circ\in\{=,<,>\}\)
- Ha \(B_1,B_2\) feltételek, akkor \(\neg B_1,B_1\land B_2, B_1\lor B_2\) is feltételek
- Ebből következően \(\{\ne,\;\le,\;\ge\}\) alkalmazható
\(\sigma_{A=a\;\lor\;C=h}(R)\)
Halmazműveletek (Unió, Metszet, Különbség)
Majdnem teljesen a várt módon viselkednek
Egy feltétele, hogy az operandusok attribútumai megeggyezzenek és azonos sorrendben szerepeljenek
\(S-R:\)
S R S - R
A | B | C A | B | C A | B | C
----------- ----------- -----------
a | b | c a | b | c g | a | h
c | d | e c | d | e
g | a | h g | d | f
Descartes-Szorzat
Itt az attribútumok egyenlősége nem számít, viszont az azonos nevű attribútumokat meg kell különböztetni egymástól.
\(R\times S:\)
R S R x S
A | B | C A | B A | R.B | C | S.B | D
----------- ------ ----------------------
a | b | c b | r a | b | c | b | r
c | d | e q | s a | b | c | q | s
g | a | h c | d | e | b | r
c | d | e | q | s
g | a | h | q | s
g | a | h | b | r
Átnevezés
Az átnevezés attribútumainak száma meg fog egyezni a kiinduló relációéval.
\(\rho_{S(C,D,E)}(R)\) esetén az \(R(A,\;B,\;C)\) relációból az \(S(C,\;D,\;E)\) reláció lesz, amely soraivan megegyezik \(R\)-el, az attribútumai perig rendre C,D,E.
Amennyiben az attribútumokat nem kívánjuk átnevezni, erre shorthand jelölés: \(\rho_S(R)\)
Théta-összekapcsolás (join)
Jelölés: \(|X|\), később \(\Join\)
\(R(A_1,\;\ldots,\;A_n),\quad S(B_1,\;\ldots,\;B_m)\) sémájú táblák esetén:
\(R\Join {_FS}=\rho_F(R\times S)\) teljesül, ahol \(F\)
- Elemi feltétel
- \(A_i\;\circ\;B_j, A_i\;\circ\;c\)
- ahol \(\circ \in \{=,\;<,\;>\}\) és \(c\) konstans
- Vagy összetett feltétel
- \(B_1,\;B_2\) feltétel \(\implies\neg B_1,\;B_1\,\land\,B_2,\;B_1\,\lor\,B_2\) feltétel
Egyen-összekapcsolás (equi join)
Adott két oszlopban található egyezések mentél kapcsol össze...
S
| A | B | C |
|---|---|---|
| a | b | c |
| d | d | g |
| e | f | r |
R
| D | E |
|---|---|
| b | e |
| d | r |
\(S\Join_{A=D}R:\)
| A | B | C | D | E |
|---|---|---|---|---|
| d | d | g | d | r |
Természetes összekapcsolás
Azonos attribútumok mentén kapcsol össze
Lényegében az egyező nevű attribútumokon végzett egyen-összekapcsolás
A név a művelet gyakori előfordulására utal btw...
Jelölés: \(R_1\Join R_2\)
A természetes összekapcsolás
- Asszociatív
- \((R_1\Join R_2)\Join R_3=R_1\Join(R_2\Join R_3)\)
- Kommutatív
- \(R_1\Join R_2=R_2\Join R_1\)
Relációkra vonatkozó megszorítások
Adott \(S\) és \(R\) kifejezések esetén példák:
- \(R = \emptyset\)
- R-nek üresnek kell lennie
- \(R\subseteq S\)
- R minden sorának benne kell lennie S eredményében
A két megszorítás kifejezőerő szempontjából azonos:
- \(R\subseteq S\iff R - S\subseteq\emptyset\)
- \(R=\emptyset\iff R\subseteq\emptyset\)
Hivatkozási épség megszorítás
ha egy érték megjelenik valahol egy környezetben, akkor ugyanez az érték egy másik, az előzővel összefüggő környezetben is meg kell, hogy jelenjen.
\[ \Pi_A(R)\subseteq\Pi_B(S) \]
Kotlin explainer
\(S(B_1,\ldots,B_k,\ldots,B_n),\;R(B_1,\ldots,B_k,A_1,\ldots,A_m): \Pi_A(R)\subseteq\Pi_B(S)\)
Itt a lényeg azon van, hogy \(S\) egy sorára annak kulcsával fogunk hivatkozni \(R\)-ben, a megkötés pedig lényegében annyit köt ki, hogy csak \(S\)-ben létező elemre hivatkozhatunk \(R\)-ben.
SQL viszonylatban ez az
ON DELETE CASCADEmegkötés a kapcsoló táblákon, ami törléskor minden kapcsolódó elemet is töröl, megőrizve az invariánst.we don't love dangling pointers, do we?
Kulcs megszorítások
Adott \(S(A_1,\ldots,A_n)\) relációban \(A_1,\ldots,A_k\quad(1<k<n)\) attribútumhalmaz kulcs, ekkor:
\(\forall i \in (k..n]:\)