From 1dd74d63a5173d233519687cfaeddfc150bf8114 Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Sun, 16 Aug 2026 14:25:16 +0200 Subject: [PATCH] [DMDB] Quick overview corrections --- .../dmdb/data-modelling-databases-summary.pdf | Bin 1395575 -> 1395728 bytes .../parts/08_quick-overview/01_theory.tex | 3 ++- .../dmdb/parts/08_quick-overview/03_qp.tex | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/semester4/dmdb/data-modelling-databases-summary.pdf b/semester4/dmdb/data-modelling-databases-summary.pdf index 6422dc9dccf869b7bcca5737b3128e7c365a3deb..8e4bc348746926852815a04a8cc15baba5fe7a09 100644 GIT binary patch delta 17018 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 z z;pfZGWzEWtVB)I3Gvrg7 zJxI7Nz<{YU*?jZ-9DY=hU>={9-<%~XKWKh(+OrjA7^z?x%}niokU9$p;KNxso|m(4 zY~F6)Fuj`Ko{2p)F@3|lv})t)`6*h&SS8O>p8aAhYoqn~$$0FVzVsCi2WldyoW?t+ zs>>G(8x7)WPx75EzE?&Pa7~5Nk-zv#1fectW%5GZsVWV^8?nN9hD;|+yRsOW0^?3b z`ZIJr2y;uvu3^$)ZK;;)q?Y^E*C?i2{=JXPvlH2a!c%Ij>Z34)X6k;Qr_|L2lzVkAjCK68DhEVF6szKKF z-$`3=Ze#f<6tU%WiLnL55-?|)nnK>~oe2M~Zt0yr5He5*ypBH4$-?ysV@Ru0qecd| z^oz|n4G$9p5!%O6AOFFPFwiagaz+4W3WuYc_uyv_9TDva)P^h1D3iL&r);s*j+s3{ z|FmZ0HHM#6OJpbUcv{MspZNQ#haY0_+pz27p*9Mn=0*2&Xp_%kqEzJJi0daBRlxl( z2bmc3BMU)8SMSDWa^9WDk+5gART=*)&w&aDU*|=(%(@cRsJ8GDWEG%*1qZ_intXQZ z>vb#zvX@~4;M8Q@Mwfaq;Wza=YeCyeYye@g~5e7Hpjug^iiDru=Mu3v435g z(e^7sjl{@N+FAcvg~JwgZl7g#DmjGxMCK(l9G4w9e=iXsxy9k+0*%J7T-qPXKmyZr z-Y5;>de;+1x-&)_ZrsP<8rtwZKeAp-`M? zqumarcIRsc+|tpu#ya2u{kq4*C!BKTO!=N4y@%L`j@TFTa33i=X*selK5NhW?42g~ z6|DcHx_9@SuxSl@ez3M9TG@!HH#E@cr7Ei59vTWsme3u>x8yN{yG7Tqr7MH#lyPJA z-aqjONI0#ZVjmvQUX)#Gs1l$kU*)%Mu~7Y?f;cDItFT>@H!?yqmyY|F`*7|ZASYdi z!=USMCJPe5D!5N{lDGAyOi+LM0W}O05G}}?@WzhA<~h7>O`hFg#*0sTZKrX?EFDaC zSMEq_p}anUG_^K?%y7yqI1e_p7X4^;)~4qV@GK~5dc(+WRR*S`3az{BsNwhnEav-VU71++uU~&i4KCrHB^Ap+je!=?w zg2&|*r?~@Pxu6q+d!Q@$H%}}i)-_j@d^}DMCrW?$CX^QYiVjIXe1=gkbw@R|H=Q~e z_1kKxP3Svirju!@QQzxG>G{2x;yG;)U@P5k`aMIwPr=={hIvKmqP{d;ejZy|>Pb$P zby@5acinf2zzBCcY6>Ju3$Oj*+Bi69{RK8!vg9uuZ{k2~3Zd_>kFUm0*ICf9?cXD5 zTAs$AZ{o0fE_fZfb!)e2ktQ1au)h$Gb}X@Ava|K|E`rapxv-hvOXVQpNoRW#1FV9} zokIDss9O4?BNsYdZUqu_-|T#r_bYu{!nT(OH=R#mRz7n3E@@jCzqUTsw8{rJ$*;6zKmFK?3KA;D4%q|_Qfp$_EV;h-n#a)7^6bW0+QGWkgi2I?)V&snN&xSVH ze^hs9hYW#;y;TbBj{fJDsIh~HAAq?XceIwSwQe}|d}&ZC{L4W1(F1kA*PT-9z`xFr z$SP1|z`iC%=J&F_m8Gf@;1)LC`eye^d%faj{zp|)33bu`W!7i~E0&ULwPI5YE!f8{ z3Wu2I5*atrr!Ff(ahTmG_T8`59r=*wiw_(TXKA%$Q!4?}Pt8P9InNL}LLhk4pRpUs zj@YG;?7O^ah;*1&d_0KjdQvp`jAAUl+%=rd(*}_?TFukVo)qILJkhKPPkju$@IDU# zf**Y?*0z5OObVP2elU}MT$Jt*HyS~d)HlZ1btN-F)D^}*Ix^)wNx$PwsSjC%5}Q~5 z^zrH2nHsnBN3TlXciDHRPhf^MMdfez#jGp*7cTNPF2m_rB}_kyY$$j+r0KsKdWcd{ zJVxy*XyCLC)GP*#SG(aCn}p;t+A?k@O$-B^ZmnO7r^uml^|9Ra-!`&$LZ#L=bHT;m z)=yBvweNa|-74%6q0bVyu$trFDtR>*06QTv0S!S&erh5jo!3@1QGj{1m*lh55UO@| z@v+QdBc+)e<#H{b+0Gdi_)eu^!oOlH_zroABfl~IwS|=@VFU(b5M#k!*v%x|tnKvc zl1a1|8@c;uFTJJ3ihapfr{W5d{#nB0IVbY)p2hmdZ#zgUwvBI480XBe^!{Pq znj9G7`>2ygv6}SQVvxYHFURgt198mxu7LkcWZKv^%H^5X`yO?KqT(Yn%h6cIo}uob z_j3IR4n-}TaTnoj^2c1YA-mnYB7yAw=@b*$%;|&BJ+xE}k@{w}Or2 z6hG!O_(1&akFJfODc2&ByFc#tcP_cBkL(PO%c&gOLMhBmtpB0>hUURKg-~MyiAhRuiu3S@v5E4E zNpXpZ^RkO^^N5LqB)O!-IYfm>1^!QpAp(nng}s%lHR->J+0#V%vFL$s-wCa-LXR3e zmfOG8)O@3H&*te;Af$0;HoH`;kgl zAa(#-EFy}f@+;*F7E@u6>dS0la}b0&C9d4KmaS?+3!Dnpp;x;wvENZnhJ)o%Haq)~ zZ>j~By{7KT&KDjesTd1@Q%5s3r7k*!Kc~lAv4l1CrCdsLs9bNZY^}cXRUaN-gu=Sj zqVkkzEmLlSYl7RN1fxNaRed`tLv~_nKw+DzftvMVV1kFOVf1(#{~%iPE?dgW%;IXk zjBC{k$Lb8W9ph*7rm47Lisr?Hwl3aptOl^tS>_@vRss=`y!EGwYai{T{7GWDdn`6h8DxZtI8ibrBjp7{#<^qH~c7(Te_a2>w~USzFe2 zQB*wwJ>mwO`vN=Bag#M;96f$L>;{r^sr68;U|z7td^_oJ<4fpZYc4%}7r1kA{(#iJ z4OEnTBGHN=0XRaSQQcZIz26wh4tvr#H6Y3zOR?*|hph2Hf?=~q07+`rKHttbHgG?A zvEWB@EH6rIp=ME)2{GjGteSO2I>ru^9=08{3wpN1H;MLGFNAEVz1-Al6Qw|QYyH_& z*3w?x#vE&H*6F}IYe8%IbarFxDx3?1LugRgQrMx{SEw{#rsb(va>C0I&yHmcqNFyQ zE5sd79m7C$J+7qR^|r#As!=|@?fRQFbEeWS;m#m;TsstX?(fKU|6);*)fsqLG-(bIWFM^=GVP(9uoBKyVb>7WoD>oTPbKsvDX1wD1=j+HAd6iwlg#51aph9n zP{WVH&EvdhFc+l%*_ELxf-5jfQ2I0?GKFzP$^!M$?X$Pm`>GQ4(mpe`vnVEs=d+}G z?D)L63Fosy9MIiSvh~uiGnnuD4*w`9da!G7)T6{P`E+FFwpKV*1e3iB5hw+tB$;wJ zypf0bL_G^60zrobCv2`Rv4uop>tVkLdsEE5@Xg4R0rVWat&k1)@#l59As6X3BK5=V zv(2VUV2OgnBI`jJkd!_huvN$n*#99oR;5G#BXnfQNlw80>+D%Gr7H%Q#~tijD%g>( z?(JExNhT$p-`F%tDHwhkB{mY7zkg+?^qIhs{6(zJ9rTY$Yq;hv0{olfM9wYU@Sp8N z$^7;y%zrs_ajS?jkLfItiS`l5GLJf_i;R}SGWJ$$^WvJnUBJ#o_r{Bodp8haX79mL z7(#o58oe7a5B(j%s=yWP|H+D@ld1v~)(eMkL`(HU1ir=En^ZrYcxQZ0{?fdy5SQrAE>Pl^+F<)CJ@md%m$;Gd7e+fnviuwpA`T9$_k=i29@^U zadi1IjHl1!Z@vu$#V5cI2 z)@)iwR*X`}g#06A3A6tm^TIVmZYX}yk_(70|1zCo0vZ~P3nZqt2A7;c0M>f2Yq1)G zQEHK0gD#9=k0JO)xo3Pk^HEofagJfzd%;#9A0a+|kkz7|!@~B6?gW^CAmnl8nqwn1qnSy-+;h)V;Ef2-z^V(FW8;Q$dKvC2K=%@+#;u zt#8ofGtFR&78e1w6RR*~z1bH5W8){#3#zfmWx3h@B9r?_VDwa0Ecrstp&)D?uIJk%eHVNQgP(b!0jRg26b>Q7oaK#*P-u0+lX!87S-Z2 z&jNn*ehSkO5L+-nZ@6sd11ZLHNSt!V^Wsq32eXZL=!r=e#_>%zqGO()*ci=E-~ZKU zLn|4)lux@1y$-~=q4Z5GkIPF|l)o!6$AI0m2hzKlj$E-V`6ZxGO!%gpl}|@77-6-b zsBbF%Giuh9yW(03hU7~H-FbZi&~2;qhnl(=CS9jC`^HWfX z%KOg}vHzNdrcZ&L9PL@GFN#8v70SuaQPdB&%beh>`xqRb^!X?c%fA3BFWP4Y>WA0% zHRVBC)MS+u>bQjXVVRLEI!DFH=to2+kMMT!4Wix4_#@GD?qA)TC5G4jD+9$&X5t+r zyU$;g!vs|NxSIc!2h~FRtmwD6@Ltg&P%`1#{U}Lo4_JzFb3dTO%VeEAMuN%Dxlj7y z-Fx52Vo@Kq>cK@Zc0YiBYn5>gi6&j%yFm$|-nfRBif0qG!eYRH-q zTg4ZYIlz^_W}e46T1Via61&1#LhY|j(S)LLWu-8=3pwX3@)4|;Umdsx++ z&ScE5LSal`&9*AM_Op&lT435s3RL=OB2K-dt1D{H?%&#!N$bGblE>U?4*Is_m4_6Eu?YaRwG zZWKhJ&A%`Us9((m!yI~q2HDgkV9q?h60WGi3^;HXAxyrp z)iq2UsJJ?INcq>@#PikFQid@~U5ro#FG9BM+gYpEV>zwZ*}sh+{e0riL|9H;G?@L( zR83nU4Fm$?r^eCg2B(l0l~M>_nf7Mbx)>{N0*l6MB^5Fa-ul;c4Uylqv{=Ly;oS%= z73{B(FM`^~PZi280({0Ob-cFrL;qG9F8K85TWqKg2_BpUP>XqCRVIPcYcAr%3)`n} z4BWAeF1D=gcRxao?^knDK5s{Il^ttCe>HQy1Lo&s=F^d4G*9;yb)bdpqcxZIe(MbS zB65Eh-r*Xg-)OyXsu+#CnDyPat&}6887`l`v8^m8WYj&UE{ z8So{1bO@JwsD*V1tIq89Q}IIKiebosH8xUqAYCH*Mk|_OS2fA#YIe%pOo4ppSzyU1 z9f0x_9x7n{g}s;j96bu0)9^)4L`{Ql5GDDuR>wG*DWDAT@KT?clI&D@&h87p#8Z=s zn;{HFP7Tqdmu^i)jylACOXF0>-Tf>UwB?IKrH_-F+Uq>E5JkD}x<_C3HxuDM5@jl* zAoomz7N`EZp}!XSyTdMjbwAHrRS&HZ5=2}~%%UB4C0sMV(8*hE=m~iGl6(73dMzXp z=LHkb`}neY3zl47EH|;|d4Vg21f+dRW03;gU*~-3*=)$6CeW`F@U6?8@~1-dkjzTr z+X^T=2|R6C6~M8cOBD)6=d>R1ECbqLa00xcaRT|EIyfLNI*buEpT6xwK7geL(Eqi_ z_s$C|E~Pi>`q})nr1+t`*)5X7$BYp8*$2I z4K-Z{?}8_fB>4Vc5`Jo`d|pEf0U;oAv*kxlT+VuF`S z30_%D@auaM{O-{Ne|SE@pZ=KOf34&ru=vid1n-?s@b`}=_~#=D{&P=)4=yJ+)+FDU zt?9-D+4mFFet6-E9D=4o&{U>P>&}^E>+TLZsje1TwW>-7+|^ntYaOmuP&@2Q?lR)dWw7lIZ za0al<;j*sbvXJ4P2do9UTF9jr?#=<0G~7!-EACoi*P6N((OKMZSte3egkhxl7*P6N(G|}mCZzldYJc2(qX=QJ+xUtEK*d|LFo2+4MvXZ{Z()lLK kVw*YB>b;j7Hr8$Z9|Q!Se3wm26(9;TIWr0+B}Gq03SA+eF#rGn delta 16850 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 WC8X__=1UbI3Nkb^3MC~)Peux;%r;5@ diff --git a/semester4/dmdb/parts/08_quick-overview/01_theory.tex b/semester4/dmdb/parts/08_quick-overview/01_theory.tex index 723d4ca..951923f 100644 --- a/semester4/dmdb/parts/08_quick-overview/01_theory.tex +++ b/semester4/dmdb/parts/08_quick-overview/01_theory.tex @@ -27,6 +27,7 @@ Finally, we remove all redundant FDs. Below a short explanation as to how to check if a given relation is in any of the normal forms. A relation being in a NF further down the list implies it also is in the above, whereas a relation \textit{not} being in a higher up the list NF implies it isn't in the further below. +Note that the former is implied by the definition of each normal form, in that each requires the DB to be in the previous NF, as well as fulfilling the following conditions: \begin{itemize} \item \bi{1NF}: Each attribute cannot contain further tables or arrays (this is very commonly given in the tasks) \item \bi{2NF}: Determine the candidate keys. Then for each non-prime attribute (i.e. attribute not part of any candidate key) determine if it depends on @@ -46,7 +47,7 @@ This means that for determining if a relation is in 3NF or BCNF, we need to be a This algorithm works as follows: \begin{enumerate} \item Compute the minimal cover - \item Create a relation for each FD $\alpha \rightarrow \beta$ by defining it as $\cR_i = \alpha \cup \beta$ + \item Create a relation for each FD $\alpha \rightarrow \beta$ of the minimal cover by defining it as $\cR_i = \alpha \cup \beta$ \item If no relation $\cR_i$ contains a superkey, add a relation based on a superkey (or better a candidate key) \item Finally, remove redundant relations, i.e. ones that share the same superkey by combining them (e.g. with the example from minimal cover, we would end up with relations $(A, B, C, D)$ and $(A, B, C, E)$, combine them $(A, B, C, D, E)$) diff --git a/semester4/dmdb/parts/08_quick-overview/03_qp.tex b/semester4/dmdb/parts/08_quick-overview/03_qp.tex index 096be61..8efd89a 100644 --- a/semester4/dmdb/parts/08_quick-overview/03_qp.tex +++ b/semester4/dmdb/parts/08_quick-overview/03_qp.tex @@ -19,14 +19,14 @@ Given $B$ frames of memory and $N$ records, we have (typically I/Os in pages to \item For a clustered index, $\texttt{cnt}(P_F) = \texttt{cnt}(R') \div (F_L \cdot R_L)$, with $R_L$ the number of records per leaf page and $F_L$ the fill factor. \item For an unclustered index, $\texttt{cnt}(P_F) = \texttt{cnt}(R')$, with $\texttt{cnt}(R') = \texttt{cnt}(R) \cdot S$, with $S$ the selectivity of the predicate. \end{itemize} - \item \bi{Hash Index}: Cost is $1 + \texttt{cnt}(R') \div L_L + \texttt{cnt}(R')$, where the $1$ is to do the lookup, + \item \bi{Hash Index}: Cost is $1 + \texttt{cnt}(R') \div R_L + \texttt{cnt}(R')$, where the $1$ is to do the lookup, $\texttt{cnt}(R') \div R_L$ to fetch the row IDs and $\texttt{cnt}(R')$ to fetch the records (this is an up-to, it is $\texttt{cnt}(R') \div R_F$ as minimum, for clustered index), with $R_L$ the number of records per Leaf and $R_F$ the number of records per file. \end{itemize} \subsubsection{Projection} -Remember that we need the sort-based and bash-based approach to eliminate duplicates. +Remember that we need the sort-based and hash-based approach to eliminate duplicates. \begin{itemize} \item \bi{Partitioning}: $\texttt{Cost}_\texttt{part}(R) = \texttt{cnt}(R) + \texttt{cnt}(R')$ with $\texttt{cnt}(R') = \texttt{cnt}(R) Q$, with $Q$ the fraction of selected attributes divided by total attributes