Kihagyás

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):\)

 A | B | C       A | B
-----------     -------
 a | b | c   ->  a | b
 c | d | e       c | d
 g | a | h       g | a

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)\)

 A | B | C       A | B | C
-----------     -----------
 a | b | c   ->  a | b | c
 c | d | e       g | a | h
 g | a | h       

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 CASCADE megkö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]:\)

\[ \sigma_{S1.A_1=S2.A_1\,\land\ldots\land\,S1.A_k=S2.A_k\,\land\,S1.A_i\ne S2.A_i}(S1\times S2)=\emptyset \]