ࡱ>  xemnopqrstuvwz@=u Grd /&$(f{ \7C x]]l\G]R"[ChO_%DRTHE!c"*%W7 h>7JoK T3gܹ7hw9o;wvwRS;GT[~NcJտ/*URg+J)qL1m5mAS|{LsZ=dASw|]A+|vnWAmZ~:a1e W6Ǚ=ZϻGltoyz,in5xcdO{[spmo$՟7r~mTk⾙M?>zw@W]WSip7uwvMƃ9' k]%z 9SI4[RLWgwԹP!ĝRWХC/#vLo_4*⑚_R7?EߩA5rw}?P?:?٨~`_C>SjhۼP>G_mݘ_Lyi)(#~ lT26wբ ߩ8QԬs*ah ls0#˘|>H۝jn8V^}OyHlM:Omqa \%Fe :b7S#l!SF{jG1a 3ZڑeLB\Lp{r-q6-iCƅ-GV *EB> s'̛)Nב0 HmI2.la>2"#}Ș6c7i9rVvHm7qa+?/΋EpߦڧˎZjE%jEq6-Lq‡R+n#&lǹV+:m[_Vp=SkW SWLz1a sjɽ)Nˑ'<`jKqa o_T_RYͿX Æ~qsHԖ!Ce{jG1a 8-G~. P[҇ [B}Zeqӽo&rAq1%}ȸڑ>dL؊'^-Ǵbښ\Lu-{BeAH2&la.f3%iCƄ-є)ڠ8-Gq6-iCƅ\JJOƛYs:rVK%}ȸ;v0 \J|%r-#mȘ݉6R6YmUngR G\/ϙl5՘s^ˎz\e߯qhlE9+[}MmI2.laKS;Ҿ [O'H[!}j [y>!K nSeG\Bc=f2K.0ӽ+5_ì}X?ڗqa ktZj/cVd5&fq_~u/c^~u/1}#yn;_0ܧgXO:?S` o# k_- k_ƅ-̚g/cVdv3C3}ikڟa˘pgXlqv3}(9 zgu/sVv֩;^~Y'yup_2.l~kZƄ}rs|Mpj/K_*x3/lQǹuͯ{|N'1}]{asw1}per1>>Vݿ=-{}{SUj*陮=/Ozwa{CTgQb4o#l]śxao}P |;ccfc#|dc6Ҽ{>v=o66͇ MA=&oTKl]śxao}PۚJX؈766ҼX؈7664ol]śxao}P-|;ccfc#|dcҼmy>v=o66͇ MA=&o̹}>v=o66͇ MA=&ou[=:ct=ou|zLFo z,766 fsxe,:]͇۬ MA=&oˢNc(xao}P:~ {#mS ?ߓ u^c! XhFu6+aC=m!|Bdl-v;Yec\['7['2o]I_۱y|镰6ckGƶ)m`&cیX5XՏ 7P CV9}>c!M[37[3oR'm:ao/.XgMQlh 3(6 {}S¶ -}(6-K`kGƶ)m}(6)5K`kFƆu`[k6&6{?{5g?ۅ { l%Gfˮ˺a85m՜E6¶.OO†Xضض"c{Vs{\F/6ߞ [=2۷pakD6+\f#c[|߿-F|[M{Ž>?*^x'`!Tgi Qjh/| ȽH"xMMN0A[)-B Db&(XF DMAOS1P!8C}10l'=J[)Ƌ()[33&X D2ߤ:Հ,\|]ӯ?:g2~0rs}ɤ$]?n(^8:3rzM(Տ^P:VmƦ=}+CU; 5TG*f#1QR?JOl0d`<ﯺ# fW`!6ߥANABV4:gsFD046x]`U7?Iki;0:amȆV w:dpwa9ǃ¾:&h@f!~nrdA ObQ\wNuzQmim%u*ժťmwܽs)uݲ[m;z?:w 9Ϋ~Hˇ+2/BBBB/]si NALQiܸQ4(8 D!!!P4VK6қ7oR )zKȆP( ?o;wv҂OȺOhΜhL޻?b_AK^|>-l;Sy[/wfQj)#U;yq&xS>+G/x~- P֢H[K;ϻv_/{y{][1=_tkڛ [}>>U~"*۽Gˎ?Xg"%Ire4v1?LVhBLl oGY ;ŠQQ>bDʷ}mh|[k;H0("~cc+p2[5OLkAT-ie{r*`+n")%z5BC?{9cQ"b)'^ &:zbm(6")5hAt(nD7և߭)GIlf5F"b#2@㣋 37.KO =d߳Κ ǡzp:9i_*mt9L7y=mt}Dbg9)q:#zP%3v}I$kl*I)$ہ`.H hw]-t7#t^'94b g8DG.(s69KPT&9~ S9M[TjmTHZ D>Y[TTeY-87)GES1S}<"&E^Q1ђˉ@r6-s7@1d<3Af6d=3[n6KU/C^Yd:#2j!J."/uMmmQߔ9r9A c1ۏ'M$5KMe`!Ԡf% D;_6ZQQ 5KE'ZC(-@M.c2Q6plȱhy5%9׻(tn 2{46׋m;[@fha΋f fhjN¹EiH"1 #zRH )Ԅ.A }!WB=Ha!\,G `-L0B)V6;q}h[sk5j7jڼs.9-1_bc5lڽf=m6.I euְMS;m4csd[zSU{l:{ĸ悽=&m2Y> ^c Wd*J66767676767666W[VE埔_^19e3rl/M/tN!+ i9' #k;Q? X{:^8&ĔQRĨO0M憴G!.mEOԈC9d-WU(Dn&n##aV|H O⮛]qǽHM;=ۈn[uVJQNkpH5by9#s2Qc,EqrP;|g:bWUeϑ/wh4r 7('TGCp*!R9^G%y޿࿂w4MP/7gO'QrS~ZOyx9 OD1 SB_@5yNП 2.¿P^RJū)!o|:wbC sڗ }ġ[4OߢM ԇi;h5 nYz1MֳiOSwDCO4XD~NU?ϔ-cag#`g`g3`g `gag`c@ vvvvVP<Q ^Nnt_ϣGhOW:a逞IR]o?+׏?ʮ(Շ6іZ_)D[EV]AE]W4UE7]Q_A+I5ů{Ft%q}tC ,,♎*^_DE.,Rs)K\TTr^}w<6ޏ-졼Ћ!LuV)T'R1`GRq GԚs`4F3g+&ɡ |Z]iR§ i6çO>-| >|IiBv§O; v>|?|Z2iZйAiչtW>OwЛ a _`9EG<$En2[ Ew9;ZkK!C3u[ MQ/i%j+zkºma]zoV<\1\ Ǚ<6q8_$s!]L,h#t>"ng5}{AnV~N gNp4b y8O=-ѯ$h6KY`SE)@W7nv `: ALRbTr^=i"E`{߉jzhqBۋ +ۉȬk!`7x&|~q Ś܍t]HwEQJN;biW{(=q4?|i+𕟓sdx!::|H1^u#1 Z[9[OBuYuAFgG{PcTds J @DZP'w@2~BA 56$k}!~HP+*.|i+v|:!wFe>C]߉נ9~YRd5=t6ܗvT«{2Slvt- ">C MY@y?K<ßzE9!/!҈[ՐWԈsO1\QO6|x )<}SE\k|CE2ӹ)H&떄O)?הλ=;~.qn#mwO[V\D|붆%"+ɢ 6Mtŷ!;r y VV~0Z!Oq➛Y\qSGwfwG:]} ,b &e).NeZ+8|]ꂴt tqH[tZbL8!!!^˒ 89)p sBp87݁(k6p|O$pN2pn{< 8OS<8݁sG8}@8wmq#\8Ιs߳gyy2p >&>pMRW!.X&9(Y8uiLS$4~iKsA|f!G#ޝC1pӡeGOz( }+;}s=Q_ ڂX3Ez@Dhb/&"}sQȬG!  W܀ s1"ψ~ة:(5x#ۜH#WIoO?rlDd1#fnD˂b.-68)! >#Qs4}Ύyţ8,Fm17|bEJ gg. $_2>!ۑ# vZTl#/i-w e8-`9` p Mxd[nz)~)wx/ܶh3>IAomsp5nӧ<+vSτ7-gi;,/\q$O"*s¿ͩz5,3=?Ȧ'j):yo`Ϸj{53KM=p}J \QFD;:z$3e5\,g/9AvVcd1O`{I*熼=J *ZҪe**j (2.=2!j*"+*"Xԗ#`AmUjQEj75W㩾jN_BT]Q-uVWl-ζT5m]UVRliW mQo4{,A Z2uت]*<n:*/'A=W+3M+. J  q9KXNy;Q=]=r:N9I"G8'DgS[4O+ _9Gɡ42M䔴1t {CmP{@jv+NUv-PhC!jSp} Ҟ=N):/裯_@] }={HE[a*8MTg1k9lTeXC5Sre5Fͫ\*%@XkSV6 )Z:媙ٮ**4%O:yyG5&xM^8m xjhg lTŪݩJ3*dSѰ0H0-eZi~UŒWK5tR3Ak@GL쭵 ͎Te*&rْ*́sB Sx4Ed,[S@y6b+I0YFl0f9 v2SX(rTe8J`R\&*o򪆦bJfZoP3Xu7;TKs^F8~&9Di L4NvDC 9_]Zתz,=S~ NO瞾J+*gW9*Ui.*q-qq̅e~='coL~-D^яS}Ug@>(^ ez>,s|Lh;* m|\Fk}]_~|VF32(K2oJ?Vߗߒ7_П| zOeU# mLzR˨et~"ce~&K,U)R%e0>+.- >bP @Qόy9*1TYNr4UښU&P`O˱TN s"X#*Kz2Q_rfUs\D5@Z !L9DCRNy2"U|:Dc3A239RɠT!njsSAᲘ4x.1U5O=U[%U|0JMFKwڨZeVJT|P7^9<SYyyCTM^aՃɠ_ZOz~62,LLDGQ1ٙ \rgtpr>HϘ<xu_ 578sMdZ݆p~7I:LQ)2uôw֘nBqNw3iks6J( aN63Ig:LKL67tqgprs"7v p#'=upE.:[u\g=h,m \M7d}VMԻx 4QjjnjJAyx :Jo: 3::uB_Qn)FOmQQS}>^wjJ}@AWЇ<:0:0:ZXmlA@"Ё!iЁE(7BB`q: :0 :0:0::B~Gpï&&&|Yd;KMEg) 1&鏈DsЉЍrjdN]`0t%SW9)dR9YQ&<1_@w 9M`*;qMipQs"`+'urT_Ux|FUe`yPP%qHV*`x0终ЀVs:IX){E9qCDϠg ? eA -"I)KyL~PrL%M%TK\&ȔRM MqSQ/ +P5 $?37VpC;Oˣax׌^^cSyRU}_Ӄ=AC`YIS5;4Q>&R?e D!v#B9%D2q3'Ê cDseQkRX-:@>Fqh[K #fL(f%ş$}=  }ͳ:8zc,pem5Y2/>3DkEd4?#v]oxp<DD)~ܟc+TI56o ߢm2h4uZ ]GȥC sA,< -;})g#<E% ɰBrd]IbB mYO=<A }^R.dU9۳Gg@=ɣҘb*#ipKoZe. iʙz8VR5LIPU3䧭ӑ#ʆh^G =lйȉy9t<)Z%@=/y8Sc_lS9Жm?y}(Ie|r E&Z.*"4K_xQ~і4(o{w)Gh+͢Ӵ9MDRFXK10n*yԱ 0EsvaSĹdj;qzvI}T<5lJOs[SxP\jaj(yN>G1“Yv5=ee!O5S_{GNSyi$95'WsS\p|q.9 g !i%cx*N/F;T/gj,Q*Cꈼ2˓j8aՂN@om]U:NNķ1g'zQ(CN#&(ܗ'^ylg*E^0 3I>0c33XGƴe2[HֵYeTE)bX&\ yD=M޷~+驴ZKi;( ͸KJgiB*A;,9C%vNb\!F7, ʥ2MfdDշ,c=<.?y]QRZLͥ* VAzajK ԺF!ܫLږ9gJ:My/Sˉar2NIЩo8ls;ҙi8Klkgm@^Ӑ+Nj괡:P*즤S8UIUu5IH缼 sj8ASY_jNS146c?dz9.9lJ;wLGNR[g8UV6vflY=A_8Qm!'p*P!UszQng#wnUsUj-.eBqcLXÏ>V䲁N?ӏţ_5lx~ SdEIl *ԾY#Y^Yr]QR޷sc; JeUZ)ChSꦞ9;Is]<Խ ;bևعa-쬰IUv|X|VԇFJaYEHXSX.9:,Vy YWyŨ!?x*Mlm.aq[Rec]&ߘto3Pw7ug3@2#c3Rg;V7v:5Ӯmz-ۂ:ͦMv;nsjVOx{Wy*g)oTe6?YW:|~W>>v4j*]`WQsA/)}isͩWrӋ#f} Rڲ'3~-j(wr-b&fb#օ:Tt-E%Uv }6 XNw6&Ƥw;֜ o=F^ 갱6jDV{z\ ;DqhT͎z3u r=[ EDיE_]Q&3 fj~ߘb%ƙG$J7 N3y1}s"?Igat"jڲztaD+]$Z^2RM=5;{&}fҶrSnQ[kmBw v'8n縝v-go 7%]vhƞp;p,w뮰-ն|?h+&Iְ1Gi7ڍL[{;L9=$3BM H0!5HdLH2$9I$A!(d\H21$ IV$;C NH<$|"*"9 qCDAၢ%_qs_V[K<]Ty^LձD;WKE?UҷJNʥS4khw:]tGhrMv[P0/vSP쭂~m\w)o߄u*7yH&3z,/ӏK=\zҽ1+]hG=TCR,շPDH\ pO:}E0lǏYESһgq SD/3ofjxL4Yϱ#uGME0t__6ß}nr~ v[XanfGW6Yt3SZw3t3Xo1u?uXw5[f3 %/w2H2Ds9CSM=ش6fiց~ӣIU=C$|;ѺL<2))+q~^y2h(W\sUDyO=:?iyz>銠̺[n}VpPw^]K,mƫy;w{/.pSG1 t-rϾz#fS߿/>U^ūX^P^CP1G@V_/gi&fnnz*/]a0t; Ҏ_q;}[Fz[^˽2}7ӹ5(qye=kr] 0O5>)mynƣu]+yqiWOѷ8;hAOǿzBnܢrDRn{HRnu{^,ݓ'>]?.l*`/2]vP٬%?ۄ?%o vİx&R'RVә3:93lX1:6bcoqxs\sP2;AkоHĜ4A^7T_-&YXiG|Y?;ʯU~/`y>/A.@@}x l*v4;Z-@jN Tsdә?)BR෰ɇB@4SHk)x @: IfC Aork\@y!Df#_{"}p"W]k=]ݼ&n*uf0op+:`m ~ 7r" >Kq\D RIu(pbDէuj\'t:N1Eә,\YG.ίy雺~_Cr-]#YobLMO]-顐n]K\]t!^gBKQܕ/H:a5z`6ZD6z$ Ŭc1tPH﷐=DςVmg~z M֧Б qWT^`dt^S"dE *k'u9 a Z~Uqa]!ɭkE(*K_QlWW:>nΏ݇,8ԯ9H$4sM0^dij"5ЍMs@^kT-qij!+(rV]d}tqSCɼvGnTs5|}g[8Qp7N !w:q'(}ÿ=A]PoTUo}GR[(j[o[_lWݖ|zm0Q{ȇѸ(類IVO4;}B8OJS&ςObۄ~Ͷ0(A#>PAԷsDs?SoW_ o^>+Ss{:nohJ3Zٮv -iJoj>{=BUig6*t?'a[DyqEaӈ#6m%lإ-*^Fb=]i_l/1Sl1?د@h0vWƜ}mAZ7l;> ຶ!cږ`?.J$"s`OE~[MlmJ"-ۄ" |QN{=T{Mg/~bO'(΁n7@OԐޏ iSȧdn>v# B}F* +h]IK!vmh;>\O !{x!ϔmw1_Xc3ꋵrq:vmG12@v#M zD >?%O|cDtEk^| 뚶ukZ O$J@V0gaȭ-+"Hy&xs|'RY!T{5P]2=iӟ$]Bw1/h =dyt )/ .GO Yˏ3 #Zǻ{ŇL&~ǧzϯ{fqԶՀzarsv* "ۚ( @= x)u0uժv-<@ciX xś]l\GϬ77u p ">A qPR)q6UFJH.Xw^aF`׸|L;Yg+u~&y3*_yjW[_S7lu`dgz&ʡqeȎ]m|eKސIin iNIQC%TK2ݝsͻ?ܩ+,5/u4Wv}7Y%:uKt`?,+@)_ r^QXGI8H_n%I7?Yvw]W ɨdžggZ4-K~-׷9L Bݾ/,)I#T\q{46+snwc?s3zyLg˜1%E_)y,ͳ)߶,}>\;tјc9 ǡ/pc.t u{:"s){_QG)_||E>iƢBvusWxvQk}h7vu̩kL83y*2֊̟WkAsUBuoRL<6_C]}_XoJ:y\Z7YybSYlo]~C1/'?,sԾS 3W3m>!C.qa u}&sfX]π]?N?rrQPAm|+`k⿣6^ ؿ%]k_RnR}ԕ2ܾS/Qֽo5uOz9#F}Gy~`E]%e83#S{o|n;kmvnm;bIm|3`k#Mx-`ΖwrKQם}f>eߵW}K`ľ<7[es,Noܟ=۳ϟuއO6gnu#tZw5}gZ];pdSnދ3v.Ֆ{ؽ޽Pu93Nԥ/T_?pLGכpRÒ}0'Qq, }&cz]+ӻΩs5Ԗd3-\pGᳮEի|;{suZ繗~Kq]aI>gػC}|p'|"Vϳ9=sԒի3o!pjR tq~'_~J;/"Ib'rԭj AiiheslKĻ^aWoR{s+7e~;Z7i NVAwYl+[3u-!:~aW(H]MKAwB ;}f;lQ){QOv}_~sC݆2Echtfε-ElEU"lE$f{lt/ٚ[3]fC\a7bIR+lj6ϳ!ҽcSV+t'Tr*˥\'K\%7%x%d猓slb2r~bMf?MF>.$f~+ĆV8u7WEoKI.y`!(Ot8D0y)q4hAexVOA~@X `#+5rFD6x A.4:A8FHHHu]&י}뛙@3DN9C۠ cV|IgOrbWf7!_a=ƽl.1 Є3 U#R$#`cs$w&Ap6daPy3lL2G@h&9?Z=/cY4bKQTTf*2Ju1R+~دNt՚Tv턫.C]Mz\%~E+1*`wڂvڭD2Ȍ"n{L7jmPPBRvWsymf=~X>U.WXn8Gl-Q6>rRFT_5y#*x_ON]~9 ϹI1"AL]ߵ.w_̛ c .w`s*sB cSGJjsSszc gԩDT[p99ukY;Du.]f]-񾭀7+ f44=GV#UaKp اVlEu.\=/~*RJ]b)]ȊogR{Etfx;nי2'v,Q;chX]];l8y8}!G!([pv{-g}{]]{#3 3( ǫY.!w bx|1jTG,74ŕP(5 7nHZJM)438#Ln\I!pӢ`VӯJZWpa ݸ;wwǧ}{;ߜ{a`/54@ӆ5~:^љ'l>lcoh[, ՌX|s51KLxCjB.֡@g2R y7BGk<{L"h~n.\zNC_^|?]o[3,(颷X 7T.%a:CoJ8f~S,)[sjGʽzS+~dzNwLy{ʻtjy:gTcجձEmY`:6 vl.w!ӱ-Ĕw;w 1[d2;wӵSt:wbgA3iԊDE1_S1;N3μ0 CpRdsc<%F:kOa,c!vIsW;8s:&83`Gұi##uh\pN`WQF̿JLO:.Oi;y'j[ӻON0}nYzVՋV_; }0xL?"F~U#b;EtL*gO v;53UϰhT&?X3=ʱGX/U}UY,X\VgX*NQ,X3 W!Na%^_{^Y{>ʺYUfZW4ξ1gQLTJUtԟ,uF:RGnVqεD7bH:aؖ:]duStE&Y+EұTGAv*NѹfUIQ1;Lo.۔q~VJUtԟ:ê'ޣw:cb^z8NRTg'~Uar ɋ `!9wzZڔ?,GoQxVOA~Eih#؋F#B™HhCxEbBbU_! .p` ݝRv0};h0[6 ]p.~&py.Ͼs[ \٤heXx.ct!?3=U!R$#`cq$w&Apv>aPy3lL2GǠ\zb?[Oo9ϒ7G8٣0ƚtr.IQ%6(Frbr˹Mx]@< bIϲ_-I$';`!6jt8;73 uRL8xVOA~E!zIF c4LJET.ؘpդ*zp"+KglY7p':48[qv|$W9 kp37.vC<zجtꮣZXJc۟OIEOg?ph1=v V;c̳+5ݾ™;.+9JhETG3UESGTz2'E}X&cWzk2'E}8 #/xxcX{">VJxbH O]M™s:z,*9R X~f;򸦧fTOSzO\"yG&s)kVĤ nk<в+PNG  IHDRS LgAMAPLTEٟ pHYs*i IDATxOup6tCz|Nr0`[2܁;]4b #_A.8>|DdYܥzyEJ7{gÚ??U#؂{E]E]E] LZJvpdɑt 8{ _ ɑGRk K3N0Tn_A _a)DbA1!@d71R |TSHⴈ-;O`bVɎc+to<@Y-3 y]opCL kcɛHQʝ%d<y#%dH*ߕ9=*yT2UJsH2Y; ɸ[QJZ?e`%2:9!RrlEBnK' 9)M%/tBEB]|_s仜|5֐HՐ}Y3A6lWl sfdY:i~Nd\{0aomN>j|t2UR{|C<ȳ#gfKa"zɦ?і䣱$K::PSe~í xB?7d~N~\Bƣ At[t`b%vK!w:k;8!qG93;$>w~dv湀9.b~wC.$nCCl F̫KNh,-x:?CHzhԖ,-yqMi9#+ +%9y# x]E]Ej&{*zr'wzr'wzr'wzr'wzr'wzr'wzr'wzr'wzr'wzr'wzr'wzr'wzr'wzr'w_.owߧ''YeN#.Y|'zxFmrvÿ*KwkW0ÿDFhwMˀ袆/y,U=Hޮ6D"{d.\MՋ_7"e̶N6G5-Ț)kSQ0w@J5/FI[I\%# Ve-gd3$P j (f zM|F2]\@yyx,7y=D$&ȥz '%{䟿&y=,T?٭%|ɩdw[K.7ӒY-yHNۡU j&^-Y7ǵ2o:iG!Gy "ɺDfrCV G.2§Hȷ8Y_~:ylD [ߍ5?k&80 |g0o/||1rxL]/\xO~28?/u.SDp1If#r0@ī]l%/JHw&Ե=/>O3__s`zw}ȫ+ȣ!州e8S)j<و9 EWỸ>Gd?])c䇋 TC\3PL",~L"E3S%j빜_0 و,Oл`\#F3{fI 1I.%GX008'cIy3Y!'dzגKwr!2p{|s-FPˁ7CdfP#ٝpcl 0cCe6~;tkJ>UlpEa }ِDQ!Clg3dK [4dd1$Y,/OYВ,Dddp~,99|4d Y pNѸ%L^d;%32DV)}nT3 6W@2T'n\w?"ߜe[,8~6ȷ _H%ϒWSj~J6%W@vOWGCJv[Dc"wϒ'.6%@ddnoa^OaSΒ#lJɫ]q<YqMɷ&2?Kh'5d8Ef)ه19'SAR/Wɸ.'i26q׶^.@di2ƕ;S/S,?m"2ޣjn&lgۚU,Arݭڒu;Ej /'h-28#:2v%K{Id^!mNHv 9z6d%r SdH =ĸY0[%2 _äDir2=C~ֿ%kwXA |4v2ߘ7=5Pr_7dyJ^a*_;M/aW~hjd6"*S?a=9b*|~2>s_OI(B޹U2 <&d_KtL@je+΅5d)~Kds2UENBQkJюd9Njɕ#ZrڂJSr*qlщC-9s4<5ԐεM+N?FWɮf:6!gq.&0֊l`ʦܐ% Ѣ, 5TCxdGc7bxrERbNDga,`wغJkKSwd{;>^x/p3~oy3>L޳'"2rDRx_K8%68lOWܣ✑Df|J¾L-y{ݭ(^8#u#l,/(:>yaHDQ,aW9YKѷJ3coʘf~W&:>T,`˹!o-9CUj@ZƐ#q9E2Px?)3Nœe.WG]wDKsu!P6Ǜ/β+~!ؐ&X$N!Gc\h29LȓVI4 h7d[UBN+y<]^Ȧo@ג8,>h"YL2rӌ8ͧ3gզ@dɥDݥGt fnrՅ%St|(qיΓ9EKq!˻ y3d L<(4CNdHMϓ*Y}<2'ɻLD߃_! d}l)Lt|}h _y}!rmo[mNiK";'ກ|["S̷8OH2y;0d-/d*snH7ɛ1,W1rwU.~w990#Z)y ,2$RߠH3d˶dߐ'cܙ@Vdiq3"7J3(-(]❪岋Lzg2vIÐӷc]3Qd3\1n^X26kPLfDN]ܣeYZEӷad7:[j7"w7ǡ+`a#en5_@5o%wx_U$3G%Gv)Eǿ+s-~fF*ㅫ*2%p #nfl֒oh14઄[Z|@Wk41 ̱pvv^D72猪0ֺP8FBZm #:Lay3)W-yfSމtaMT e:$^ߞ̃kձjE6T"wjȦk-) EkyMuEVi2n>\C<&;#Y>\C̳ɮȺ!߈lݯpRk"0.ݛg6R9,2o$y1J}g1eLORO..c%W&|x$lĐKH5<81ON5y4Zؗnاfƫ8wrd-@_[\edINa/s@s(Y@41<ڵ]4w\0L֜k9&t&!/G:*q6&T0[ʮvju9SR$CɩtC@3@9(jEB9cym Tf:rAPO6z9dӷ䵂%}s(e#9j"ՓшA6KP e L4 zdQ-˟JHؒHn@) liT&/ɲ@Y%&ܯ@hN'ZP>\$pUB\n@~d8A% dQLɅ2 'PEH~iy}2T+mȥboR$\Kn@ie}\%aNד+*iJԶ~{3| f$d 0٧d ; ;="{ sIJV}7)<ء.rR$S eJKs9l@;knr8X{9FM8Jz *CKo(` D #*e83}=1.l.)`{Rl-v! IZhKp8#~K<mJ39N"0@ ȉa2z-$̩5xHBd8A}^0KMgX+Hp<ȣ#Yㆦ9l1BɁJ&G ,Y@vj~(02m]2i?>"$HL _FN?J~)9Yq%oiaNN9EH%|A;2ePA6Dz2!'K,j$O{_Y3Ȣ"zÙ92mJͮi#SiEP6'Y5sdڎ4@YwC"(,yɉz~yVZȴnɬ_V(?@P61.9K7ȂIf5{GƶiD>%.PBdXpDrjɴ%O^7)/)#?W-S2(aVstuMGΌ[{KGxJ\&g(5;6-2(J(,  آp{ZCxnW [1~Yij~,\h80V8x(1o\( G $gawlQN;]-^Sx]bҒ?kp PappS;\R<8@Y¨L6PipߒaZ+y)5^Cj47^}^G60f0d/@ɯv_R9z9!3זOgZBtƖ%Sq7cX/Rm"U$6*yHvɼM$d&]E2osnV$wQEEr]T$wQEEr]T$wQEEr]T$wQ_[= O,IENDB`np5/YVOPNG  IHDR ;VgAMAPLTEٟ pHYs3(/IDATxOFvp V`o`Ŏr\9x z)1X 8e} CȀJRW(4SRw;|JkX,*{t5EDQ]DMt5EDQ]DMt5EDaudQ]DMt8z^~ݪ"#*< tɈ9c'RbT"V0^\ i?y7N)ōĤDV[@$A >ocE8i>чC"Z;4' 팸I̹W3%g̜8B]Q3%1 !N׉S]aZ4/t##>-? l8eDD"pJ"1%DU"ʂ5EK[L?r ɉ%ꋂ>ȉu"eDg bMķJp?ĮʈLONJHL ]DzEȈs,]XXn!%*a?D'vlESDɠyr0#*.[XDg! "PMbux;&1PbNrbzjbHEvM/QNp/)#C?HOo#N׉& _ \S%k. u8@Z,_0T#9mqѷEM%jpH\b:I'hLc2Xlk "((f߭Y8k!q8%@ n}C8Gܳ7 #fBgdD/v#{-{LPq./\*%S3Im`I;KJlvE|UI̊Ŕ=qy [KNܵ=Z2"Wxæ#Kϗx<0g&~ŖH fө #ʣ4Z?^9oI)K #TFbyɎ;Jx}xsDÈYCLbYʙ6[U6X>};iq8k-Ц~'1e"EL#AA8/Q>/ D<ψ}E: 2ԔĶ%RMZ';"2}FDd_ 5EJĉ%b5>Q,`"G<  th"gH NgD:W^V~'H1t~ϨŏaXW1=2Cs AV2F Ml$&^4o@eYq6|?#qDQ]DMt5EDQ]DMt?FMt5EDQ]DMt5EDQ]DMt5EDQ]DMt5EDQ]DMt5EDQ]DMt5EDQ]D Q>+ExQ7"#Oy1y3Obʧ3o{EG㺙%_WwAFT>x%-xa^Do{6x"G@ҫ/)%fc|,.+;p msd BN ^6.'Yby5mbaJNF&`V΋א|Z%%0+'&^w-nÂffo^CψÔ8,Ì8G\+pΈ6c؈ brR!+fIJaADQV sqkܚ}D(Db2K̎*6b%dmz7Lo+·ī[]+Kdv3WBzń~_l1K,[+cLT/}є߸M)1,aN?mO4|S( ziņG6&XKf8~Fޕj%5gr8jDVYA 0,w#fj:LOo ~8JL,R ;Kc re՜ ijD=i^cE8$p26QLCi }EjP.dԅHѬih> g{b7D3"% - Qz[+)=MT"f}yfN{^VCPg4|OL*'醦!kx@bxB]CFd hNCl QAl}%6qm%Z!ˠxqJ3aDD;Hu{t1D\2(FJ/6QNTDȉmCQ7qyAD $gk1H G{")}][v-AX̬ - "D׫&Nsbp1Q>/{64(n% D!=NIAD6πt)De"zy]D=Y>b+#N#NHBl:Im"fx ńrv"7g|7( h0;'A.xq D~_Aj3D%R' DSPB]Yb\tbOfboID%& Q}@ゲN" Yf tK21"b GY }=8FD`CVz`zb Ow~NeDIFrhR˦Ͼrθ>*j:MMX%wCu4P?UUXy]ZGhF춨^~/]Ɯ%M嵺?xW <i^Ppq{I,GV(aKkEf6uB72n< "j.⡔;jF.5q#CV#]ϔUkRp6$R+۪ ͦOFiሸ…Ԡ&LiU 죟g1HK=Do CLLGHM^$P2l-MPencin,;$`hu [QD46Wpj{DN"%KԭHX[ssp kĞ#X"jٴHw6"ԜwEl]D[C։:4F%⫓$=`[7?E&4Dv>"QIiCض'8t QI+af-2JLM n6%^Z"%J1  F\F ~ʶS<'> rC*#rEL5Sv21XFį2hHT!*> h0&2mqC?D)r"5b qEDjmL!{EKYK'xi7x e"DH\bඦCDʈ/{dEDa]bǯ1r OI_"bpGtQ D &#NF "6FќxB VW^}## bC3C -F]%u5[t Y;|dBV ӓх NA$BV텬:YVȒ=^DaCz NB"dBbNԖ-FS8{vB /qх,]z"Nj-w .L! -WBÈqcD:IDl"n5"6-"a\R]Ոb d$DY2 뛦.alV^Ȫ) >ĶL d5?]531/Y~ Y =A[Dvj#&- uv1/ q N(@[ #:!Ku("H2D:I,N YK4b' "vх,@FjD?!.dIM[yD1Dwꦇ A|-dCBVx1/D.byz:хDg!n)bt!K@]aȅ,+5GtUtq^_4' qjg+C1HglI:cKx/C|5:)Cho8"#V-_-AS W)m'թu0me#JX~NUuv#ʄ姜ߵz/?NqC"e)k;NuoN[ E%,?l'auvZsĆ Ȧ-Eo)MV~NA4"O9 6 N#姜JԇUtb:4bu NvB+D]dS"!4zHx:!ǃl'z^tvvWU"Bl7˄姜d>#&,?l'(˚ 2)@$WN-MW~NQ7^ ,a)o;.DԶS;ͥ,ESvw-d3ިkDf;N/P&,?u$%\[J?H^~th2b11D m&#CɈAh2b11D m&#CdɈ1c$#HF#1F_4f#eIENDB`n S4*r&BPNG  IHDRXqmgAMAPLTEٟ pHYs3( IDATxO#uܬoA2"mrȗ0`9AkhEaEQ irQ䘰-!l@`vi{UѮg~3KV7Ӭ~Ua7k6w1m ncpw6w1m ncpw6w1m ncpw6D8oVt^hwhY -",۠  ;EhqXYeӏaskc#_!>>A`L٩~c0'9DS?;*P_S \{s;#b5 ܷ^o+t̉F2w/{sw[{5/5cr r;y{UEE,uo6wwߤq?- 6<í[Ƚl1q;ƽ~ݠr3=n غ4!ww.ǸMnlݢ{~W8oJSǸxܸcy_28q/rww_%ɍA'vXS Jnv{sc[6tJn_"bnmĺ?7NLĽuTr+'lys]výt]b{瞮p/@ܽEmm^y7nHݑW ]zԓ7npۊ엷tI=tm|3`&w1uQv =h@^O>/N8C8ӭ{^?z'MUK&wownӏn ;FF&AeEq-6rwE1bpbp7D_l嬥)8+֍81LCm=ZAd!fo8 BM{ Sw<6e ` '}=YqީEm f '~]&~qH¸g31GB׹lM '<gS-jK6nPθiyq-Tv#X{fpurpI,[47KpGw7A1wG&7/vzrtkOn}F7N7u)=qO[ܫsq;6k%nf`&ۦf=_x:n]oޢ\m>>Nai!VcB1r'񣿏EKR!;^2 XxCoҖ/t=?P»|&Xg 8w~cPƱ~^bh87gu_x2x <r /Wa% FGO؂Xŵ;S)xj4Z :ڬ"X{2l h+7_nIZ n6OO kl s7S([, R˧57XfHh7_ΗtGI!֓XhwlOM)VlJ.;OTļ-$~Iuq=:fGs~iS+J|hA+`pЛ#{{ldW*,G[i;9#3xPpiwlݥ5wIe"s=/eܲܡvc-̍wqϬq榷+S߸wq;e~7FSZV߃qhx]4| WΟܸ_/gf{SZoCʸLmn?u"'xdF<݅ܫ31ovOɽȭt_waa,;sĽZ[ O4] r55O%nk7s9rr7s;I]u޹t7xܴ %k.rMho}%_^eӣ*qswNgq7xgܪɽ(>x2idY#pqKs"KnG|S;nn[y?H#nF5Fg; ݁]XfiA_~W-'Z~spg&.>7ۻX̜_{v箸͟1zNm?-Η+Mkڭ8O=iFag==xOL,#/)X7?+VJ ܣ[L,p>^O8U>ࢶzf-fx0O1hqӔS nm;EW&{r |Vb]$<e<ɗ{dnMC5t;Hw"s77- tܗ}PMэL5w|ƫܵˆxn'ϳbg9qG uvs#nIpPyS ܵ}Z~1m nߓw'-᝹} ѿ|Aק;;;F192+_ }A2]=&c9:v!R cl(E!#wnְr?!Wv>EChR<*^Q MZ_E{2ۅ=eE~Qɓ_Mn(ӏ,f&.戗W*:{w+ *wKX%yޗjl5Uh.zX,M=4l['o)n_v/ڽ3n?s۲#^jwX gO3)5JBlhDRfWS`/7vsw,Kr++- 7S<OkZ;ٙ/u .${Yfw~Ou?S8Pr۸KŪƮVam ;W7or}8mY,:([-ǸB+=܁5R|:3]msnr)Q|I w42w|aהC5uwi{c΋ N -~H/Zq@ܽ<۽<`WqO أe6AXNue|q譶v+l }v+n?;vG'<ήCTKXJ}mqFLP*w>WH?xCzkUr V[C^UK\j>){G=%Mhuh+qػȧ\3yLcKtr[4 u@N^Oީ%(+SUuw_Jd?yg`p)BM\Aɽ,?ו;Yxgv:s읹{Z~33WPrs]Uᅼ3WPt(?~Y흹zE1!w-{w݃=dwKxgaCS ܵx.ukT՗L:zu{?IjFryˣbyi8z͏_s&'-Pir9;}2iLJ ݕquU$E+?^REwzi(Io5?666f:V}VwغcE~Ac-6zuMy, nK&_1N߱AYt;< '&f8Q:)w./}؈m;:'I}V'7Y$r+)Dl-ĥnG~,y$n}`+j17D7= ڡ^c6dRn+1#7c*u *ɤR)+u_}ǂ|M3n|,3)7$&ԧͽǖ7Iqpޖ~c!.eѽJ&6iJ6Ώ'rwlk)?T$r78nq~lŽ.dRnVx {77nQpϋn[Ich7>}S~yco$IE*n?ūXrƭ?hPvIv-{ȏ(J,w`7ɤroQJJ́܋/8o̤-OԞ|n>cS;s"?ޙ+c!w-wC Z<>?S&`ྟI[s~lLj[nNwVܑcsƽJscSqB@~,\T/-o2KD}ܺgo-~pj{VscܵφnM?v/"nbw$ث=ܺ<;=#>NXQ7Byj܍5]\sp?ֱ[NbVܷ6?6`)/^ce݊6?V{^&xsc=hl6?ߠȶIѮDX (Y`n~,CiL[߾E~lGq/07M?VRnuGc1nڏuTت{2y-sgB,8s<_`ҚsEv"$X΍B# ߳9'L~caA@˹5w?-zr ?xQcSXZ/Cܷ踊f%cs{WM{*?8Vp/p}W9.?\UG{ݠf Vrן&Q?3v6]MU tlDzi"͒Qc/fcqׂ!5(sXcFa5&rwFv3~9cǚ3~9cǚ3~9ὂGMLLLcI3Xܾmݙqs;cCp~c?6ڏ ǺcCع5ڏMpҏuǺvXC>ڏ ʥxp5ܶ~l(?ֵʏudžc]X~l0?ֱ̏ucX~, :c`~c?6؏ ǺcCP~k?6ڏ Ǻc@~k?6 ǺcCP~k?6؏ Ǻc}e=zQ-;-;-;-;-X}1s|&r[&rwf :?SU>cgngZ4ǃ$OdVn'gʹg*Ru>6ͅg*ê0w"T\nx/|!{Van왊 g*Rྟ_R n[5KpJvBx':D˝ 27L9-\^CrSwXMnd/:7sJz{q,=SVŝvq3pŽa[L̰ť^A:5w tsoܻ5}xLsq-έyMa3~un߆gzs#{EqvX[n3ܳRroa\09 3]hE: ឩkͽEl/n=3aa^BmxyњZs-g]j877L_qqϤMaqkɍ5nAjƞɝo!mƭy;Ľpn-A&p=m8z ͿL7qܰ[LkT65w%)_;o&?LV8kcL L7{5Lx$ ;aϴHY{7ѹcULvFV1ڙ?ܖܝ/4}yc,nGML̸=vX>;~+JR>;~?gW?gTqd~)Oʥxw~'܇:57Zs:~+JR:~+JR:~+Jz:~+Jz:~+Jz:~,aƏmg~+ӎmݙmݙmݙmݙmݙ^|"7Dnډܴ\ZIDATi'rX@l!IENDB`nΡ`Hhv||PNG  IHDRФgAMAPLTEٟ pHYsjjxIDATxO#yρ 9S#9H6/C |:D `:@솿0 5 CONf6`}d&X=S  *qvE[6 l`& EQfg2(*Utv";Im%K~ مH=,H&ߚMa tىHqb'Od"yco= +dzgaEr" #l {_}D* Ny-<(9eYN OBL|,0o|X@V^59%K=p9)}ٹfOB ʋ#b3dgQeu9ZУ+;nXdY+VuXO%[$gS@` |YabW *V;ҩ}XD'F" dO\0 ;dG ˈ=?U8)|] 8kT- l`5[3= }g5nʼn˓+#eAx^EF:ˇUl;FKr{2֙hX貼ɮ!6%/HN`ğm2|ne5n;6[v<܁]ý6 l{^%=@ +v k>א߀ALI\+%, +6낋/z䟂X7zY\b2$:p޳4d"/Wr:Je$T\rb)p޲xJB[$S+iT]$힍bI]8oYY'X tٍpא4LlRc]O ɖyR}c-Zi6+bd-)ў-~GSp_(coh?UjeW熣,\:7:+6;wbx8h6Izl*jlb[w08=ífV|%WbA{,N'&{(7XE,CV ~e]):_%:pݬQG<1&_Ȫ_ҞteO+V0? ~v6[Fͪ8gW|T3F|9*QԷFOK5Fb|)&#6 lHط][sE"gآ^‹~V0x}w#Xh*'8ˍv/;"-w٤n+[6,Ɗ- fkV#s`;Fê{cE>YÎ!sdòc l=-Y_ٖ-׬^3 :q?Z! }bj6gxY=+^}ŝ1^dE+v}MF$-;,j b=ER/qf?5W\Or;{$6 [lϓȂ/WYU b}ŸSXA[3/6,h5+;vn~;vlj{M,.lai벊i(YY:xX_vfY ~oʆէ8V">ڝ{Xz{Ş6i H5!k =ϧK^/bM>M6 lm kQ)n;|eۦ9R$Fk%+XJq%+>R\R18*>k`Rkmvasц:,;`9~y=勅`O ~1^R4_Yā5`ȢƊUkEW^ >]4fB}飩F>[MɎ wXY)GqMC2VEƚUðpш(l9؊X q@{խV9Xu6ok+H;`ȊMѻSX/k ߛVT~\R4UYJquF<1glvs0*N/d0kQ).JjTq1jNhOt'_'.ò1WXixq6muַW՛&*?Qv>dC$]4;P>`Eeiyjj`'9ՇkKַvLͪDb`+3LTw+Y>Z%5jֻƫEhLxdٞl8k}0ŶlOcͦu{UDzEԇԇ}0i갞-W.!ik5Տ2>=p xX Y>>!#g{Y}6 l`.xͷf֌5jfxmY3^f֌5sjf-v4㵡jfЌ׆A3^fxͿffkfxͿffkfxm)^ff5]33k53c_33k53c_33`53#_33k53c_33kL53S6@ P33kff`ֻ߭NL_ 5AX6o7kU3ùJs:bcS͌KlNlbjf-T3+g.lh`۹i>.s1bs`o;F칺LOmo޷)5ZmT4K$mӣ-_g}o;[K֡fV`]c% 8:Jj53z!5lXۚf5lXۚfg=n;Y}W&yؖXW'wJc4C/&y۱YA@on;oC, l`XuT3לjfS>^sYk53xͽfFr0 P3jf.C!^s9k.53xͥf5CR3s\jfp9k.53xͥf5CR3s\jf.9ĆukN53xͩff95}X3koP3 l%Clָ6 o(kuCuY֩fY5?:ZNM%R3&&-֭f6fkfx}^'{>^e/گXxͅu~;!^ gr~v394cww9%^#U3be ,_C4.kMO .8L`-ֿ+O צ'H3!ilċ*9!^#7 5Q2VMOצ+&y]bmriL mdBc'j-ZkF69kS$(4+켇צC;CF,=Z:Y-4Yxm)|ӚuO>^"fv:k<0:ͬC6s:x!I'kS:6TS^>^HtA-Z<1*b{{SxMwr>x_i_(GI9N?ОDFjeRF_nʜ[A^[`Uщ1WIENDB`n K58}\SDwPNG  IHDRFgAMAPLTEٟ pHYs3( IDATxAunup: .9嘏^c/cxԃA\.}XQ! rتr%9nmi^($Qvt͒Hןe!/7FH|O#c$>}ħ/qτV-(L'[XB;\׶!@~w#DY/_g$Eb&^PD ԉy'1&`ֱ:~K_q0QǒKc,EcyՏ.bJMW7i"ZۉӬEwMo3vo#DѵISHڹ1LF|N;E߃ux; qCH"Ete3"u߫7E|*:c f1\DV[ۍpRb`?3"ܺ'%MĖK뿨Inq]d~`kMkcb1Ae%5u_D.SE"v77>$^$~7S5%^xA |LԉLUpO HӒPǪQes ]uLm:Z*=-3:nmF/H,5q2_ǚxA_HX?ϐ88Ĭl gX^/aG,tc/>$N|1:xO,ijGR&|J#N@╅XDtbf%w-OD<'QK8kgIn]GOuغ5nH,[ubWsl@nGbF$$ ]mX$x{i jc/}_vOUBg)q$ hO82~xG5ڄ96=nwh3ӣ뜘:'jyMl !sB~(+U0Cb[gYOSw8x wN0Vv}/*R9x0[B-PnogpD3@6I&A\L#S1l] X|q n#FH|O#c$>}ħ1>X 93vLv]1>FIno=ޫ5JB|#F#&kJNV)5b"˵`HqNV ԏhߣcaJA^ȵޢXʋXjwqNJY z IM%iR/\ձ TN;'q3Eךij/1o$SP}^GI?~&HbNfG\>8F,͔xI& ?ڈgNf _7ul%>7:~5ēqW8 bkķ ~pL(YwH q$nЃ3~h71*ٹh $}(Uoz$nhb՚\+/.-OXSH3s;}K( (iE|u_Ff& _Zo5*T$Es+!x;qݪh,Zn)]ub# :Zo a ia4ZVcsNFFpI,4qkYhjh^f&V)=ʁ{H|rbu#hb<*aAD72Jns8oJN} b3Eo5z!wnw( _X@b>?2u=~͏S)xr:bCkrzzxNngBF93 ruE}ILPrv_a"xu]#qR9qbTxEP#ȹM DtOjbΉ9IZ-6&ah$VX IUeC/U%[~N p7S]. OV oAwMbUxC,z8/KXNw0`wrݩ_1)zZ'wK}sBwTC|M]N~_q̔xW?FMb{W=F⾈F#&; q5ڿSW&ͻ1q~1Y'GLbM=>ZXl}'`A`54}!(xYDUĂ3*%91LDkaPUc;u81ZdP |su5!#5#۰UD"4q呤 2 H.}^%I[u,G49Ƚ ^`Mm:5Q'H|L9-vj)1!NqG/ĸ'})3+J28z1)N8-VA"Bݡحɭy *OILriM2Rg}91Mʉ?/8*EfMiu])k"%A϶Qcݒƪ8D3ehhİZZ-)e/-GB!bx!zi[-)9R;PWŬغW<4U7k9pꊚ^/Jk %B,Fp PwAECW`eXR:;$fi';=Pnv#ԫbEA^ӈ]u]Vq%%'F[*Nj!s OZb'"VLvN$^n5 lSwR@i+~fbn11H<ĕN{8-aidϑ.9TstG%X}Jb"VS/Ħ#]c? qי\.SB#q/"Χb VS Gb[щR bpbsuΓZՊk#ǯxVZ#qgK%W_T$1ys`bACtk)Jb#"іɀTG:E,Mp;ҵpeBuShn]tG8ݝqL%\KS閸32=PvEw3p91ݑnӽI,tIoЧAt3pÑn(uj8:PuLwu &#} %\NLwqÑNnbˉtus#]N n*rb#]N|j+tXrK'q DG:Mwm3#LrK#6p%1Ցnr]p):6ue%1ՑNlTG:M8*b8:ib(ɉtw`5]n$ib܁$& %vJH$&;ĂLl* b#]Nk;O<GHg*1ّ.vMÑ'hX{ v9ҙJ8=Hw[_lntYpwZJ8=Iwj` gƾt4MwkEt1o$11H<t#J1YH(CE &p{yr =G:ˑn0q=qs{8M[d#]H|)?` S8z>tH{xStv#c8ױB[S#]Hd4k(| =G:MMb/#]Hj =G:BǑ.'N#]'<r$1}z>tv#]ILm#]H7բIU@'6uB>tv#+|m =G:BǑΟwq+|p|"&+< =GKBݺAu+t#>LV8ى}YZҷMb#ˑNɂئq*pNHYƯ> =G:Bˑ.c;jD?> =G:Bϑn|jFAt$Ty8z~t[vy;{eƻۑq^GWL^1kGlWI\JPщtbB_<;z'!+|;ntT;vۯ#qDB?4s:qfsлR{U΢;Aܒ;zE\u;ҙ:*l =M/! 6E Y(.X+8GU01Çnë¦;HG{(b ^jc١ЛOa598;G+U5:n+ ^6!c2(b BAƒC7_ޫ!Y}u̦Dqv+L^6 TK>5愳Cl/r ilB;UwږHE.Bo9ǑxAl(ZqKpF+#f+`]:>kWī8ޮЛ9h3xUYvë¦K"U,? o~#zE|5O&Vjn`%ךCaqDGnU]gjpsq~s-xb~ɪpD=|mhnD1 gBUPá|RgIDATNMKw7UR\UYP-HlH|eUq'z7Ugz#qGLe"~Sc$>}ħ1>F[HweIENDB``!5Oڞ]O-Ap*xڥTOkA3h[I[= UAd{%&S0ٔdKLZ"ē a_?@=)ߛNPL7oޟߛyY3 ppFPIHwG~qO-tL`Hΐ$j|pS y!o{RoGL%BBxZI $H<)oYɒOZMۅ_>aRMg7zݩ5QN!fY=a:YEqa݇m" q)Y™Uh0ISEUTh_~>~ !&@=yV^E4SS@[fIPGxXKTQ?=2Q$M#*KCH/hfe٢$$Z-j UT?hajB*0ysEǻs=xcQ/fM85Dv(\XOd #pCl,ˣR@h_|&*E{جz2uR_%\:mnҫϠ.ڽzتslGbt=[V;' $Ǩ8_ i)dN暗`=m#HIűEdh}|90/nKz*h*EO8n%uMqXxSkzͧ[os(mX/O_PJgr|iRͅyRkԤɜ'YjuϜߕ'1'ʴZpb2{oWQmbmkbAr3~}-e 'cM=C@S9hUmCnfl܉d^_9T/ 3DoyLyv@` ݑw%o^x}G]TTY|il{>8Z3|[XOS7)Q?.%&''PO \;G)>ydrMrqZkr:w cϵ10 <{%+}˵ZA `Xׇg˹Bij@Lڸ<~(Y.9(w5p| Nka^>DpXoc E寧ߔhdM9'l > v?gܙU_2/6 sJ5ik(p(   Clip (MS_ClipArt_Gallery.20,Microsoft Clip Gallery0Equation Equation.DSMT40*MathType 5.0 Equation0Equation Equation.DSMT40*MathType 5.0 Equation0#Tabelle Excel.Sheet.80.Microsoft Excel-Tabelle0%Tabelle Excel.Sheet.80.Microsoft Excel-Tabelle056Dokument Word.Document.80.Microsoft Word-Dokumentd078Dokument Word.Document.80.Microsoft Word-Dokument0=9Dokument Word.Document.80.Microsoft Word-Dokument 0A:Dokument Word.Document.80.Microsoft Word-Dokument0F;Dokument Word.Document.80.Microsoft Word-Dokument0i(Paint Shop Pro Image PaintShopPro0(Paint Shop Pro Image0j(Paint Shop Pro Image PaintShopPro0(Paint Shop Pro Image0k(Paint Shop Pro Image PaintShopPro0(Paint Shop Pro Image0l(Paint Shop Pro Image PaintShopPro0(Paint Shop Pro Image0m(Paint Shop Pro Image PaintShopPro0(Paint Shop Pro Image  SQL.psB.sql92syntax\sld001.htmlp#\http://cl1.fh-lueneburg.de:7776/db/sqlscripts/"SQLPLUS0hDiagramm Excel.Chart.800Microsoft Excel-Diagramm08Equation Equation.DSMT40*MathType 5.0 Equation0/ 0`DTimes New RomanX( )0(Y 0DArialNew RomanX( )0(Y 0" DSymbolew RomanX( )0(Y 00DEuclid Math OneX( )0(Y 0@DArial Special G2( )0(Y 0"PDCourier Neul G2( )0(Y 0`DCourier Newl G2( )0(Y 01pDArial Unicode MS( )0(Y 0"f . @n?" dd@  @@``_@,ZISCHEN.WAV.WAV 20103RIFFWAVEfmt ++data~~~~~~~~~~~~~~~~~~~~~~~~~~~|||~~~~~zvtvxz|~zvrnlrv||vtrpptz~|xvtv|~~zxvvvz|~xrlhntzzvrrpprrx~|j[QU_|bICCYn[ICY~zlnh]_r|]SUSSjz|x__l~v_]drnUb|nfd_]d]5=rrnj]jz~lMldrx[[_f|YQfWK_xh[zx[CIjzxxdSQz|_fI9WӹM;QnvK;OUx~xj]]YS~ɵlM?plM;CGpٵ[)Kh|% %;xtKQS]ɖbGr|lSnvz~nfS[nëx;Az=+AYݻ|=/1r_ ?|潄W5/Czãf)/pvbMQr|O=OtjdhjlG?G_ɊK3לdQCMppW;1SŷAMz/#?bx͖SAM[hvhYp~~zrvt[]ptWOUtxxd]v~vvxzd_xzh_nrSQltbdp~_lrQ_l][tf]W]~hWfp|fWhnhbU[hzlSCWbYbnxpdhjvjM9Ot]GQ[dpp~hhhdpx~xh]Yntnrp]dlvjQMb|vdjpzxzztljr||_[r~~jb_j|z|xpp~~v]Wh||zx|x|zzndhpxr]Yfntzjl|z||~vppnrzphrxz|~|xtrjjtv~~vz|z||xrrv~xrprtz|||vzxvx|xtx~~~~~~~zxxxx|zxz~~~rrz~|xz~~|vtx|zxz|~~~||zx|||~~zz|zz~~~~|~~||~~||zz|~||z~~~~zxzz|~~~~|~~~|~||~~~~~~~~~~~~~|||~~~~~~~~~~~~~||~~||~||~~~~|||~~~~||||~~~~~~||||~~~~~~~~~~~|~~~~|zz~~~~~~~||||~~||~~~~~|||~~~~~|||~|~|~~~~|z|~~~~~~~|||~~~~~~~~||~~~~~~~~      '    [Du I5! "#n$%E&.'(*A.lk#j+i6h/"+9mVg,7y9Zfe 68:;=>?@A BC#ED F-G <1H+I JKLMKL1JqIGFE DCB@/AH?>=%$#"! j      <;:9876 5 4321/. -,+*)('&"$Grd /&$(} 2$gi Qjh/\} 2$ߥANABV46r$rsv* "ۚiE"$x)u0uժv-< 9F2$Ot8D0y)q40P2$kLVOd,NfJIRBT2$|}k(;X2$wzZڔ?,GA\2$jt8;73>ab$k<в+Neb$p5/YVOb$ S4*r&B b$Ρ`Hhv||<b$K58}\SDw =2$5Oڞ]O-A9"$yV^E4SS c $0e0e    3 A@ AjJ  8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||p3ff@f8 g4OdOd )0ppp@ <4BdBd 0D W<4!d!d 0Duʚ;2Nʚ;<4ddddH 04g4dddd )0<p p___PPT9/ 0h?:-&Prof. Dr. RiebesehlO =IE0" Datenbanken Einleitung1! LiteraturEdwin Schicker: Datenbanken und SQL. Teubner 2002 preiswert, einfhrend, bercksichtigt MS-Access im Vergleich mit ORACLE Helmut Jarosch: Datenbankentwurf. Vieweg 2002 sehr detailliert wird Datenmodellierung behandelt Patrick O Neil, Elizabeth O Neil: Database. Principles, Programming, and Performance. Morgan Kaufmann 2001 Referenzbuch fr fast alle Fragen zu Datenbanken Kevin Loney, George Koch: Oracle 9i - The Complete Reference. Oracle Press 2002 neben der Referenz auch als Tutorial geeignet Cornelia Boenigk: PostgreSQL. dpunkt.verlag 2003 ist auch allgemeine Einfhrung in Datenbanken, Webanwendungen mit PHP 2H.2k1P.1Gf Hf 2"2f1  "  f    .   fF%T7$  M2#Literatur, tiefergehend/Theo Hrder, Erhard Rahm: Datenbanksysteme, Konzepte und Techniken der Implementierung. Springer 1999 sehr umfassend und vollstndig, keine Datenmodellierung Martin Schader: Objektorientierte Datenbanken. Springer 1997 Ramez Elmasri, S. B. Navathe: Grundlagen von Datenbanksystemen, Pearson Studium 2002f8<f8f f>*YDatenorganisationDatentrger DatenstrukturenDatenspeicherungAllgemeine Anforderungen geringer Speicherverbrauch Kosten minimieren einfaches Einfgen, ndern und Lschen von Daten Zeit minimieren schnelles Wiederfinden von Daten Zeit minimieren einfache Algorithmen Wartbarkeit, Zuverlssigkeit optimieren Diese Anforderungen widersprechen sich: 3 erfordert Hilfsinformationen, zu 1, 2 und 3 behindern sich gegenseitig 4 ergibt meist schwache Leistung bei 2 oder 3 112!34)(1!  )(  Datentrgersequentielle Datentrger Magnetbnder Streamer Bandkassetten direkt adressierbare Datentrger Disketten Magnetplatten beschreibare CD schreiben sequentiell, lesen direkt adressiert`$!(/$!(/ v 2  sequentielle Datentrger ... (1)$Vorzge relativ billig groe Kapazitt bei optimaler Speicherausnutzung bequem archivierbar einfache Verarbeitungsalgorithmen Nachteile Datenstze nur sequentiell durchsuchbar Lschungen von einzelnen Stzen nahezu unmglich lange Zugriffszeiten Einsatzgebiete Archivierung Sicherung Logfilestv n v n  v  sequentielle Datentrger ... (2)*Beispiele, Kenndaten Magnetbnder Streamer& (direkt adressierbare Datentrger ... (1),Vorteile kurze Zugriffszeiten auf beliebige Stze Lschen und Wiedereinfgen problemlos beliebige Datenorganisation mglich notfalls auch sequentiell benutzbar Nachteile hhere Kosten kleinere Kapazitt Speicheroverhead durch Dateiorganisation Einsatzgebiete alle Daten im hufigen wahlfreien Zugrifft  J* J* Q (direkt adressierbare Datentrger ... (2)0Beispiele, Kenndaten Festplatten beschreibare CD&! SpeicherungsverfahrenDirektadressierung Listen geordnet sequentiell geordnet auf adressierbarem Speicher geordnet verkettet Bume (z.B. binr) Index-sequentiell Hashing6M-M-DirektadressierungLsetzt adressierbaren Datentrger voraus setzt feste Satzlnge voraus Adresse errechnet sich aus Schlsselwert: Adresse(Satz) := Startoffset + Satzlnge Schlssel Zugriffszeiten: alle Operationen: O(1) nur bei nahezu vollstndigem Vorhandensein aller Schlssel aus dem Wertebereich sinnvollzo6Yo) Y  Direktadressierung ...  Listen, geordnet sequentiellDatenstze enthalten Schlssel variable Satzlnge Stze sortiert nach Schlssel, aber sequentiell Schlsselraum nicht ausgeschpft Zugriffszeiten fr Satz suchen: O(L/2) erheblicher Aufwand fr Lschen und Einfgen (L ist die Gesamtlnge der Daten)| -%f}-$ ,Listen, geordnet auf adressierbarem SpeicherNDatenstze enthalten Schlssel feste Satzlnge Stze sortiert nach Schlssel Schlsselraum nicht ausgeschpft Zugriffszeiten: Satz suchen oder ndern ber binre Suche O(log n) Satz einfgen oder lschen O(n/2) hoher Zusatzaufwand fr Einfgen oder Lschen (n ist die Anzahl Datenstze)*  .f[ f . Listen, BinrsucheSuchschlssel: 42 nacheinander vergleichen mit Satz Nr. 23/2 = 11, 11/2 = 5, 5+ (11-5)/2 = 8, 5+ (8-5)/2 = 6: x8@ Listen, geordnet verkettet:Datenstze enthalten Schlssel feste Satzlnge (mit besonderem Aufwand auf variabel mglich) Stze auf Datentrger unsortiert Schlsselraum nicht ausgeschpft Zugriffszeiten fr Satz suchen: O(n/2) kaum Zusatzaufwand fr Einfgen oder Lschen (n ist die Gesamtlnge der Daten)  -%f - fB-#Listen, geordnet verkettet BumeStze mit Schlsseln Trennung von Daten und Zugriffsinformationen Speicherung der Daten nach irgend einem Verfahren mit direkter Adressierung Zugriffszeiten: Satz suchen oder ndern ber binre Suche O(log n) Satz einfgen oder lschen ... wie beim zugrundeliegenden Verfahren bei Einfgen oder Lschen mssen auch Verwaltungsinformationen angepat werden (n ist die Anzahl Datenstze) * ,O f )O    Bume ... Index-sequentielle Speicherung^fr Datentrger mit Blockstruktur Blcke direkt adressierbar Datenstze mit Schlssel, sortiert variable oder feste Satzlnge Zugriffszeiten: O(L/B), gemessen in Plattenzugriffen bei Einfgen und Lschen noch Zusatzaufwand fr Anpassung der Verwaltungsdaten (L=Gre aller Daten, B = Blockgre) Z)Q'z%"Index-sequentielle Speicherung ...  )Index-sequentielle Speicherung ... (Bsp.)$Annahmen: Blockgre 2048 Byte Satzgre 116 Byte, Schlssellnge 20 Byte Blockinhalte Datenblock: 17 Stze maximal, bei 75% Fllungsgrad 13 Stze Indexblock: 85 Eintrge zu 24 Byte ( = 20 + 4 fr Adresse) Datenvolumen 1 Indexstufe: 128 kB Daten, 2 kB Index 2 Indexstufen: 10 MB Daten, 172 kB Index 3 Indexstufen: 926 MB Daten, 15 MB Index 4 Indexstufen: 78 GB Daten, 1.2 GB Index 5 Indexstufen: 6.7 TB Daten, 105 GB Index, 6 Plattenzugriffe @ w  @ w  > (HashingStze mit Schlsseln Schlsselraum nur schwach besetzt Adresse wird aus Schlssel errechnet feste Satzlnge (mit Mehraufwand auch variable mglich) Zugriffszeiten fr alle Operationen: O(1) Zusatzaufwand beim Lschen Adresskollisionen erfordern Sonderbehandlung nur effektiv bei geplanter Unterausnutzung des Datentrgersp8i\f '!i"Hashing ... (Bsp.)$CHashfunktion: 17s+23 mod 50 mittlere Anzahl Zugriffe: 1.7$  +$ bersicht&SekundrschlsselLPrimrschlssel identifizieren Datenstze Sekundrschlssel identifizieren Datenstze nicht Sekundrschlssel dienen als alternatives Suchkriterium Zugriffe ber Sekundrschlssel sind ohne weitere Hilfen ineffektiv (wie ungeordnete, sequentielle Liste) mit Hilfen hnlich effektiv wie ber Primrschlssel Zugriffshilfen heien invertierte Dateien invertierte Dateien knnen im Prinzip beliebig organisiert sein Indexstrukturen sind besonders vorteilhaft sie enthalten Paare [Sekundrschlssel, Primrschlssel] Achtung: i.A. mehrere Primrschlssel zu jedem Sekundrschlssel vorhanden \8%z*\8%zf   fE 'Einstieg DatenbankenMotivation Anforderungen( Dateiverarbeitung, konventionell)Datenverarbeitung, Variante*Datenverarbeitung, komplex+Datenverarbeitung, Mehrbenutzer,Dateiverarbeitung, Datenbank-Datenbank: DefinitionEine Datenbank ist eine Sammlung von Daten, die untereinander in einer logischen Beziehung stehen und von einem eigenen Datenbankverwaltungssystem (Data Base Management System) DBMS verwaltet werden.zfff ff.Datenbank: Anforderungen@Sammlung logisch verbundener Daten Speicherung der Daten mit mglichst wenig Redundanz Abfragemglichkeiten und nderungen  ad hoc Logische Unabhngigkeit der Daten Physische Unabhngigkeit der Daten Zugriffsschutz Integritt Mehrfachzugriff Zuverlssigkeit, Ausfallsicherheit, Kontrolle=)Datenbank: Anforderungen (2)... es ergeben sich als Konsequenz weitere Anforderungen: Datenkatalog (data dictionary) Namen, Typen, Gren von Datenelementen Beziehungen mit deren Namen ... Integrittsbedingungen Berechtigungen, Benutzer Statistiken (ber Zugriffe etc.) Transaktionskonzept Recovery Authorisierung Hilfsdienste Datenimport/-export berwachung (Monitoring) statistische Analyse (Performance, Nutzung, Durchsatz):9d99c    bM  9/ Datenbank: Architektur>*Datenbank: Architektur (2)?+Datenbank: Architektur (3)A.DatenmodellierungEntity-Relationship-Modell$ @,Architektur: Sichten, Sprachen3$DatenbankmodelleC1. Beschreibung der Daten und ihrer Beziehungen (graphische) Modellierungssprache, z.B. UML 2. Spezielle Konzepte, die zur Modellierung verwendet werden hierarchisches Datenbankmodell netzwerkartiges Datenbankmodell relationales Datenbankmodell objektorientiertes Datenbankmodell andere, z.B. Logikmodell, Fuzzy-DatenbankenP0,=0,=4%hierarchisches DatenbankmodelloBaumartige Zugriffsstruktur, Segmente keine Redundanz, sehr kurze Zugriffszeiten Inflexibel, komplexe Programme5&netzwerkartiges Datenbankmodell\Durch Zeiger verkettete Struktur geringe Redundanz, kurze Zugriffszeiten komplexe Navigation7'relationales Datenbankmodell~Daten und Beziehungen in Tabellen Redundanz unvermeidlich, Abfragen intern komplex leicht programmierbar, nderbar, verwaltbar<("objektorientiertes Datenbankmodellbesteht aus Objekten, gegliedert in Klassen, mit Vererbung keine Einschrnkungen in der Modellierung Programmierung objektorientiert erhhte Komplexitt bei Verwaltung und Programmierung erfordert hohe RechnerleistungB-konzeptionelles Datenmodellnach dem Entity-Relationship-Modell Objekte (Entitt) Objekttyp (Entittstyp) Eigenschaft (Attribut) Eigenschaftswert (Attributwert) Beziehung (Relation) Beziehungstyp (Relationstyp) >%%,  E1Datenmodell, DefinitionenEin Objekt ist ein Exemplar (von Personen, Gegenstnden, nichtmateriellen Dingen), ber das Informationen gespeichert werden. Ein Objekttyp ist eine durch einen Objekttypnamen eindeutig benannte Klasse von Objekten, ber die dieselben Informationen gespeichert werden und die in prinzipiell gleicher Weise verarbeitet werden. Eine Eigenschaft ist die Benennung fr ein relevantes Merkmal aller Objekte, die in einem Objekttyp zusammengefasst werden. Ein Eigenschaftswert ist eine spezielle Ausprgung, die eine Eigenschaft fr ein konkretes Objekt annimmt. Eine Eigenschaft ist eine identifizierende Eigenschaft, wenn sie die Identifizierung eines Objekts innerhalb eines Objekttyps herbeifhrt. Trgt sie zur Identifizierung bei, heit sie teil-identifizierend. Alle anderen heien beschreibend.f70 f fpfqfff fF2ER-Modell, graphisch5Objekttyp durch zweigeteilten Kasten darstellen Kopfteil enthlt Objekttypnamen im Singular unterer Teil enthlt Benennungen von Eigenschaften im Singular (teil-)identifizierende Eigenschaften werden unterstrichen die Reihenfolge der Eigenschaften ist beliebig, aber identifizierende sollten zu Anfang stehen.6 f8f f% f fff_G3Datenmodell, Definitionen (2)uEine Beziehung kennzeichnet den konkreten Zusammenhang zwischen zwei realen Objekten Ein (dualer) Beziehungstyp beschreibt den typmigen sachlogischen Zusammenhang, der zwischen den Objekten zweier Objekttypen besteht. Jede Beziehungstyp-Richtung wird beschrieben durch: eine Benennung, die die Semantik des Zusammenhangs ausdrckt (Verb) die Optionalitt die Kardinalittf fT ff f0f f f,X  C/ ER-Modell, duale BeziehungstypenH4Datenmodell, Definitionen (3)Ein schwacher Objekttyp ist ein Objekttyp, dessen Eigenschaften es nicht erlauben, jedes Objekt dieses Typs zu identifizieren. Ein Beziehungstyp ist rekursiv, wenn er einen Zusammenhang zwischen Objekten desselben Objekttyps beschreibt. Ein Koppel-Objekttyp ist eine Menge von sachlogischen Verbindungen von Objekten, ber die dieselben Informationen gespeichert werden. Sollen ber die Verbindung zweier Objekte weitere Angaben gespeichert werden (Beziehungs-Eigenschaften), so wird der Beziehungstyp in einen Objekttyp umgewandelt. Wenn es sinnvoll erscheint, einer Eigenschaft weitere Untereigenschaften zuzuordnen, so wird die Eigenschaft in einen Objekttyp umgewandelt.f~fTffsfED0ER-Modell, SonderflleOschwacher Objekttyp rekursive Beziehung Koppelobjekt Beziehungsattribut I5Datenmodell, Definitionen (4)Ein Objekttyp kann identifiziert werden durch eine einzige Eigenschaft eine Kombination von Eigenschaften eine zustzliche  knstliche Eigenschaft eine Beziehungstyp-Richtung eine Kombination von Beziehungstyp-Richtungen eine Kombination von Eigenschaften und Beziehungstyp-Richtungen Eine minimale identifizierende Kombination von Eigenschaften/Richtungen heit Schlssel des Objekttyps. Ein Schlssel heit zusammengesetzt, wenn er aus mehr als einer Eigenschaft/Richtung besteht. Ein Teilschlssel ist eine echte Teilmenge einer identifizierenden Kombination von Eigenschaften/Richtungen. .5 ffA f%ff# f fCJ6Beispiel ER-ModellVBGeneralisierungK7Normalisierung L8 1. NormalformEine Eigenschaft heit mehrwertig, wenn sie zur gleichen Zeit mehrere Werte aus dem Wertebereich annimmt. Ein Objekttyp ist in 1. Normalform (1NF), wenn er keine mehrwertigen Eigenschaften hat. Es gibt auch Datenbankmodelle, in denen mehrwertige Eigenschaften erlaubt sind: NF2-Modell  non-first-normal-form-modell Im NF2-Modell knnen mehrwertige Eigenschaften sogar geschachtelt werden.  K f^ ff ffE5MM91. NormalisierungsschrittN:Funktionale Abhngigkeiten:Seien A und B zwei Eigenschaften eines Objekttyps. B heit von A funktional abhngig, wenn sich fr jedes Objekt des Objekttyps der Wert von B zwingend aus dem Wert von A erschlieen lt. In dieser Definition kann statt einer Eigenschaft A auch eine Kombination von Eigenschaften oder Beziehungstyp-Richtungen . (A1, A2, ..., An) stehen. 6Af f#   NO;Funktionale Abhngigkeiten (2)redundante Speicherung von (Name, Vorname) und (Projektleiter) nderungsproblem Lschungsproblem Einfgeproblem Ursache: Abhngigkeit von Teilschlsseln&pf"P< 2. NormalformEin Datenmodell ist in der zweiten Normalform (2NF), wenn es sich in der 1. Normalform befindet und jede beschreibende Eigenschaft eines Objekttyps vom Schlssel des Objekttyps, aber nicht schon von einem Teilschlssel funktional abhngig ist. Verletzungen der 2NF knnen nur bei Objekttypen auftreten, die einen zusammengesetzten Schlssel haben. (Beziehungstyp-Richtungen knnen auch Teile des Schlssels sein!)f+Wf+f#f"fBQ=2. NormalisierungsschrittS?Funktionale Abhngigkeiten (3){redundante Speicherung von (Hausmeister) nderungsproblem Lschungsproblem Einfgeproblem Ursache: Kette von Abhngigkeiten&|ZfR> 3. NormalformlEine Eigenschaft B heit von einer Eigenschaftskombination (A1, A2, ..., An) transitiv abhngig, wenn es eine weitere Eigenschaft C gibt mit funktionalen Abhngigkeiten (A1, A2, ..., An) C B. Ein Datenmodell heit in 3. Normalform (3NF), wenn sie in 2NF ist und wenn es keine beschreibende Eigenschaft gibt, die vom Schlssel ihres Objekttyps transitiv abhngig ist. Alternativformulierung: es gibt keine funktionalen Abhngigkeiten zwischen beschreibenden Eigenschaften. Achtung: die Formulierungen sind nicht quivalent, wenn es alternative Schlssel gibt.8nWn=fP ffDfj!1T@3. NormalisierungsschrittUAWeitere NormalformenBoyce-Codd-Normalform: Alle Abhngigkeiten gehen von kompletten Schlsselkandidaten aus. 4. Normalform: Alle mehrwertigen Abhngigkeiten gehen von kompletten Schlsseln aus. 5. Normalform (Projection-Join-Normalform) Denormalisierung: bewut in Kauf genommene Verletzung einer Normalform transitive Abhngigkeit abhngige Eigenschaft ndert sich selten Zugriff auf Eigenschaft ist erleichtert Modellierung eines kaum gebrauchten Objekttyps entflltGZZfD fH ff7Z WCBCNFvObjekttyp ist in 3NF Abhngigkeit Lieferant Bauteil widerspricht BCNF nderungs-, Einfge- und Lschproblematik tritt auf! Es gibt (Projekt, Lieferant) als zweiten Schlsselkandidaten ^"fOf!XD4NF YEDatenbankmodelleRelationales DatenbankmodellZFRelationales DatenmodelltEigenschaften Domnen = Wertebereiche Attribut A Dom[A] = {a1, a2, a3, ...} Objekttyp Kreuzprodukt von Domnen Entittstyp E(A1, A2, ... , An) Dom[A1] Dom[A2] ... Dom[An] Eine Teilmenge R Dom[A1] Dom[A2] ... Dom[An] heit (n-stellige) Relation ber den Wertebereichen der Attribute A1, A2, ... , An. Dabei heit n der Grad der Relation. R beschreibt die Menge der Objekte vom Objekttyp E, die gespeichert werden sollen.((%Dn& f% ff fffff  f C 'Sf\GRelationales Datenmodell (2)Relationen lassen sich als Tabellen darstellen: E A1 A2 ... An a11 a12 a1n a21 a22 ... a2n ... ... ... ... am1 am2 ... amn Aus der Mengeneigenschaft folgt: Die Reihenfolge der Tupel ist nicht definiert Es kann keine zwei identischen Tupel geben. 1[n{nn0            % f'f f>63]HRelationales Datenmodell (3)Die Relation R ist ber die Zeit hinweg variabel es knnen Objekte hinzugefgt, entfernt oder gendert werden. Auf die Elemente der Relation (= die Objekte) wird ber Schlssel zugegriffen. Notfalls ist die Gesamtheit der Attribute der Schlssel man unterscheidet: Primrschlssel und Alternativschlssel Beziehungen zwischen Objekttypen werden ber Fremdschlssel realisiert: Fremdschlssel sind (Primr-)schlssel eines anderen Objekttyps, die in die Relation zustzlich aufgenommen werden.sHtffx fKff-f t M_J"Beziehungen im relationalen Modell ^IIntegrittsbedingungenPrimrschlsselbedingung: Ein Primrschlssel-Attribut (bzw. -Attribut-kombination) muss stets einen Wert aus dem Wertebereich des Attributs haben. Dieser darf auerdem nur einmal in der Relation vorkommen. (Verbot von Null-Werten) Fremdschlsselbedingung: Ein Fremdschlssel-Attribut (bzw. -kombination) hat entweder den Wert Null, oder einen Wert, der als Primrschlssel in der referenzierten Tabelle tatschlich vorkommt.f fF^>G  N`K&Beziehungen im relationalen Modell (2)Ist im Prinzip berflssig. *) B bernimmt Schlssel von A als  not null und  unique Fremdschlssel oder A nimmt Schlssel von B als  unique Fremdschlssel auf. B nimmt Schlssel von A als  unique Fremdschlssel auf. B bernimmt Schlssel von A als Fremdschlssel B bernimmt Schlssel von A als  not null Fremdschlssel nicht realisierbar! (links stehen zwei Alternativen) B bernimmt Schlssel von A als Teil des Primrschlssels *) B erklrt seinen Schlssel als  not null und  unique Fremdschlssel, der den Schlssel von A referenziert - und A macht dasgleiche umgekehrt.0020x2/02:02502:020Z2ffGff!f:ftO33 *   aL%M:N-Beziehungen relational modelliert pUKoppelrelationen (2) bMDatenbanksprachen#relationale Zugriffsoperationen SQLcNZugriffsoperationensatzweiser Zugriff ber Primrschlssel wie Dateizugriff sequentielle Verarbeitung Mengenoperationen Relationen sind Mengen , , \ = Durchschnitt, Vereinigung, Differenz Ergebnis sind vollstndige neue Relationen vom gleichen Typ Teilmenge und/oder Untertyp Selektion nach Auswahlkriterien Projektion auf Untermenge der Attribute Join@H@kH$ @dO Selection MPersNr Name Abteilung Gehalt Position 100000 Schmidtbauer VORST 320000 Vorst.Ass. 100100 Kuhn VORST 100200 Holzmann CON 75000 Trainee 100300 Sulzing CON 120000 Sachbearb. 100400 Berlisch CON 115000 Sachbearb. 100500 Dingwort EDV 95000 Assistent 100600 Petterson EDV 150000 Assistent 100700 Grtze EDV 180000 Abt.Leiter$N(f&l    / =fP ProjektionMPersNr Name Abteilung Gehalt Position 100000 Schmidtbauer VORST 320000 Vorst.Ass. 100100 Kuhn VORST 100200 Holzmann CON 75000 Trainee 100300 Sulzing CON 120000 Sachbearb. 100400 Berlisch CON 115000 Sachbearb. 100500 Dingwort EDV 95000 Assistent 100600 Petterson EDV 150000 Assistent 100700 Grtze EDV 180000 Abt.Leiter$N(f&l    / =gQProjektion + SelektionMPersNr Name Abteilung Gehalt Position 100000 Schmidtbauer VORST 320000 Vorst.Ass. 100100 Kuhn VORST 100200 Holzmann CON 75000 Trainee 100300 Sulzing CON 120000 Sachbearb. 100400 Berlisch CON 115000 Sachbearb. 100500 Dingwort EDV 95000 Assistent 100600 Petterson EDV 150000 Assistent 100700 Grtze EDV 180000 Abt.Leiter$N(f&l    / =hRJoinoTNormalformen revisited nNormalisierung wird erreicht durch Zerlegen einer Tabelle in zwei (oder mehr) Tabellen Die Originaltabelle kann durch Join der Teiltabellen wiedergewonnen werden Bedingungen: 1. Alle funktionalen Abhngigkeiten finden sich in den Teiltabellen wieder 2. Es entstehen keine zustzlichen Stze beim Join der Teiltabellen ( lossless join ) Normalisierung bis 3NF erfllt die Bedingungen Normalisierung nach BCNF verletzt u.U. die 1. Bedingung h#fKf( fflff-f!>v knSPJNF revisited qVSQLDDL DMLrW Geschichte1974 Vorlufer ist SEQUEL = structured english query language, von IBM, fr System R 1983 1. Version von DB2 mit SQL 1986 ANSI-Standard SQL-86 1992 SQL-92 (auch SQL-2) - Tabellen knnen nachtrglich gendert werden - Integrittsbedingungen knnen formuliert werden - Domnen knnen definiert werden - Mengenoperationen 1992 (Mai) SQL-3 (nie fertiggeworden) 1999 SQL:1999 setzt SQL-3 fort, Objektorientierung`f5 ffff  ff*#usX SQL SyntaxKurzes Tutorial: Syntax-Diagramme in BNF mit Erluterungen Syntaxdiagramme: Verlinkte Diagramme der wesentlichen Teile von SQL-21) SQLPLUS Anweisungen zum Formatieren von Abfrageergebnissen und zur Reportgenerierung 0RZ` *?P 0 0 0 0A 0AR 0R 0 0 0 0yCREATE (einfach)xcreate table Mitarbeiter (Name varchar2(30) not null, Abteilung char(5), Gehalt number(7), Position varchar2(20))y ff f ff6 7z CREATE ...create table Mitarbeiter (PersNr number(6) not null, Name varchar2(30) not null, Abteilung char(5), Gehalt number(7), Position varchar2(20), primary key (PersNr), foreign key (Abteilung) references Abteilung(Abtnr)) fff f fff f ff{ CREATE ...create table Mitarbeiter (PersNr number(6) not null, Name varchar2(30) not null, Abteilung char(5), Gehalt number(7), Position varchar2(20), primary key (PersNr), check(Gehalt<200000 or Abteilung= VORST ))0 fff f fff ff  ff  8 | CREATE ...4create index Abt_index on Mitarbeiter (Abteilung) 5 f f f@ } CREATE ...>create sequence Personal start with 100000 increment by 100Z? f fffH ~INSERTinsert into Mitarbeiter values ( Personal.nextval,  Schmidtbauer ,  VORST  , 320000,  Vorst.Ass. )  f f fff f    INSERT ...insert into Mitarbeiter (Name, PersNr) values (  Kuhn , Personal.nextval) S fff ffZ SELECTselect * from Mitarbeiter. ff$  SELECT ...(select Abteilung, Name from MitarbeiterZ) ff ff$  SELECT ...!select Abteilung from MitarbeiterP" ff ff$   SELECT ...*select distinct Abteilung from MitarbeiterP+ ff ff$   SELECT ...select Name, Gehalt/12  mtl. Gehalt from Mitarbeiter where Gehalt < 120000Lf f f ffffH   SELECT ...select Name, Gehalt/12  mtl. Gehalt from Mitarbeiter where Gehalt between 80000 and 120000\f f f fffffl   SELECT ...select Name, Gehalt/12  mtl. Gehalt from Mitarbeiter where Gehalt between 80000 and 120000 and Abteilung =  EDV Rrf f f ffff ff~   SELECT ...XPersNr Name Abteilung Gehalt Position 100000 Schmidtbauer VORST 320000 Vorst.Ass. 100700 Grtze EDV 180000 Abt.Leiter 100600 Petterson EDV 150000 Assistent 100300 Sulzing CON 120000 Sachbearb. 100400 Berlisch CON 115000 Sachbearb. 100500 Dingwort EDV 95000 Assistent 100200 Holzmann CON 75000 Trainee 100100 Kuhn VORST$Y)f0  /    (JoinNAbteilung Kurz Leiter Beschreibung EDV 100700 EDV CON 100900 ControllingOOf,1  Outer-Join$ Gruppenfunktionenzselect sum(Gehalt)  Personalkosten from Mitarbeiter \> ff f . Gruppenwechselselect Abteilung, sum(Gehalt)  Personalkosten from Mitarbeiter group by Abteilung W f ff f fH   Gruppenwechsel ...select Abteilung, sum(Gehalt)  Personalkosten from Mitarbeiter group by Abteilung having sum(Gehalt) < 300000 sff f f ffZ   Count-Funktion select count(*) from Mitarbeiter 8 select count(Abteilung) from Mitarbeiter 8 select count(distinct Abteilung) from Mitarbeiter 3 select count(Gehalt) from Mitarbeiter 7 ~ ff f ff f ff f ff        Unterabfragenselect Name from Mitarbeiter where Gehalt = (select max(Gehalt) from Mitarbeiter) Schmidtbauerkf ffff f f~    Unterabfragen ...select Name from Mitarbeiter m where not exists (select * from Abteilung where Kurz = m.Abteilung) Schmidtbauer Kuhnf ff$ ff fff  korrelierte Unterabfragen select Name, Abteilung from Mitarbeiter a where Gehalt = (select max(Gehalt) from Mitarbeiter b where a.Abteilung = b.Abteilung) Name Abteilung Schmidtbauer VORST Grtze EDV Sulzing CONf f fffff ff f fLff  5 tYSQL Syntax (2)RAliasnamen Select expression [as] aliasname ... Outer Join ... from tab1 natural join tab2 using (col1, col2, ...) ... ... from tab1 join tab2 on bedingung ... ... from tab1 {left | right | full} outer join tab2 ... Subselect ... where {exists | unique } (unordered select) ... Case-Struktur ... case when bed1 then wert1 ... case wert when bed2 then wert2 ... when wert1 then wert2 else wert when wert3 then wert4 end ... ... %  43 f f f ffffff*f f  ffffffff-ff$f6N         ,\ 0  0 0 00: 0:; 0;? 0?D 0DQ 0QV 0V[ 0[` 0`w 0w{ 0{ 0 0 0 0 0 0 0 0SuZSQL Syntax (3)NMengenoperationen Select ... from (table tab1 {union | intersect | except} table tab2) ... Bedingungen mit Listen ... where (exp1, exp2, exp3) = (exp4, exp5, exp6) ... ... where (exp1, exp2, exp3) < (exp4, exp5, exp6) ... Domnen Create domain name typ [check bedingung]hjm)fff?f   f   f   f   f   f   f * N25 }bBeispiele zu SQLXBibliotheksbeispiel 1. Gesucht: Die Rckgabedaten aller Bcher, die eine Person namens  Meyer ausgeliehen hat. 2. Gesucht: Eine Liste aller Reservierungen mit Namen, der reservierenden Person, Reservierungsdatum und der ISBN des reservierten Buches, fr die keine andere zeitlich vorrangige Reservierung vorliegt. 3. Gesucht: Eine Liste aller berflligen Bcher, fr die eine Reservierung vorliegt. Die Liste soll die Signatur des Buches, den Namen des Ausleihers und den Namen des (zeitlich) ersten Reservierenden enthalten. 4. Gesucht: Fr alle 1989 erschienenen Bcher die minimale, maximale und durchschnittliche Zahl von Ausleihen im Zeitraum von Oktober bis Dezember 2002. fffRff f f~cBeispiele zu SQL (2)5. Gesucht: Die gleiche Anfrage wie eben, aber fr jedes Rckgabedatum einzeln, in einer Tabelle. 6. Gesucht: Jene Bcher, fr die es im November 2002 mehr als doppelt so viele Reservierungen gab, wie fr alle Bcher im Durchschnitt, und die nur einmal vorhanden sind. 7. Gesucht: Eine Liste aller Bcher mit Titel und ISBN, die mehrfach vorhanden sind. Skripten zum Erstellen des Beispiels, zum Fllen mit Daten und mit Vorschlgen fr Anfragen zu 1. bis 7. finden sich in diesem Verzeichnis zum Download.jf fY f f# 0hTrigger'Sind fast von allen Herstellern implementiert Sind erst Bestandteil von SQL-3 CREATE TRIGGER triggername { BEFORE | AFTER } { INSERT | DELETE | UPDATE [ OF column1, ... ] } ON tabelle [ REFERENCING OLD AS altezeile NEW AS neuezeile ] [ WHEN bedingung ] sql-Anweisung [ FOR EACH ROW ]NOf3fff ff ff fft^ J  i Trigger (2) CREATE TRIGGER gehalt_upd BEFORE UPDATE OF gehalt ON Angestellte REFERENCING OLD AS old NEW AS new WHEN :new.Gehalt > 1.2 * :old.Gehalt AND :old.Abteilung <>  VORST INSERT INTO controller_tab_1 VALUES (:old.Name, :old.Abteilung, :old.Gehalt, :new.Gehalt) FOR EACH ROWf ff fff"f ff9 f-G 4v[Eingebettetes SQL, Beispiel C++uSQL-Befehle sind eingebettet Prcompiler: setzt um in Bibliotheksaufrufe, belt SQL als Kommentar im Programmtext.&+K+K Nw\#Eingebettetes SQL, ProgrammstrukturuVariablendeklaration EXEC SQL BEGIN DECLARE SECTION; char Name[21]; int Gehalt; int Personnr; EXEC SQL END DECLARE SECTION; Fehlerbehandlung vereinbaren EXEC SQL WHENEVER SQLERROR GOTO Marke1; EXEC SQL WHENEVER NOT FOUND GOTO Marke2; Verbindung zum Server EXEC SQL CONNECT TO servername; (Details wie UserID- und Passwortbergabe hngen von der Systemumgebung ab.) kSofkfQf Mb7   ;x]'Eingebettetes SQL, Programmstruktur ...HSQL-Befehl EXEC SQL SELECT Name, Gehalt FROM Angestellter INTO :Name, :Gehalt WHERE Personnr = :Personnr; Fehlerbehandlung if strcmp(SQLSTATE,  02000 ) cout <<  Personnr  << Personnr <<  ist nicht vorhanden ; else cout <<  SQL-Fehler, Fehlercode:  << SQLSTATE; z g fffZ    3y^ SQL-CursorOVerarbeitung von Tabellen satzweise Cursor-Deklaration EXEC SQL DECLARE c_ang CURSOR FOR SELECT Personnr, Gehalt ... FOR UPDATE OF Gehalt; Cursor ffnen EXEC SQL OPEN c_ang; Stze verarbeiten (in einer Schleife) EXEC SQL FETCH FROM c_ang INTO :Personnr, :Gehalt INDICATOR :i_gehalt; if (i_gehalt = = 0) continue; 7_&p7f^f&fp   )E?z_SQL-Cursor (2)Stze verndern (in derselben Schleife) EXEC SQL UPDATE Angestellter SET Gehalt = Gehalt + :Zuschlag WHERE CURRENT OF c_ang; Endekriterium fr Schleife until (strcmp (SQLSTATE,  02000 )= = 0) Cursor schlieen EXEC SQL CLOSE c_ang;(e)(fef)f  b  >gSQL-Cursor (3)DECLARE cursorname [SCROLL] CURSOR FOR SELECT ... [ ORDER BY ... ] FOR UPDATE OF column1, ... FETCH [{ NEXT | PRIOR | FIRST | LAST } | { ABSOLUTE | RELATIVE } wert ] FROM cursorname INTO :variable, ...f ffEf ff, {`Eingebettetes SQL (2)Cursorverarbeitung ist oft vermeidbar Hauptzweck ist es, die Lcke zu schlieen, die durch mangelnde Array-Verarbeitung in Programmiersprachen entsteht. Deklaration eines Cursors setzt automatisch Sperren Mismatch Datentypen SQL und Programmsprache insbesondere fr Datumstypen, LONG etc. Spezielle Behandlung von VARCHAR in der DECLARE SECTION ist erlaubt: VARCHAR name[40]; Umsetzung in Array + Lngenfeld WHENEVER-Fehlerbehandlung benutzt lexical scoping6&t`(!$ #&fX,f, ff!'   f #f6 G|a Dynamic SQL4Execute Immediate: EXEC SQL EXECUTE IMMEDIATE :sql_command; Auswertung und Compilierung der Anweisung erfolgt erst zur Laufzeit. grtmgliche Flexibilitt Prepare, Execute Using: sql_command  delete from angestellte where personnr = ? EXEC SQL PREPARE delcommand FROM sql_command; ... EXEC SQL EXECUTE delcommand USING :personnr; Compilierung der Anweisung kann vor dem Linken stattfinden.)y<)f` ff;(b    >dBeispiel Oracle SQLEXEC SQL BEGIN DECLARE SECTION; VARCHAR username[20]; VARCHAR password[20]; int emp_number; float commission; EXEC SQL END DECLARE SECTION; EXEC SQL INCLUDE sqlca; void sqlerror(); main() { strcpy(username.arr, "SCOTT"); username.len = strlen(username.arr); strcpy(password.arr, "TIGER"); password.len = strlen(password.arr); EXEC SQL WHENEVER SQLERROR DO sqlerror(); EXEC SQL CONNECT :username IDENTIFIED BY :password; Zf_f&     0  !  fBeispiel Oracle SQL scanf("%d", &emp_number); EXEC SQL WHENEVER NOT FOUND GOTO notfound; EXEC SQL SELECT COMM INTO :commission FROM EMP WHERE EMPNO = :emp_number; printf("%-8s \n", commission); notfound: printf("Not a valid employee number - try again. \n"); EXEC SQL COMMIT WORK RELEASE; exit(0); } void sqlerror() { EXEC SQL WHENEVER SQLERROR CONTINUE; printf("ORACLE error detected. \n"); EXEC SQL ROLLBACK RELEASE; exit(1); } fpf!&f'f D$   ) , %eBeispiel mySQL $db = mysql_connect("127.0.0.1","root"); mysql_select_db("flohmarkt",$db); $result = mysql_query("SELECT * FROM eintraege",$db); while ($myrow = mysql_fetch_row($result)) { printf( Laufende Nummer: %s \n , $myrow[0]); printf( Vorname: %s \n , $myrow[1]); printf( Name: %s \n , $myrow[2]); }hAf3f ff ff fff) f% f% f    j Beispiel JDBCimport java.sql.*; class Employee {public static void main (String args[]) throws SQLException {DriverManager.registerDriver( new oracle.jdbc.driver.OracleDriver()); Connection conn = DriverManager.getConnection ("jdbc:oracle:oci7:@","scott","tiger"); Statement stmt = conn.createStatement (); ResultSet rset = stmt.executeQuery ("select NAME from ANGESTELLTER"); while (rset.next ()) System.out.println (rset.getString (1)); } } 0f? fHff:ff ff0 f f@        kJDBC-API Klassen und Interfaces lJDBC-APIInterface Driver wird vom Datenbankhersteller implementiert DriverManager ist in java.sql.package vorhanden wird versorgt mit der URL des JDBC-Drivers stellt die Verbindung her Connection Objekt stellt Statement Objekt bereit Statement Objekt stellt ResultSet Objekt bereit Interface DatabaseMetaData enthlt Informationen ber Tabellen etc. aus dem Datadictionary der Datenbank Interface ResultSetMetaData enthlt Informationen ber den Typ etc. des zurckgegebenen ResultSet lE- f, ff E f f f ff2ff= fmODBCOpen Database Connectivity: offener Standard fr API fr den Datenbankzugriff u.a. fr Access, dBase, DB2, und Excel bentigt wird: ODBC software Treiber fr jede Datenbank basiert auf: The Open Group standard SQL Call-Level Interface erstes Release 1992 durch SQL Access Group auf gngigen PC-Plattformen verfgbar fr JDBC gibt es eine JDBC-ODBC "bridge" zum Zugriff auf ODBC-Datenbanken. :)%f!%f!%f!%f"!%fR!)!!%f !%f!%f>!%f$!                  #   #  )                   0gj 0nDatenbanktuning Performance Optimierung oTuningpotential DB-Interna: internes Modell z.B. Indexe Design konzeptuelles Modell Betriebssystem Hardware z.B. Plattenkonfiguation Applikation SQL-Code Optimierung "  "  pOptimizer, regelbasiert  qOptimizer, kostenorientiert  rOptimizer, kostenorientiert (2) Faktoren: Tabellengren Indexstufen Feldselektivitten CPU (Anzahl, Geschwindigkeit) Speichergre Faktoren sind statisch statistischT Z Z  QHints gegeben vom Anwender untersttzen Optimierer erzwingen bestimmtes Verhalten*LL RsFaktoren Indexe dafr spricht: hufige Suche ber indizierte Spalten hufige Sortierung nach indizierten Spalten Spalte ist NOT NULL Indexwerte sind gut gestreut, d.h. gleichverteilt im Wertebereich indizierte Spalten bilden einen Fremschlssel dagegen spricht: Tabelle ist kleiner als 100 KB nur wenige verschiedene Indexwerte einige Indexwerte sind extrem hufig indizierte Tabelle unterliegt hufigen nderungenH t Faktoren (2) Feldselektivitt kann auch in % gemessen werden maximal 100%, wenn Spalte faktisch unique-Eigenschaft hat Index lohnt sich bei einer Selektivitt ab 85% in Ausnahmefllen reichen 30% select count(distinct spalte)/count(*) as feld_sel from tabelle x@ff  u Faktoren (3)  vTabellenzugriffe  wTabellenzugriffe (2) Access by Rowid bentigt entweder die rowid zum Zugriff oder einen Index Full Table Scan wird z.B. bei select * from tabelle ausgefhrt Index Unique Scan setzt Index voraus nicht mit allen where-Klauseln mglich wird gefolgt von Access by Rowid Index Range Scan bei Abfragen mit  like ,  between ... and bei Verwendung von Indexen ber Spalten ohne  unique -Klausel9/[iff fP f-f oxIndexverwendung nur unter Bedingungen: keine Funktion angewendet auf Spalte mit Index keine Abfrage auf IS NULL oder IS NOT NULL keine Abfrage mit Ungleichheit () Indexe werden aber insbesondere verwendet bei Ermittlung von Minimum und Maximum (MIN- bzw. MAX-Funktion)n}*'z*A /  ` f33` 3f3` ___>?" dd@~?" dd@  " @ `"  n?" dd@   @@``@n?" dd@  @@``PR    @ ` ` p> >  :-&Prof. Dr. Riebesehl   (    R  s *?   ZHSatz 1(2 @ $ ,$D  0 $ T3jJ ?@ $ N q3jJ?p >Satz 2(2 @  $  ,$D  0 !$ T3jJ ?@ "$ Nt3jJ?p >Satz 3(2 @ #$   ,$D 0 $$ T3jJ ?@ %$ Nx3jJ?p >Satz 4(2B 6$ TDjJ?,$D  0B 7$ TDjJ?  ,$D  0 @ Q$ P ,$D 0 R$ T3jJ ?@ S$ N|3jJ?p >Satz 6(2 @ T$  P,$D 0 U$ T3jJ ?@ V$ N3jJ?p >Satz 5(2r $ S       $ S D 0 <$D  0  v $ NjJ ?l @ $@,$D 0 $ T3jJ ?@ $ NT3jJ?p >Satz 1(2z @ $ ,$D 0  $ T3jJ ?@  $ N\3jJ?p >Satz 2(2z @  $  ,$D 0  $ T3jJ ?@  $ N%3jJ?p >Satz 3(2z @ $  ,$D 0 $ T3jJ ?@ $ N83jJ?p >Satz 4(2z @ $  P,$D 0 $ T3jJ ?@ $ N(3jJ?p >Satz 5(2z @ $ P ,$D 0 $ T3jJ ?@ $ N3jJ?p >Satz 6(2 $ N蜼3jJ?0  EEinfgen = Anfgen: 2 $ N3jJ? d,$D 0 MVersuch, Satz 3 zu lschen: 2z @@  /$  ,$D  0 -$ Z3jJ ?@@  .$ T3jJ?p@  :Satz 3(2z @   9$  ,$D   0N @@  :$    ;$ T3jJ ?@@  <$ N3jJ?p@  :Satz 4(2 @ =$ @  ,$D 0 >$ T3jJ ?@ ?$ N3jJ?p >Satz 4(2z @   @$  P,$D   0N @@  A$    B$ T3jJ ?@@  C$ N3jJ?p@  :Satz 5(2 @ D$ @  ,$D 0 E$ T3jJ ?@ F$ N3jJ?p >Satz 5(2z @   G$  ,$D   0N @@  H$    I$ T3jJ ?@@  J$ Nd3jJ?p@  :Satz 6(2 @ K$ @  ,$D 0 L$ T3jJ ?@ M$ N43jJ?p >Satz 6(2H $ 0޽h ? 3333  ((  (l ( C d     l ( C te   H ( 0޽h ? 3333'  H'@'?C,@&(  ,r , S      r , S  `    , N3jJ?0 ,$D 0 Jeinige Datenoperationen: 2v , NjJ ?0 z @ , @,$D 0 , T3jJ ?@ , N|3jJ?p >Satz 1(2z @  , ,$D 0  , T3jJ ?@  , N3jJ?p >Satz 2(2z @  ,  ,$D 0  , T3jJ ?@ , ND#3jJ?p >Satz 3(2z @ , P ,$D 0 , T3jJ ?@ , N`'3jJ?p ?Satz 10(2z @ ,  P,$Dd 0 , T3jJ ?@ , N+3jJ?p >Satz 4(2z @ , P ,$Dd 0 , T3jJ ?@ , N.3jJ?p >Satz 7(2z @ , P ,$Dd 0 , T3jJ ?@ , N23jJ?p >Satz 8(2z @ , P P,$Dd 0 , T3jJ ?@ , N`63jJ?p ?Satz 12(2z @ , PP ,$D 0 , T3jJ ?@  , N(:3jJ?p ?Satz 13(2z @ !, ,$Dd 0 ", T3jJ ?@ #, N=3jJ?p ?Satz 11(2z @ $, ,$Dd 0 %, T3jJ ?@ &, NA3jJ?p >Satz 5(2z @ ', P,$Dd 0 (, T3jJ ?@ ), NE3jJ?p >Satz 6(2fl  @  <,,$D  0 4, Z3jJ ? @ 5, THI3jJ ?@  :Satz 5(2B 8, ZDjJ? z @ *,  P,$Dd  0 +, T3jJ ?@ ,, NHM3jJ?p >Satz 9(2l   ;, P,$D  0 1, Z3jJ ?  2, TQ3jJ? P  :Satz 9(2l p @  =,,$D  0 @ -,# p @ ,$D 0 ., T3jJ ?@ /, N0U3jJ ?p :Satz 2(2B 6, ZDjJ?p p B 7, ZDjJ?@ @ z @ >,  ,$D  0 ?, T3jJ ?@ @, NxY3jJ?p ?Satz 14(2z @ A, ,$D 0 B, T3jJ ?@ C, N]3jJ?p ?Satz 15(2H , 0޽h ? 3333  0( ] 0l 0 C       l 0 C |   H 0 0޽h ? 3333@  4(  4l 4 C      l 4 C |   ` 4 c $A ??Cv H 4 0޽h ? 3333o<  <<ft<;( <@@W@ <v r< NjJ ? 0r < S `     ` < c $A ??Cv t8 P  <P~ < N3jJ ?P~ < N3jJ ?P < N3jJ? p ;101(2  < N43jJ?Pp E Daten fr 101(2  < T3jJ ?PF P  < Pp~  < N3jJ ?P~ < N3jJ ?P < N3jJ? p ;102(2 < N3jJ?Pp E Daten fr 102(2 < T3jJ ?PF P < Pp~ < N3jJ ?P~ < N3jJ ?P < N3jJ? p ;103(2 < N3jJ?Pp E Daten fr 103(2 < T3jJ ?PF P < P~ < N3jJ ?P~ < N3jJ ?P < N3jJ? p ;104(2 < N3jJ?Pp E Daten fr 104(2 < T3jJ ?PF P < pP~ < N3jJ ?P~  < N3jJ ?P !< NУ3jJ? p ;105(2 "< N3jJ?Pp E Daten fr 105(2 #< T3jJ ?PF P $< pP~ %< N3jJ ?P~ &< N3jJ ?P '< Nૺ3jJ? p ;106(2 (< N3jJ?Pp E Daten fr 106(2 )< T3jJ ?PF P *< P~ +< N3jJ ?P~ ,< N3jJ ?P -< N|3jJ? p ;107(2 .< N3jJ?Pp E Daten fr 107(2 /< T3jJ ?PF P 6< Pp~ 7< N3jJ ?P~ 8< N3jJ ?P 9< N3jJ? p ;109(2 :< N3jJ?Pp E Daten fr 109(2 ;< T3jJ ?PF P << P ~ =< N3jJ ?P~ >< N3jJ ?P ?< N(ú3jJ? p ;110(2 @< Nhƺ3jJ?Pp E Daten fr 110(2 A< T3jJ ?PF P B< pP ~ C< N3jJ ?P~ D< N3jJ ?P E< N8˺3jJ? p ;111(2 F< NHκ3jJ?Pp E Daten fr 111(2 G< T3jJ ?PF P H< pP ~ I< N3jJ ?P~ J< N3jJ ?P K< NXҺ3jJ? p ;112(2 L< Nպ3jJ?Pp E Daten fr 112(2 M< T3jJ ?PF P N< P  ~ O< N3jJ ?P~ P< N3jJ ?P Q< Nhں3jJ? p ;113(2 R< Nxݺ3jJ?Pp E Daten fr 113(2 S< T3jJ ?PF P T< P p ~ U< N3jJ ?P~ V< N3jJ ?P W< N3jJ? p ;114(2 X< ND3jJ?Pp E Daten fr 114(2 Y< T3jJ ?PF P `<  P ~ a< N3jJ ?P~ b< N3jJ ?P c< N3jJ? p ;116(2 d< N$3jJ?Pp E Daten fr 116(2 e< T3jJ ?PF P f<  pP ~ g< N3jJ ?P~ h< N3jJ ?P i< Nt3jJ? p ;117(2 j< N3jJ?Pp E Daten fr 117(2 k< T3jJ ?PF P l<  pP ~ m< N3jJ ?P~ n< N3jJ ?P o< N3jJ? p ;118(2 p< Nd3jJ?Pp E Daten fr 118(2 q< T3jJ ?P|B s< TDjJ?   t< N3jJ?,$D 0 OSchlssel Daten 2H < 0޽h ? 3333  8(  8l 8 C ${     l 8 C {   H 8 0޽h ? 3333  p@$( 40A @r @ S hs     r @ S t   H @ 0޽h ? 3333\f   ff`De(  Dv D NjJ ? @ )l  @  ND @ ,$D 0@  @  D @  D T3jJ ? @  D Nd3jJ? @  :17(2N  @   D  @   D T3jJ ? @   D Nm3jJ? @  :22(2N  @   D ` P@   D T3jJ ? @  D NT"m3jJ? @  :23(2N  @  D   @  D T3jJ ? @  D NH3jJ? @  :31(2N  @  D  @  D T3jJ ? @  D N3jJ? @  :37(2N  @  D  @  D T3jJ ? @  D NT3jJ? @  :40(2N  @  D ` P@  D T3jJ ? @  D N캸3jJ? @  :42(2N  @  D   @  D T3jJ ? @  D N3jJ? @  :46(2N  @  D  @  D T3jJ ? @   D N¸3jJ? @  :49(2N  @  !D  @  "D T3jJ ? @  #D NŸ3jJ? @  :51(2N  @  $D ` P @  %D T3jJ ? @  &D N|ɸ3jJ? @  :52(2N  @  'D   @  (D T3jJ ? @  )D N θ3jJ? @  :56(2N  @  *D  @  +D T3jJ ? @  ,D Nϸ3jJ? @  :57(2N  @  -D  @  .D T3jJ ? @  /D N0Ӹ3jJ? @  :66(2N  @  0D ` P @  1D T3jJ ? @  2D Nָ3jJ? @  :69(2N  @  3D  @  4D T3jJ ? @  5D N ڸ3jJ? @  :70(2N  @  6D  @  7D T3jJ ? @  8D Nݸ3jJ? @  :71(2N  @  9D  @  :D T3jJ ? @  ;D N3jJ? @  :72(2N  @  D N3jJ? @  :78(2N  @  ?D   @  @D T3jJ ? @  AD N3jJ? @  :85(2N  @  BD  @  CD T3jJ ? @  DD Nx3jJ? @  :88(2N  @  ED  @  FD T3jJ ? @  GD N3jJ? @  :90(2N  @  HD ` P@  ID T3jJ ? @  JD NP3jJ? @  :92(2N  @  KD   @  LD T3jJ ? @  MD NL3jJ? @  :93(2()z  @  PD @  ,$D 0N  @  QD  @  RD T3jJ? @  SD N3jJ? @  90(2N  @  TD  @  UD T3jJ? @  VD N3jJ? @  91(2N  @  WD ` P@  XD T3jJ? @  YD N3jJ? @  92(2N  @  ZD   @  [D T3jJ? @  \D N3jJ? @  93(2N  @  ]D  @  ^D T3jJ? @  _D NX 3jJ? @  94(2N  @  `D  @  aD T3jJ? @  bD N3jJ? @  95(2N  @  cD ` P@  dD T3jJ? @  eD N3jJ? @  96(2N  @  fD   @  gD T3jJ? @  hD NL3jJ? @  97(2N  @  iD  @  jD T3jJ? @  kD NX3jJ? @  98(2N  @  lD  @  mD T3jJ? @  nD N3jJ? @  99(2N  @  oD ` P @  pD T3jJ? @  qD N\3jJ? @  :10(2N  @  rD   @  sD T3jJ? @  tD N"3jJ? @  :11(2N  @  uD  @  vD T3jJ? @  wD NL&3jJ? @  :12(2N  @  xD  @  yD T3jJ? @  zD N)3jJ? @  :13(2N  @  {D ` P @  |D T3jJ? @  }D N<-3jJ? @  :14(2N  @  ~D  @  D T3jJ? @  D N03jJ? @  :15(2N  @  D  @  D T3jJ? @  D N43jJ? @  :16(2N  @  D  @  D T3jJ? @  D Nx73jJ? @  :17(2N  @  D ` P@  D T3jJ? @  D N:3jJ? @  :18(2N  @  D   @  D T3jJ? @  D Nh>3jJ? @  :19(2N  @  D  @  D T3jJ? @  D NA3jJ? @  :20(2N  @  D  @  D T3jJ? @  D NXE3jJ? @  :21(2N  @  D ` P@  D T3jJ? @  D NH3jJ? @  :22(2N  @  D   @  D T3jJ? @  D NHL3jJ? @  :23(2 D NO3jJ?@   A Satznummer: 2 l D C R     l D C R   l 0P  D0P ,$D  0 D NT3jJ?p 0 K42 < 56, links suchen 2R D TZ3jJ ?  PB D ZDjJ?P B D ZDjJ?0 0 P  D H,Ygֳgֳ ? ,$D 0 MTreffer beim vierten Zugriff.fl  P  D P ,$D  0 D N\3jJ? p L42 > 40, rechts suchen 2R D TZ3jJ ?pp B D TDjJ?p pP l 0  @  D0 @ ,$D  0B D ZDjJ?   D T3m ?0 @ l pp@  Dpp@ ,$D  0B D TDjJ?p  D T3m ? p@ l  @  D @ ,$D  0B D TDjJ?P P  D T3m ? @ jl p  D p ,$D 0 D Ntc3jJ?  D42 < 49, links 2B D ZDjJ?p0 p B D ZDjJ? 0 ol   D  ,$D  0 D Z3m ?p 0 @ B D  `DjJ?   D Th3jJ?  =42 = 42 2 D Nk3jJ? @  @ Schlssel: 2 H D 0޽h ? 3333  P H(( d5  H| H C    Pl H C 裸     H H 0޽h ? 3333*  **@DHL(( ^A$ٽ Lr L S 5     v L NjJ ? 0.8 @   L@ ~ L N3jJ ?@ L N:3jJ?@`p 9101 2~B  L NDjJ?``  L N=3jJ?@p =Daten(2~B  L NDjJ?@@  L NA3jJ?@ p <Zeiger 2:F @  L @ ~ L N3jJ ?@ L NE3jJ?@`p 9102 2~B L NDjJ?`` L NH3jJ?@p ;Daten 2~B L NDjJ?@@ L N L3jJ?@ p <Zeiger 2:F @  L   ~ L N3jJ ?@ L NO3jJ?@`p 9130 2~B L NDjJ?`` L NS3jJ?@p ;Daten 2~B L NDjJ?@@ L NW3jJ?@ p <Zeiger 2:F @  L  ~ L N3jJ ?@ L NLZ3jJ?@`p 9103 2~B L NDjJ?``  L N$^3jJ?@p ;Daten 2~B !L NDjJ?@@ "L N@a3jJ?@ p <Zeiger 2:F @  #L  pP ~ $L N3jJ ?@ %L Ne3jJ?@`p 9120 2~B &L NDjJ?`` 'L NDh3jJ?@p ;Daten 2~B (L NDjJ?@@ )L NLl3jJ?@ p <Zeiger 2:F @  *L  ~ +L N3jJ ?@ ,L No3jJ?@`p 9111 2~B -L NDjJ?`` .L NXs3jJ?@p ;Daten 2~B /L NDjJ?@@ 0L Ntv3jJ?@ p <Zeiger 2:F @  1L   ~ 2L N3jJ ?@ 3L N8z3jJ?@`p 9125 2~B 4L NDjJ?`` 5L N}3jJ?@p ;Daten 2~B 6L NDjJ?@@ 7L N܀3jJ?@ p <Zeiger 2| 8L TjJ ?(:(B 9L@ ZG+I]jJ ?(  X" ;L  fG-0HIjJ ?( XB L  `H/IjJ ?X h nz @  ?L P pP @,$D 0~ @L N3jJ ?@ AL N 3jJ?@`p 9128 2~B BL NDjJ?`` CL NL3jJ?@p ;Daten 2~B DL NDjJ?@@ EL NT3jJ?@ p <Zeiger 2" FL ZH/IjJ ?X h ,$D 0B GL@  `GpIijJ ?X j ,$D 0" HL  `H IQjJ ?h  ,$D 0H L 0޽h ? LL8LLL9LL+L;L +L$LL2LLFL2L@LGL@LLHL 3333  0T( DIHH Tl T C 0     l T C 1   H T 0޽h ? 3333V  `VXV XU( ˀAf Xr X S X     $7F  P  X  P ~ X NjJ ? P@ 4N  P  X  P N  P@  X  P@ N  @  X  @   X T3jJ ? @   X T`3jJ? @  :22(2T  @   X# y @   X T3jJ ? @  X N3jJ? @  :23(2T  @  X# q @  X T3jJ ? @  X N3jJ? @  :31(2T  @  X# j @  X T3jJ ? @  X NH3jJ? @  :37(2T  @  X# c @  X T3jJ ? @  X N3jJ? @  :40(2T  @  X# [ @  X T3jJ ? @  X N蠴3jJ? @  :42(2T  @  X# T @  X T3jJ ? @  X N3jJ? @  :46(2T  @  X# M @  X T3jJ ? @   X N03jJ? @  :49(2T  @  !X# E | @  "X T3jJ ? @  #X N3jJ? @  :51(2T  @  $X# > u@  %X T3jJ ? @  &X N 3jJ? @  :52(2T  @  'X# 7 m@  (X T3jJ ? @  )X N3jJ? @  :56(2T  @  *X# / f@  +X T3jJ ? @  ,X N3jJ? @  :57(2T  @  -X# ( _@  .X T3jJ ? @  /X N3jJ? @  :66(2T  @  0X# ! W@  1X T3jJ ? @  2X N3jJ? @  :69(2T  @  3X#  P@  4X T3jJ ? @  5X N83jJ? @  :70(2T @   X# @ P T  @  RX# @ p  SX T3jJ? @  TX N@Ĵ3jJ? @  91(2T  @  UX# @@ 0  VX T3jJ? @  WX NǴ3jJ? @  92(2T  @  XX# @   YX T3jJ? @  ZX N˴3jJ? @  93(2T  @  [X# @   \X T3jJ? @  ]X NPϴ3jJ? @  94(2T  @  ^X# @ p  _X T3jJ? @  `X NҴ3jJ? @  95(2T  @  aX# @@ 0  bX T3jJ? @  cX Nִ3jJ? @  96(2T  @  dX#  @  eX T3jJ? @  fX N`ڴ3jJ? @  97(2T  @  gX#  @  hX T3jJ? @  iX Nݴ3jJ? @  98(2T  @  jX#  @ p  kX T3jJ? @  lX N3jJ? @  99(2T  @  mX# @ @ 0  nX T3jJ? @  oX NH3jJ? @  :10(2T  @  pX#  @  qX T3jJ? @  rX N3jJ? @  :11(2T  @  sX#  @  tX T3jJ? @  uX N3jJ? @  :12(2T  @  vX#  @ p  wX T3jJ? @  xX NX3jJ? @  :13(2T  @  yX# @@ 0  zX T3jJ? @  {X N3jJ? @  :14(2T  @  |X# @   }X T3jJ? @  ~X N3jJ? @  :15(2 X T03jJ?@   A Satznummer: 2  X T3jJ? @  @ Schlssel: 2 8    X  X T3jJ ?   X T3jJ ?@ 0  X N 3jJ?@ 0  849 2,F    X p 0 0 X T3jJ ?   X T3jJ ?@ 0  X N$ 3jJ?@ 0  837 2,F    X p0 X T3jJ ?   X T3jJ ?@ 0  X N$ 3jJ?@ 0  857 2,F    X  @P X T3jJ ?   X T3jJ ?@ 0  X N3jJ?@ 0  823 2,F    X    X T3jJ ?   X T3jJ ?@ 0  X N3jJ?@ 0  852 2,F    X     X T3jJ ?   X T3jJ ?@ 0  X Nl3jJ?@ 0  842 2,F    X   X T3jJ ?   X T3jJ ?@ 0  X N|3jJ?@ 0  869 2 X # lGMHpCIMjJ ?P( p X  `GDjHIDjjJ ?P p X  fZG+SHI+SjJ ?  X  fG%HuI%jJ ?H  X  `GLHWILjJ ?6  B X ZDjJ?0 B X ZDjJ?00 B X ZDjJ?pp B X ZDjJ?   B X ZDjJ? B X ZDjJ? B X ZDjJ? B X ZDjJ? B X ZDjJ?0 0 B X ZDjJ? B X ZDjJ? B X ZDjJ? B X ZDjJ?  X  fG eHuI ejJ ?   X  `GHWIjJ ? |B X TDjJ?` `  X Nh%3jJ?` YZusatzinformationen*(2ff X ND*3jJ?   Q Datentrger* (2 ffB X ZDjJ?0 H X 0޽h ?XXXXXXX XXXXXXXXXXX XXX 3333  P( KK Pl P C T     l P C    H P 0޽h ? 3333  ,4\ }(  \r \ S lL     TF   4\    T    \#   \ TjJ ? B \ ZDjJ? PPB \ ZDjJ? B  \ ZDjJ? X \ T O3jJ? o rGruber ... ... ... .... ... ... Gumbiner ... ... ... ... ... ... Hinz ... ... ... ... ... ... ...s0P2s& D$8    \  N   \   ~ \ NjJ ? B \ TDjJ? PPB \ TDjJ? B \ TDjJ? T \ NU3jJ?    tImmer ... ... ... .... ... ... Inderst ... ... ... ... ... ... Landwehr ... ... ... ... ... ... ...u0P2u%I8  PP  \0 0N  PP  \  PP  \ TjJ ? PP B \ ZDjJ? B \ ZDjJ? B \ ZDjJ?  - \ N\3jJ? /  oHuber ... ... ... .... ... ... Hbsch ... ... ... ... ... ... Igel ... ... ... ... ... ... ...p0P2p \ Np`3jJ?@ @ C Datenblcke (2 f \ Nd3jJ?   B Indexblock (2 f8 p  .\gI   \ Nth3jJ?M  R... Gruber Huber Immer ...0P2 !\ T3jJ ?p B "\ TDjJ?pB #\ TDjJ?p@@B $\ TDjJ?p  B %\ TDjJ?p  B &\ TDjJ?  '\ Nm3jJ? K  2  (\ Nn3jJ?@ K  2  )\ No3jJ?@  K  2  *\ Nw3jJ?   K  2  +\ NHz3jJ?   K  2 " ,\  fG**H`I(jJ ? " -\  `G0$H>I(jJ ? i " /\  `GO*H|IjJ ?)  ` " 1\  `GH.I(jJ ?  2\  `GȘHI}IȘjJ ?  3\ N$~3jJ?0,$D 0 `*alle Blcke werden sequentiell durchsucht!+ 2+fH \ 0޽h ?_(\\,\)\\-\*\\/\'\\1\+\2\ 3333  dD(  dl d C C      d C F <$ 0  H d 0޽h ? 3333  `( , `l ` C >     l ` C H?   H ` 0޽h ? 3333@  h(    hl h C 4     ` h c $A ??  l h C 5   H h 0޽h ? 3333  |tp ( w   pl p C 0     ` p c $A ??  H p 0޽h ? 3333  x(  0pD xl x C +     l x C ,   H x 0޽h ? 3333 t(  wr  tl t C &p  l t C H' p  H t 0޽h ? 33V;  ;:i|9(  |l | C hݲ     ?F ` y| `~2 | NjJ ?`B | TDjJ? | T߲3jJ?` KDatei 1( 2 l P |P,$D 0 | T3jJ ?P  | N3jJ?P B nderungen (2 B  | TDjJ?B  | TDjJ?B  | TDjJ?B | TDjJ?B | TDjJ? l @p  |@p ,$D  0B $| ZDjJ?  (@ @`p  *|@`p r | BjJ ?p0 ~ | NjJ ?0 @` ~ | NjJ ?`  ~ | NjJ ? 0 ~  | NjJ ? @ ~ !| NjJ ?@ p@ ~ "| NjJ ?@@ p ~ #| NjJ ?@ p B %| TDjJ?0 ` B &| TDjJ?0 ` B '| TDjJ?@@B (| TDjJ?@p@B )| TDjJ?@pp .| N3jJ?   A Anwendung 1 2  l @  | @ ,$D  0B 3| ZDjJ?@ @6N @`p  4| @ r 5| BjJ ?p0 ~ 6| NjJ ?0 @` ~ 7| NjJ ?`  ~ 8| NjJ ? 0 ~ 9| NjJ ? @ ~ :| NjJ ?@ p@ ~ ;| NjJ ?@@ p ~ <| NjJ ?@ p B =| TDjJ?0 ` B >| TDjJ?0 ` B ?| TDjJ?@@B @| TDjJ?@p@B A| TDjJ?@pp B| Nx3jJ? P  A Anwendung 2 2 Bl  0 P  | 0 P ,$D  0N  }|  | TjJ ? | T3jJ?` i!Mischen, Sortieren nach Pers.nr., (282"GN 0 P  z| 0 P ~2 | NjJ ?pP B | TDjJ?P 0 P  | T3jJ?0   KDatei 2( 2  C| TjJ ?~ D|B NjJ ? ~ E| NjJ ?z P K|  p,$D  0 L| T3jJ ?P M| ND3jJ?P B nderungen (2 B N| TDjJ?B O| TDjJ?B P| TDjJ?B Q| TDjJ?B R| TDjJ?l J 0 |J  0,$D  0N  p  ~|  p  ,| TjJ ? p  -| T 3jJ?p p0  NSortieren nach Abteil.(2GN  0 {|  0~2 0| NjJ ? 0B 1| TDjJ?0 0 2| T3jJ?0  KDatei 3( 2 ~ F|B NjJ ?0J  ~ S| NjJ ?0 @ 5l 0  |0 ,$D  0N    |   ~ H| NjJ ?p   I| TT3jJ?   h Mischen, Sortieren nach Adresse, (282!~ T| NjJ ? ~ U| NjJ ?   GN P 0 || P 0~2 W| NjJ ?P 0B X| TDjJ?  Y| T`3jJ?P = KDatei 4( 2 ~ Z| NjJ ?    l  |,$D  06N @`p  [|C Pr \| BjJ ?p0 ~ ]| NjJ ?0 @` ~ ^| NjJ ?`  ~ _| NjJ ? 0 ~ `| NjJ ? @ ~ a| NjJ ?@ p@ ~ b| NjJ ?@@ p ~ c| NjJ ?@ p B d| TDjJ?0 ` B e| TDjJ?0 ` B f| TDjJ?@@B g| TDjJ?@p@B h| TDjJ?@ppB i|B ZDjJ? x| Nl 3jJ? A Anwendung 3 2 H | 0޽h ?||C|||D|||E||,|F|,|0|S|0|H|T|M|H|U| H|X|Z| 33334<  ;;kml;( y l  C w     ! z @p   @p ,$D  0B  ZDjJ?  6N @`p   @`p r  BjJ ?p0 ~  NjJ ?0 @` ~  NjJ ?`  ~   NjJ ? 0 ~   NjJ ? @ ~   NjJ ?@ p@ ~   NjJ ?@@ p ~   NjJ ?@ p B  TDjJ?0 ` B  TDjJ?0 ` B  TDjJ?@@B  TDjJ?@p@B  TDjJ?@pp  N3jJ?   A Anwendung 2 2 ! z @   p ,$D  0B  ZDjJ?@ @6N @`p   @ r  BjJ ?p0 ~  NjJ ?0 @` ~  NjJ ?`  ~  NjJ ? 0 ~  NjJ ? @ ~  NjJ ?@ p@ ~  NjJ ?@@ p ~  NjJ ?@ p B  TDjJ?0 ` B  TDjJ?0 ` B ! TDjJ?@@B " TDjJ?@p@B # TDjJ?@pp $ N<3jJ? P  A Anwendung 3 2 F  6 <T @`p  &# `r ' BjJ ?p0 ~ ( NjJ ?0 @` ~ ) NjJ ?`  ~ * NjJ ? 0 ~ + NjJ ? @ ~ , NjJ ?@ p@ ~ - NjJ ?@@ p ~ . NjJ ?@ p B / TDjJ?0 ` B 0 TDjJ?0 ` B 1 TDjJ?@@B 2 TDjJ?@p@B 3 TDjJ?@ppB 4 ZDjJ?0 5B T3jJ? A Anwendung 1 2 -F ` 7 0 x2 8 HjJ ?`~B 9 NDjJ? : N3jJ?` KDatei 1( 2 -F ` ;  0 x2 < HjJ ?`~B = NDjJ? > Nl3jJ?` KDatei 2( 2 -F ` ? 0 0 x2 @ HjJ ?`~B A NDjJ? B NЭ3jJ?` KDatei 3( 2  l   l ,$D  0 P C   ,$D 0 D T3jJ ?P E Nt3jJ?P B nderungen (2 B F TDjJ?B G TDjJ?B H TDjJ?B I TDjJ?B J TDjJ? P K P ,$D 0 L T3jJ ?P M Nз3jJ?P B nderungen (2 B N TDjJ?B O TDjJ?B P TDjJ?B Q TDjJ?B R TDjJ? j N3jJ? t YDatenverarbeitung,(2ffl ` t m` t,$D  0~ S NjJ ? `  T N3jJ? @`  gMischen, Sortieren, Aufbereiten, 82(2 5N ` U @0x2 V HjJ ?`~B W NDjJ? X N<Dz3jJ?` KDatei 1( 2 5N ` Y @0  x2 Z HjJ ?`~B [ NDjJ? \ N˲3jJ?` KDatei 2( 2 5N ` ] @`  x2 ^ HjJ ?`~B _ NDjJ? ` N\в3jJ?` KDatei 3( 2 B b ZDjJ?`  B c ZDjJ?`  B d ZDjJ?`  B e ZDjJ?`  B f ZDjJ?`B g ZDjJ?`  B h ZDjJ?  B iB ZDjJ?p k N ֲ3jJ? t [Datenaktualisierung,(2ffH  0޽h ? 3333  G?p5( ` r  S N     ,F ` l  @x2 m HjJ ?`~B n NDjJ? o NP3jJ?` JDatei ( 2 ,F ` p  P@x2 q HjJ ?`~B r NDjJ? s NPU3jJ?` JDatei ( 2 ,F ` t  ` @x2 u HjJ ?`~B v NDjJ? w N,Z3jJ?` JDatei ( 2 ,F ` x  0@x2 y HjJ ?`~B z NDjJ? { N73jJ?` JDatei ( 2  | N b3jJ?p @0 DReservierungen 2 } N8f3jJ?p 0 ? Ausleihen 2  ~ Ni3jJ?p 0 ? Buchdaten 2   NDm3jJ?p0 >Personen 2 8 P    ~  NjJ ?P   N,q3jJ?Pp0  MReservierungsprogramm(2F P   p ~  NjJ ?P   NXu3jJ?Pp0  GAusleihprogramm(2F P     ~  NjJ ?P   Ny3jJ?Pp0  HMahnungsprogramm(2v"  NjJ ?``P   N~3jJ?``V  GMahnungs- druck(28  `  `r  BjJ ? p`  N3jJ? @ D Ausleihdaten (2 F  `  @ `r  BjJ ? p`  NH3jJ? @ JReservierungsdaten(2|  TjJ ?fH v  NjJ ?f v @ NjJ ? @ v  NjJ ? X v  NjJ ? ( v  NjJ ?  v  NjJ ? X v  NjJ ? ( v  NjJ ?  v @ NjJ ?  v  NjJ ? @ v  NjJ ? @ v  NjJ ? @ v  NjJ ? Z0 H  0޽h ?muyqu y m q y qm 3333!  !}!`9D (  r  S      ,F `   @x2  HjJ ?`~B  NDjJ?  N3jJ?` JDatei ( 2 ,F `   P@x2  HjJ ?`~B   NDjJ?   N3jJ?` JDatei ( 2 ,F `    ` @x2   HjJ ?`~B   NDjJ?  Nd3jJ?` JDatei ( 2 ,F `   0@x2  HjJ ?`~B  NDjJ?  N!3jJ?` JDatei ( 2   N&3jJ?p @0 DReservierungen 2  N)3jJ?p 0 ? Ausleihen 2   N-3jJ?p 0 ? Buchdaten 2   N03jJ?p0 >Personen 2 F P     ~  NjJ ?P   N43jJ?Pp0  MReservierungsprogramm(2F P   p ~  NjJ ?P   N$93jJ?Pp0  GAusleihprogramm(2F P     ~  NjJ ?P   Nx=3jJ?Pp0  HMahnungsprogramm(2v *@ NjJ ? @ v + NjJ ? X v , NjJ ? ( v - NjJ ?  v . NjJ ? X v / NjJ ? ( v 0 NjJ ?  v 1@ NjJ ?  v 2 NjJ ? @ v 3 NjJ ? @ v 4 NjJ ? @ |8  8rB 6 B3jJ ?p@ 7  GY A$jJ ?Groes Gitternetz@F  9 PP rB : B3jJ ?p@ ;  GY A$jJ ?Groes Gitternetz@F  <  rB = B3jJ ?p@ >  GY A$jJ ?Groes Gitternetz@ ? NF3jJ?d S Endbenutzer, (2 ffv @@ NjJ ? v A NjJ ? v B NjJ ? v C@ NjJ ? v D NjJ ? @ H  0޽h ?* +,- ./ 0 1 2 3 47@7A;B>C>D 3333  P'- ( hYhY l  C ܰ     jB  BjJ ? `8 p     ~  NjJ ?p    NӰ3jJ?   FReservierungen(2F p     p ~  NjJ ?p     N3jJ?   A Buchdaten (2 F p      ~   NjJ ?p     Nlm3jJ?   @Personen (2 F p      ` p ~  NjJ ?p    N3jJ?   A Ausleihen (2   ZjJ ?` ` ` |  TjJ ?@ @|  TjJ ?` @|  TjJ ?` ` @  N3jJ? P  A Datenbank (2 8 ` P  &P 0 ~  NfjJ ?` P   NfjJ?  p <DBMS(2F P   `~  NjJ ?P   N3jJ?Pp0  MReservierungsprogramm(2F P   `@ `~  NjJ ?P   N 3jJ?Pp0  GAusleihprogramm(2F P    `~   NjJ ?P  ! NL3jJ?Pp0  HMahnungsprogramm(2v" " NjJ ?00 # N8 3jJ?00 GMahnungs- druck(2v $ NjJ ?p*| % TjJ ?  | ' TjJ ?f` J| ( TjJ ?f J| )@ TjJ ?f JH  0޽h ?     "$% ' ( ) 3333  @( y l  C p     l  C , @  H  0޽h ? 3333  0D( y l  C ΰ       C ΰ <$ 0  H  0޽h ? 3333   P(  r  S ư       S ǰ <$ 0  H  0޽h ? 3333"  Q"I"8@0  ( y  " Z3jJ ?0l  C L     8 P  #`0  TjJ ?P   NjJ?  Gexterne Modelle(2F  & `0  TjJ ?  NjJ?P Ginternes Modell(2F 0   % `0 0  TjJ ?0     N̎jJ?0 P  zkonzeptu- elles Modell(2$l `6`*  =6``* ,$D  0~ * NjJ ?`6`~ + NjJ ? 6 * ~ , NjJ ?`6`*  l 0@ <0@,$D 0@ 0   0p lB  <jJ ?0   N̗3jJ?p0  :DB(2N P   0  ~  NjJ ?P   N 3jJ?Ppv  Ginternes Schema(2N P    0 0 ~   NjJ ?P    N3jJ?Pp  zkonzeptu- elles Schema(2$N P     ~   NjJ ?P   Nܣ3jJ?Ppv  Gexternes Schema(2N P   p @~  NjJ ?P   N3jJ?Ppv  Gexternes Schema(2x / HjJ ? 0 x 0 HjJ ? 0 x 1 HjJ ?  x 2 HjJ ?   l  p ; p,$D  0@ p @ $p p  TjJ ?p @  N$jJ? q  o Anwen- dung (2 $N p @ '  ~ ( NjJ ?p @ ) HjJ? q  o Anwen- dung (2 $~ - NjJ ?  ~ . NjJ ?   8 N83jJ?PP J  I...*(2vz v v @ v v,$D 0T ` P  #  px  HfjJ ?` P   HfjJ?  p <DBMS(2r 3 3 rGQ%H;rIjJ ? XvR 4 # lGHIjJ ?v  b 5 3 rG0*HeIjJ ?X ` b 6B 3 rG0*H{IjJ ?  X b 7 3 rG*HI3jJ ?   : N,3jJ?P p J  I...*(2H  0޽h ? * +,) -. /  0 1 2 345 67 3333  TL!!(  l  C F     p  HjJ ?0`  NH3jJ?0 :DBMS 2  HKjJ ? A DB-Schema (2   H`PjJ ?p  JEndnutzer-Abfragen(2  HSjJ ?0   JAnwendungsprogramm(2  HlWjJ ?0 `0  jDML-Preprocessor(2   H[jJ ?p`0  iQuery-Processor(2   H_jJ ?`0  U DDL- Compiler,(2 822  HdjJ ?0 P  mProgramm-objektcode(2   H|hjJ ?pP  HDatabase-Manager(2  H@ljJ ?P  dDictionary-Manager(2    HpjJ ?  ] Filemanager (2    H tjJ ?   kZugriffs-methoden(2   HxjJ ?   D Systempuffer (2 db  <jJ ?    NH|3jJ?  tDatenbank und Dictionary8P2   ZjJ ? * |  TjJ ? j|  TjJ ? & % | @ TjJ ? 8@ |  TjJ ? 8P |  TjJ ?P V |  TjJ ?Y& @|  TjJ ?FZYv  NjJ ? Z v  NjJ ? Z v  NjJ ? 6 J v  NjJ ? * v  NjJ ?Y6 J Yv  NjJ ? 6 J  v ! NjJ ?Y6 J  H  0޽h ?               ! 3333  &83( ): r  S      p  HjJ ?0 `  N$3jJ?0  FDatabase-Manager 2  HjJ ?p  iQuery-Processor(2   HjJ ?0   mProgramm-objektcode(2   H jJ ? dDictionary-Manager(2    H@jJ ?0   ] Filemanager (2    HjJ ?   kZugriffs-methoden(2   HLjJ ?| D Systempuffer (2 8   )``lb  <jJ ?   N43jJ?  tDatenbank und Dictionary8P2 |  TjJ ? ((* |  TjJ ?( |  TjJ ?f " H@jJ ?H  `Authorizierung(2 # HjJ ?   FBuffer-Manager(2| 7@ TjJ ? &9 | 8@ TjJ ?9  9 H  0޽h ? "- ". "/"#0#%1$#2#&3%'4&'5'(6*7*(8 3333 ( w l  C p  l  C D p  H  0޽h ? 33  -U0 (    r  S      F 0     ` @0 ~   NjJ ?0     H̬jJ?0 P  zkonzeptu- elles Modell(2$L P  # ` 0 ~  NjJ ?P   N3jJ?Ppv  Ginternes Schema(2L P  # ` @ 0 ~  NjJ ?P   N 3jJ?Pp  zkonzeptu- elles Schema(2$~8 P   < @  T P  # P  ~  NjJ ?P   N3jJ?Ppv  Gexternes Schema(2T P  #  ` P0 ~  NjJ ?P    N@3jJ?Ppv  Gexternes Schema(2T P  9#   ~ : NjJ ?P  ; N3jJ?Ppv  Hexterne Schemata(28  P@ ?P @~ = NG jJ ? P@ > NhŪ3jJ?P P Uphysische Datenunabhngigkeit(2F  P@ @ ~ A NG jJ ? P@ B Nhɪ3jJ?P P Tlogische Datenunabhngigkeit(2F  P@ C P @~ D NG jJ ? P@ E N0ͪ3jJ?P P systemspez. Datenunabhngigk.(2$   F ZLѪG.HljJ ? PpH Informationsorien-tierte Sicht$ G ZժGD,HjJ ?  H LDatenorientierte Sicht H Z٪G[$H|jJ ? ` H RAnwendungs-orientierte Sicht I ZܪG$HPjJ ? H SPerformance-orientierte Sicht8 @` L@ x J HjJ ?@` K N3jJ?@` !graphische Beschrei-bungsspra-che"(2", F @` M   x N HjJ ?@` O N\3jJ?@` xData-Definition-Language (DDL)(2 F @` P 0  x Q HjJ ?@` R N3jJ?@` xData-Definition-Language (DDL)(2  T ZjJ ?0  U T3jJ? IDSDL oder DDL8P2H  0޽h ?O@FGHI 3333  D(  l  C        C d <$ 0  H  0޽h ? 3333  ""(  l  C \     l  C    8 @   p~  NjJ ?@ 0 x  HjJ ?p x  HjJ ?@   N3jJ?p 0  YMitarb.(2F @     ~   NjJ ?@ 0 x   HjJ ?p x   HjJ ?@    NP3jJ?p 0  =Firma(2F @    ~  NjJ ?@ 0 x  HjJ ?p x  HjJ ?@   NS3jJ?p 0  A Abteilung (2 F @    ` ~  NjJ ?@ 0 x  HjJ ?p x  HjJ ?@   N 3jJ?p 0  ?Filiale(2F @    0 p~  NjJ ?@ 0 x  HjJ ?p x  HjJ ?@   N3jJ?p 0  ?Projekt(2| @ TjJ ?h v  NjJ ?h v  NjJ ? H X v  @ NjJ ? h H v ! NjJ ?" " N3jJ?  ` >Einstieg 2 H  0޽h ?_    ! 3333  7/**_(  r  S hX     r  S $Y   F @    `~  NjJ ?@ 0 x  HjJ ?p x  HjJ ?@   N[3jJ?p 0  YMitarb.(2F @     ~   NjJ ?@ 0 x   HjJ ?p x   HjJ ?@    N\`3jJ?p 0  =Firma(2F @     ~  NjJ ?@ 0 x  HjJ ?p x  HjJ ?@   N\d3jJ?p 0  A Abteilung (2 F @    p@ ~  NjJ ?@ 0 x  HjJ ?p x  HjJ ?@   N i3jJ?p 0  ?Filiale(2F @    ~  NjJ ?@ 0 x  HjJ ?p x  HjJ ?@   NXm3jJ?p 0  ?Projekt(2| @ TjJ ?  v  NjJ ? H v  NjJ ?  z v  @ NjJ ?H v ! NjJ ?  z v " NjJ ? (v # NjJ ? @ (R $  fZG^&H!I^&jJ ?  % Nr3jJ?? ` >Einstieg 2  & Nw3jJ? 0@  >Einstieg 2  ' Ndz3jJ?@ >Einstieg 2 v ( NjJ ?` v )@ NjJ ?  v *@ NjJ ?H  0޽h ?`     !"# $ % ( &) '* 3333r   "  5J (  r  S T:     r  S ;   ` % c $A 5??N 5r * # lGlH>IjJ ?P OR +  fGHpiIjJ ? P0P b ,  fGuHۑI0jJ ?   }8  2 4 h ' c $A =?? 2 = - N(>3jJ?  ? Abteilung 2 {8  `@ 20 P z h ( c $A A?? @ A . NB3jJ? `  =Projekt 2 / N@3jJ?  A Unternehmen 2 8 ~ }  5 POh & c $A 7??~ }  7 0 NM3jJ?   B Angestellter 2 8   3 0 h ) c $A F??   F 1 NQ3jJ?@  Y AngToProj 2  H  0޽h ??` '&* )&+ )(, 3333  ( bMS l  C 3     l  C 3   H  0޽h ? 3333  p( P + l  C \)     l  C *   H  0޽h ? 3333  `D(  l  C H$       C % <$ 0  H  0޽h ? 3333s  #P (  l  C      l  C  P   F 0      ~  NjJ ?0    HjJ ?0 r S Veranstaltung*(2 D  N3jJ?0  6Kurzbezeichnung Semester Bezeichnung Credit Points ...J70Z2+|B  TDjJ?P ` `B  ZDjJ? 0 pB  ZDjJ?` H  0޽h ? 3333  @D( ,LޘA l  C         C   <$ 0  H  0޽h ? 33335  550[xP5(  l  C P     8 0   p~  NjJ ?0    HPçjJ ?0  >Dozent(2  NƧ3jJ?0  "Krzel Name Titel Denomination ...,#0Z2 F 0     p~  NjJ ?0     HͧjJ ?0  E Veranstaltung(2D   N3jJ?0  6Kurzbezeichnung Semester Bezeichnung Credit Points ...J70Z2+|B  TDjJ?    Nx!n3jJ? ;Typen 2f8    B  TDjJ?0 0~B  NDjJ?  B  TDjJ?  0~B  NDjJ? 0 ~2  NjJ ?p`  Np&n3jJ?@  :hlt 2f  Nxn3jJ? `  lwird gehal-ten von(2f 4F   x  T   #   B  TDjJ?0 0~B   NDjJ?  B ! TDjJ?  0~B " NDjJ? 0 ~2 # NjJ ?p`$T  `  b#  @ B % ZDjJ?  B & TDjJ? ` B ' ZDjJ?  B ( TDjJ? ` 2 ) TjJ ?p 0 T `   h# `  B + ZDjJ?`  B , TDjJ?   2 / TjJ ?P  T    c#   B < TDjJ?P P B > TDjJ? P ~B ? NDjJ?P  ~2 @ NjJ ?p  ~2 A NjJ ?p  T @ d# @B B TDjJ?~B C NDjJ?@B D TDjJ?@~B E NDjJ?~B G NDjJ?@6T p  e#  8 B I ZDjJ?p B J TDjJ?0 0 B K ZDjJ?0 B L TDjJ?0 ~B N NDjJ?0 0 B O TDjJ?p 0 B PB TDjJ?p 0 T `@   i# ` @ B 0 TDjJ?`  ~B 1 NDjJ? @  ~B 3 NDjJ?@  T p `  f#  8 @ B Q TDjJ?p ~B R NDjJ?0 0 ` B S TDjJ?0 ~B T NDjJ?0 ` B V TDjJ?p 0 B WB TDjJ?p 0 ` ~2 _ NjJ ?0 0 T `   j# ` p B 8 TDjJ?`  ~2 : NjJ ?  ~2 ; NjJ ? P T p  g#  P B X TDjJ?p B Z TDjJ?0 ~B [ NDjJ?0 B ] TDjJ?p 0 B ^B TDjJ?p 0 ~2 ` NjJ ?0 P ~2 a NjJ ? P 0  n N3jJ?  ,$D  0 ;1:1(2f o N83jJ? T ,$D  0 ;C:1(2f p N@3jJ?  ,$D  0 ;C:C(2f q N3jJ?@t,$D  0 ;1:N(2f r N3jJ? @ ,$D  0 <1:CN(2f s N3jJ? @T ,$D  0 ;C:N(2f t N43jJ? @ ,$D  0 <C:CN(2f u N$3jJ? 0 T ,$D   0 ;N:M(2f v N@3jJ? 0 ,$D   0 <CN:M(2f w N3jJ? 0 ,$D   0 =CN:CM(2fH  0޽h ? 3333   (    l  C L     l  C    H  0޽h ? 3333"  ""CY0 !(  l  C      l  C p    l @ P@ #@ P@,$D 0B   ZDjJ? PPB  TDjJ?  Z@  p  @  @~  NjJ ? p B  TDjJ? @p@bN  p   P@x  HjJ ? p B  TDjJ? @p@R  TብG (jJ ? ~B  NDjJ?  ~B  NDjJ?  B  TDjJ?l  ` +00 p@,$D 0bN  p     px ! HjJ ? p B " TDjJ? @p@2 $B  `GvHIjJ ? vB % TDjJ?`P`B ' TDjJ? @~B ) NDjJ?PW~B * NDjJ?P@l @ P@ B @ P@,$D 0B - ZDjJ? P P B . TDjJ? hT  p  /# @ @x 0 HjJ ? p B 1 TDjJ? @p@hT  p  2#  P@x 3 HjJ ? p B 4 TDjJ? @p@B 6 TDjJ?  B 9 TDjJ? P ~B : NDjJ?P  B ; TDjJ? P B <B TDjJ? P ~ = NjJ ?@  B > ZDjJ?` `P  l  p  Yp  ,$D 0hT  p  ?#  p x @ HjJ ? p B A TDjJ? @p@hT  p  C# 0p x D HjJ ? p B E TDjJ? @p@hT  p  F# @ 8 x G HjJ ? p B H TDjJ? @p@hT  p  I# p8 x J HjJ ? p B K TDjJ? @p@~ L NjJ ? H H x M HjJ ?>H *H x N HjJ ?`& `: B O TDjJ?0  ~B P NDjJ? B Q TDjJ?  ~2 R NjJ ?0P  ~B S NDjJ?  ~B T NDjJ?  ~B U NDjJ? I ~B V NDjJ?I  B W TDjJ?  A B X TDjJ? A  H  0޽h ?O!!$@JLJDMJGN 3333  ( , l  C 2n     l  C \Rn  n H  0޽h ? 3333H  EH=H~`E( G l  C      8 -  ` ~  NjJ ?!  N jJ ?y IOrt*(2   N#3jJ?- `Name Kreis Einwohnerzahl,0<2   F -   px   HjJ ?!   H(jJ ?y LSchule*(2    N,3jJ?- !Name Postleitzahl Strae, Hausnr.,"0<2  8 0  ~ p .~  NjJ ?0  ~  N$2jJ ?0  y ^Beschftigungsverhltnis*(2   T63jJ?0 ? / G Vertragsdatum0<2 F `` 4 ``~  NjJ ?`  N:jJ ?` LLehrer*(2    T>3jJ?PL 7Personalnummer Name, Vorname Geburtstag, Familienstand,80<2 ) uF 0  ~  0 p x  HjJ ?0  ~  HDjJ ?0  y LKlasse*(2   NG3jJ?0 ? / E Bezeichnung 0<2  F 0  ~   @~ x  HjJ ?0  ~  HKjJ ?0  y ^Unterrichtsverpflichtung*(2   NP3jJ?0 ? / D0<2  F `     0 p0 x ! HjJ ?`   " HSjJ ?`   MSchler*(2  # NW3jJ?   )Vorname Familienname Geburtstag, AdresseJ*0<2      F - $ 0 Px % HjJ ?! & H,^jJ ?y UUnterrichtsraum*(2  ' Na3jJ?- eNummer Flche Sitzplatzanzahl,0<2  F ! (  x ) HjJ ?! * HDgjJ ?y JFach*(2  + Nj3jJ? eBezeichnung Stunden pro Woche,0<2   |" , THIpjJ ?&j 2 -  `GcHpIjJ ? b . ZG*H μIvjJ ?_z g /  `GHmIjJ ? zj" 1@  `ZG*HftIjJ ? H *  2 ZG HI jJ ?  " 3 ZG)HɽIjJ ?Nv  5  `GI5HII5jJ ?f  6  `GM,HIM,jJ ?  |" 7 THUIUjJ ? v' " 8  `GHpI\jJ ?   9  `GIHeQIIjJ ?j*  :  `ZGhwH߈IhwjJ ? H |B ; TDjJ?|B < TDjJ?0|B = TDjJ?0|B > TDjJ?PPp|B ? TDjJ?|B @ TDjJ?` |B A TDjJ?Q  |B B TDjJ? vB C NDjJ?HvB D NDjJ?` G` vB E NDjJ?PPP|B F TDjJ? P p2 I HjJ ?  Pv2 J NjJ ? @ p2 K HjJ ?*|B L TDjJ?p|B M TDjJ?p@|B N@ TDjJ?PvB O NDjJ?P P|R Q TG,jJ ?0  p2 R HjJ ?H x|B S TDjJ?0 0|B T TDjJ? j8   x  xR U TЁlG,jJ ?  ~2 V NjJ ?  B W TDjJ?  pB X TDjJ?  xp2 Y HjJ ?t  vB Z NDjJ?` p |B [@ TDjJ? p " 0 ZGHI%jJ ?Np2 \ HjJ ?$ETvB ] NDjJ?@@vB ^@ NDjJ?K@pp2 _ HjJ ?EvB ` NDjJ?@vB a@ NDjJ?8 I  I R b ZЁlG,jJ ? I^ 2 c TjJ ?8 B d ZDjJ?`  B e ZDjJ?0` 0 8 p 97  p 97 R h ZK G,jJ ? 9' 2 i Z1ɳjJ ? )7 B k  `1ɳDjJ?p  B l TDjJ?0p 0 |B m TDjJ?  |B n@ TDjJ? p2 o HjJ ? :j |B p TDjJ? ` vB q NDjJ? ` |R r TG,jJ ? 0A |B t TDjJ?  |B u TDjJ?@ @ |B v TDjJ? 00P p2 w HjJ ?P ' W vB x NDjJ? 0 p vB y NDjJ? O I |B z TDjJ?` |B { TDjJ?`  |B |@ TDjJ?  8  p 0  p 0 R ~ ZЁlG,jJ ?  2  TjJ ?0 p` B  ZDjJ?0 0 0 B  ZDjJ?` ` 0 j8 @ 00  @ 00 R  TЁlG,jJ ?H  B  TDjJ? 0 B  TDjJ? 0 ~B  NDjJ?@ 0@   N3jJ?`, lwird angelei-tet von 2   N@3jJ?`  C hat als Paten 2H  0޽h ? , - ./0 1"2 3 5 *6 7 '8 &9&: 3333#  .0${( ?Y $l $ C HԦ      l   .$ ,$D 0N 0   $ `~ $ NjJ ?0   $ H֦jJ ?0  ?Student(2/ $ N٦3jJ?0  5Matrikelnr. Name Immatrikulationsdat. Studiengang ...,60Z2 +$ N @0  $   $ TjJ ?@0  $ NߦjJ ?@\ E Student im GS(2  $ T83jJ?@ S1. Praxissemester Vordiplom0Z2N @0  $  ` ~  $ NjJ ?@0 $ HjJ ?@\ E Student im HS(2 $ N3jJ?@ X 2. Praxissemester Diplombetreuer!0Z2! $ HXjJ ?l ` is-a    $ TjJ ?x $ HjJ ? x $ HjJ ? B *$ TDjJ?`l P /$P,$D 0N  `P  $$ h  ~ $ NjJ ? `P  $ NjJ ? `  C FH-Mitglied (2  $ T@3jJ? `;  `Name Fachbereich Adresse,0Z2N @0 $ @P ~ $ NjJ ?@0 $ H$jJ ?@\ ?Student(2 $ N3jJ?@ xMatrikelnummer ...J0Z2|N @0 $ @ P ~ $ NjJ ?@0 $ HjJ ?@\ B Hilfskraft (2  $ N3jJ?@ HAufgabe Betreuer0Z2  $ HhjJ ?   ` is-a    !$ TjJ ? f  n x "$ HjJ ? @f x #$ HjJ ? :f N @0 %$ @ P~ &$ NjJ ?@0 '$ HjJ ?@\ >Dozent(2 ($ NX3jJ?@ Denomination ...:0Z2  x )$ HjJ ?f :~B +$ NDjJ? ` ~B ,$ NDjJ? ` x2 -$ HjJ ?` 0  0$ HjJ ?`P` ,$D 0H $ 0޽h ?$$$$ $$$$$$ $!$ $$"$ $$#$ $'$)$ 3333  zrr ( `  l  C        HTjJ ?0:,$D 0 Ounnormalisiertes Modell(2  H0jJ ?0j,$D 0 SModell in der 1. Normalform(2  HhjJ ? 0 ,$D 0 SModell in der 2. Normalform(2  H,jJ ?P 0,$D 0 SModell in der 3. Normalform(2l 5 5,$D  0  TjJ ?@   Nd3jJ?P ` O1. Normalisierungsschritt 2  3 rG6H`SIJKLMNjJ ?@ 5 \(Anpassung an das relationale Datenmodell))l 5  5 ,$D  0~   NjJ ?p    Nxæ3jJ?P  O2. Normalisierungsschritt 2  3 r<ǦGHCIJKLMNEJjJ ?@ 5b  OBeseitigung von Redundanzenl @ J  @ J ,$D  0~   NjJ ? J    N˦3jJ?P  O3. Normalisierungsschritt 2  3 rHG$HDIJKLMNjJ ? @   RBeseitigung von AbhngigkeitenH  0޽h ?o     3333\   ( 33 l  C      l  C `   |B  TDjJ?ppH  0޽h ? 3333L  t(  l  C z     F   `0  TjJ ?  N|jJ ?| >Dozent(2  T3jJ? wKrzel Fcher ...J0Z2|B  TDjJ?P`  N 3jJ?P  Dunnormalisiert 2 l 0` p@  0p,$D 0N   0`  ~   NjJ ?   HvjJ ?| >Dozent(2   HȁjJ? p Krzel ...J 0Z2N     ` p ~   NjJ ?  HjJ ?| <Fach(2  HPjJ? uBezeichnung ...J0Z2 T p  #  B  TDjJ?p B  TDjJ?0 ~B  NDjJ?0 B  TDjJ?p 0 B B TDjJ?p 0 ~2  NjJ ?0 P ~2  NjJ ? P 0   HSchule(2   NX3jJ? Name Adresse ...h0Z2R   ZvYG-3jJ ?  ~B   NDjJ?  ~B  NDjJ?` g ~B  NDjJ?0 7 ~B  NDjJ?  B  TDjJ?0 P 0 ~B  NDjJ?   N_3jJ?`  ? gehrt zu 2   Nc3jJ?  =besitzt 2l @s: @s:,$D 0B  ZDjJ?   Zi3jJ?@s: f6(Nummer, [gehrt-zu]) Sitzplatzanzahl77H  0޽h ? 3333f  (  l  C liegt in 2 f  T 3jJ? 0  =enthlt 2f   N#3jJ?p C 2. Normalform 2fH  0޽h ? 3333_  `( % r  S      F 0    0~  NjJ ?0    HTjJ ?0  =Firma(2  N3jJ?0  z2Name Organisationsform Adresse Gebude Hausmeister,30Z2/  Np3jJ?2,$D  0 funktionale Abhngigkeiten (Auswahl): Name Gebude Gebude Hausmeister<K 2&f$ff  S $ <$D 0  H  0޽h ? 3333  PD(    l  C ۤ       C  n <$ 0  H  0޽h ? 3333  @, ,(  l  C      F 0    0~  NjJ ?0    HjJ ?0  =Firma(2  N43jJ?0  z2Name Organisationsform Adresse Gebude Hausmeister,30Z2/|B # TDjJ? %  x0e0e    BCDEF3 A@ AjJ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||x8px@  ,$D  0l 0P '0P,$D  0 $  x0e0e    BCDEF3 A@ AjJ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||d x@  0 & Nؾ3jJ?@@P Mtransitive Abhngigkeit 2fp z 0 00 , 0 00,$D 0T 0   # ` 0 ~  NjJ ?0     HjJ ?0  =Firma(2   HDŤjJ?0 #  Name Organisationsform Adresse , 0Z2T 0    #  0 0 ~   NjJ ?0     HɤjJ ?0  ?Gebude(2  H$ͤjJ?0 #  c......... Hausmeister .... ,0Z2 *T 0p 0  "# 0p 0 B  ZDjJ?0 B  ZDjJ?0p x B B ZDjJ?0 x0 2  TjJ ?x  B ! TDjJ? p 0  ( NҤjJ?`` 0  >liegt in 2  ) NP֤jJ? p  =enthlt 2 * N|٤jJ?p0 C 3. Normalform 2fH  0޽h ? 3333   S K 0  (   l   C p        C  <$ 0  (2 : B z 0       ,$D 0~   NjJ ?0     H@jJ ?0  =Kunde(2   Nn3jJ?0  h Name Strae Ort Postleitzahl ...,!0Z2    x0e0e    B CDEF3 A@ AjJ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E|| @@ @  0  ,$D  0    x0e0e    BCDEF3 A@ AjJ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||x @`x@   p,$D  0H   0޽h ? 3333   *(&(  (l ( C n    n  ( C xn 0 <$ 0 n L   (# ``~  ( NjJ ?  ( HXjJ ?| C Beschaffung (2   ( N0r3jJ? Projekt Bauteil LieferantJ0Z2 z ( No3jJ?R funktionale Abhngigkeiten: (Projekt, Bauteil) Lieferant Lieferant BauteilDO 2fff z ` 7 *( ` 7,$D 0T @  (# ` {~ ( NjJ ?@  ( N}jJ ?@   C Beschaffung (2  ( Tp3jJ?@  Projekt Lieferant J0Z2 T  ` 7 "(#  ` 7~ ( NjJ ? `  ( NhjJ ? ` ,  A Lieferant (2   ( T,3jJ? P 7 Bauteil Lieferantennr. :0Z2 B #( ZDjJ? 2 $( TjJ ?@ B %( ZDjJ?P P B &( ZDjJ? @ B '(B ZDjJ? @@ (( Th3jJ?`  Abhngigkeit (Projekt, Bauteil) Lieferant nicht mehr direkt erkennbarLH 2 f fH ( 0޽h ? 3333  qi,( s ,l , C n    n E , Nn3jJ?0   Marke Zubehr Farbe Stckzahl VW Klimaanlage wei 12 VW Klimaanlage rot 22 VW Klimaanlage grn 9 VW 4-trig wei 5 VW 4-trig rot 10 VW 4-trig grn 31 Mazda 4-trig wei 5 Mazda 4-trig blau 17 Mazda Alufelge wei 21 Mazda Alufelge blau 37 40<2fffbp 9|B , TDjJ?@|B , TDjJ?``0|B , TDjJ? 0|B , TDjJ? 0H , 0޽h ? 3333 0(  0l 0 C np n l 0 C n p n H 0 0޽h ? 33l  4(  4l 4 C X      4 C (^   "p P[cv 4 NjJ? P H 4 0޽h ? 3333  8>(  8l 8 C 0      8 C 6   *7?GO|B 8 TDjJ?p|B 8 TDjJ? H 8 0޽h ? 3333  <( \xdDozent(2 D T3jJ?@ Krzel Name Denomination,0Z2 T   D#  @k  D TjJ ?   D NjJ ?  E Veranstaltung(2%  D T3jJ?  Kurzbezeichnung Semester J0Z2 D T 3jJ?p  :hlt 2f D T"3jJ?   lwird gehal-ten von(2f T @ @ ,D# p B  D ZDjJ?@ B D ZDjJ?  B D TDjJ?  @2 D TjJ ?  ~B +D NDjJ?@H D 0޽h ? %D*D(D 3333  @(  @l @ C      l @ C    H @ 0޽h ? 3333   J B 6pH`( +A Hl H C @o     F P P  gH @ P B H ZDjJ?P  B H TDjJ? P B H ZDjJ?  B  H TDjJ? P 2  H TjJ ?  L  `   H#  P B  H TDjJ?  ~B  H NDjJ? ` B H TDjJ?  ~B H NDjJ? ` ~2 H NjJ ?p 0 F Pp iH PpB H ZDjJ?PB H TDjJ?p2 H TjJ ?@@L    H# pP0 B H TDjJ?P P B H TDjJ? P ~B H NDjJ?P  ~2 H NjJ ?p  ~2 H NjJ ?p  L `@   )H# `P B *H TDjJ?`  ~B +H NDjJ? @  ~B ,H NDjJ?@  B LH  pgֳgֳ3jJ? <$D  0  ,?jj&.6 MH N0o3jJ?0` KA.(2 NH N0o3jJ?0 KB.(2 OH N o3jJ?`g KA.(2 PH N3jJ?@`'  KA.(2 QH N¢3jJ? `w  KA.(2 RH NPƢ3jJ? `  KA.(2 TH Nxʢ3jJ?g =B (2 UH N͢3jJ?@'  =B (2 VH NТ3jJ? w  =B (2 WH NӢ3jJ?   =B (2|B H TDjJ?@  lF P P  hH  P B \H ZDjJ?P  B ]H TDjJ? P  aH Tע3jJ? `  KA.(2 bH Tܢ3jJ?   =B (2vR cH NjJ ? X |B dH TDjJ?  |B eH TDjJ?  v2 fH NjJ ? P B kH ZDjJ?PPP|2 mH TjJ ? @ nH N3jJ?` KA.(2 oH N3jJ? =B (2v2 pH NjJ ? H H 0޽h ? 3333f2  22UL$ z1(  Lk L HMgֳgֳ ? Es ist stets eine Koppelrelation K ntig, welche die Primrschlssel von A und B als Primrschlsselkombination enthlt. Nur der letzte Fall ist exakt realisierbar..!l L C $R     L p  L#  `` B L TDjJ?p ~B L NDjJ?0 0 B L TDjJ?0 ~B L NDjJ?0 ~B L NDjJ?0 0 B  L TDjJ?p 0 B  LB TDjJ?p 0 L p `   L#  `B  L TDjJ?p ~B  L NDjJ?0 0 ` B L TDjJ?0 ~B L NDjJ?0 ` B L TDjJ?p 0 B LB TDjJ?p 0 ` ~2 L NjJ ?0 0 L p  L#   `` B L TDjJ?p B L TDjJ?0 ~B L NDjJ?0 B L TDjJ?p 0 B LB TDjJ?p 0 ~2 L NjJ ?0 P ~2 L NjJ ? P 0   L TY3jJ? 0 KA.(2 !L T,^3jJ? 00P KB.(2B "L  `DfjJ?  B %L ZDjJ?  0|B &L TDjJ? `@ @ |B )L TDjJ? `  *L Tb3jJ? 0  KA.(2 +L Tg3jJ? 0  =K (2 2L T4j3jJ? 0p KB.(2 ;L T,n3jJ?  KA.(2  ZDjJ?pppB ? TDjJ?2 @ TjJ ??T   A#  B B TDjJ? pp~B C NDjJ?  ~2 D NjJ ? @@L `   j# h ` B k TDjJ?`  ~2 l NjJ ?  ~2 m NjJ ? P  n T53jJ?   KA.(2 o T93jJ? 0P  KB.(2B p ZDfjJ? P`  q T=3jJ?   KA.(2 r T B3jJ?   =K (2 s TE3jJ? @`  KB.(2L p t# + p B u ZDjJ?pppB v TDjJ?2 w TjJ ??L   x# ,  B y TDjJ? pp~B z NDjJ?  ~2 { NjJ ? @@|B | TDjJ?, ` |B } TDjJ? ` |B ~ TDjJ?, @ |B  TDjJ? @ H  0޽h ? 3333 pX( x Xl X C d p  l X C   p  H X 0޽h ? 33  `\(  \l \ C `     l \ C    H \ 0޽h ? 3333  RJP d(  dx d c $      d  0?o  p  `F @p d @p  d TjJ?@ ~  d NjJ? p(F O  d  OB d ZDfo??OB d ZDf8c?? B d ZDf8c??0 0 B d ZDf8c??  B d ZDf8c?? H d 0޽h ? f33  @ l( P lx l c $      l  0  p  l P  lP,$D 0~ l NjJ? ~ l NjJ?` P>z O  l  O,$D 0B l TDfo??OB  l TDf8c?? B  l TDf8c??0 0 B  l TDf8c??  B  l TDf8c?? H l 0޽h ? f33  0p6(    px p c $`ڟ      p  0ԟ  p  l  p,$D 0 P p P,$D 0x p HjJ? x p HjJ?` P @p  p @p,$D 0~ p NjJ?@ x p HjJ? p>z O  p  O,$D 0B p TDfo??OB  p TDf8c?? B  p TDf8c??0 0 B  p TDf8c??  B  p TDf8c?? H p 0޽h ? f33  F> t(    tl t C ҟ      t ZA ?3jJ ?` ^  t ZA ?3jJ ?8 $D  0 t ZA ?3jJ ?` 8 $D  0H t 0޽h ? 3333  |(  |l | C ͟     l | C Ο   H | 0޽h ? 33336  .xj(   xl x C t      x ZA ?3jJ ?`   x ZA ?3jJ ? 8 $D  0nz 0* +x 0*,$D  0 x T3jJ?0* `MFZ = MF MZ FZ 2 >jjtT  00   x#  yw R  x TY3jJ ? 0o R  x T 3jJ ?p 00 tT  00   x# {XR  x TY3jJ ? 0o R x T 3jJ ?p 00 @z * -x *,$D  0: x T3jJ?* P(Fiat, wei, Radio) FZ MZ \ MFZ .) 2 >jjtT  00  x# pR x TY3jJ ? 0o R x T 3jJ ?p 00 Hz  ,x ,$D  0B  x T3jJ? X(Opel, rot, Nebelleuchte) MF MZ \ MFZ.- 2 >jjtT  00  !x# 4XR "x TY3jJ ? 0o R #x T 3jJ ?p 00 Hz   .x  ,$D  0B &x Tt3jJ?  X(Opel, wei, Zierfelgen) MF FZ \ MFZ .- 2 >jjtT  00  'x# ]0R (x TY3jJ ? 0o R )x T 3jJ ?p 00 H x 0޽h ? 3333 ( 0* l  C p  l  C ̙ p  H  0޽h ? 33  (  l  C H     l  C    H  0޽h ? 3333Z   ( y l  C      l  C P     N3jJ?p xf1) Quelle: Prof. Dr. H. J. Schek, ETH Zrich, URL=www-dbs.inf.ethz.ch/~isk/WS_97/syntax-diagramme(/ 280(2g   0  0 0 0 0  0 f|B  TDjJ?  H  0޽h ? 3333   6(   ~   s *z     x   c ${ `  H   0޽h ? ̙33  $6(  $~ $ s *Tt     x $ c $u `  H $ 0޽h ? ̙33  (6(  (~ ( s *m     x ( c $n `  H ( 0޽h ? ̙33  ,6(  ,~ , s *dh     x , c $ i `  H , 0޽h ? ̙33  06(  0~ 0 s *b     x 0 c $c `  H 0 0޽h ? ̙33  p46(  4~ 4 s *\     x 4 c $] `  H 4 0޽h ? ̙33  `86(  8~ 8 s *W     x 8 c $W `  H 8 0޽h ? ̙33  P D?(  D~ D s *<     ~ D s *=   g D HBgֳgֳ ?@ UPersNr Name Abteilung Gehalt Position 100000 Schmidtbauer VORST 320000 Vorst.Ass. 100100 Kuhn VORST 100200 Holzmann CON 75000 Trainee 100300 Sulzing CON 120000 Sachbearb. 100400 Berlisch CON 115000 Sachbearb. 100500 Dingwort EDV 95000 Assistent 100600 Petterson EDV 150000 Assistent 100700 Grtze EDV 180000 Abt.Leiter$V(f.D(        |B D TDo??n|B D TD8c?? |B D TD8c??` a |B D TD8c?? ! |B  D TD8c?? H D 0޽h ? f33  @H_(  H~ H s *p(     ~ H s *)    H H8gֳgֳ ?P`   Abteilung Name VORST Schmidtbauer VORST Kuhn CON Holzmann CON Sulzing CON Berlisch EDV Dingwort EDV Petterson EDV Grtze Jf    |B H TDo??@ @|B H TD8c??H H 0޽h ? f33  bZ0L(  L~ L s *     ~ L s *p    L Hl#gֳgֳ ?P`  .N Abteilung VORST VORST CON CON CON EDV EDV EDV TO <fZ   |B L TDo??@ @|B L TD8c??H L 0޽h ? f33   P^(  P~ P s *p     ~ P s *,    P Hgֳgֳ ?P`  & Abteilung VORST CON EDV J' f|B P TDo??@ @|B P TD8c??H P 0޽h ? f33?  T(  T~ T s *     ~ T s *<   3 T Hp 8c? p  ;Name mtl. Gehalt Holzmann 6250 Berlisch 9583 Dingwort 79170 2**f, |B T TD8c? 0P |B T TD8c?  H T 0޽h ? f33Q  X(  X~ X s *     ~ X s *   E X H 8c? p  ;Name mtl. Gehalt Berlisch 9583 Dingwort 7917 Sulzing 100000 2**f> |B X TD8c? 0P |B X TD8c?  H X 0޽h ? f33  \Q(  \~ \ s *     ~ \ s *    \ H 8c? p  Name mtl. Gehalt Dingwort 79170 2f|B \ TD8c? 0P |B \ TD8c? 0 H \ 0޽h ? f33   `T(  `~ ` s *˝      ` c $4ԝ @   jj|B ` TDo??@A|B ` TD8c??|B ` TD8c??0 1 |B ` TD8c??` a |B ` TD8c??PQn  ` HP֝gֳgֳ ?  .select * from Mitarbeiter order by Gehalt desc\/ ffH H ` 0޽h ? f33n     d (  d~ d s *H     x d c $ Pp`   PF @ d PB d TD8c?@nN   d  B d TD8c?B d TD8c?  v  d N 8c?P  d H 8c?@W ,$D 0 select a.Name Mitarbeiter, b.Name Vorgesetzter from Mitarbeiter a, Abteilung, Mitarbeiter b where a.Abteilung = Abteilung.Kurz and Abteilung.Leiter = b.PersNr0F2    Z((z  Z  d  ,$D 0$  d H` 8c?  Z HMitarbeiter Vorgesetzter Petterson Grtze Dingwort Grtze Grtze GrtzeI022If &B  d TD8c?@ @B d TD8c?@ @PH d 0޽h ? f33X  h(  h~ h s *萝      h H 8c?00G,$D 0 6select a.Name Mitarbeiter, b.Name Vorgesetzter from Mitarbeiter a, Abteilung, Mitarbeiter b where a.Abteilung = Abteilung.Kurz and Abteilung.Leiter = b.PersNr (+)0F2     l( z   h p0,$D 0N h H 8c?  bMitarbeiter Vorgesetzter Petterson Grtze Dingwort Grtze Grtze Grtze Sulzing Berlisch Holzmannc022cf, & B h TD8c?B h TD8c?  H h 0޽h ? f33  <4l(  l~ l s *     ~ l s *X <  B l ZD8c? 0  l NL 8c?0 H  tPersonalkosten 1055000 >F 2 ffH l 0޽h ? f33$  Ppd(  p~ p s *     x p c $D ``    p Hv 8c?P  >Abteilung Personalkosten EDV 225000 CON 310000 VORST 320000 L%0Z20<2= f  |B p TD8c? P |B p TD8c?P ` ` H p 0޽h ? f33  h`t(  t~ t s *Dx     x t c $y `0   z  @  t @ ,$D 0 t Hz 8c?@  &Abteilung Personalkosten EDV 225000 <%0Z20<2% f %B t TD8c?   B t TD8c?` @ ` pH t 0޽h ? f33"  xb(  x~ x s *q      x c $r P<$ 0  H x 0޽h ? f33  |<(  |~ | s *V     ~ | s *W   H | 0޽h ? f33  p<(  ~  s *k     ~  s *> Connection 4F    T|RjJ ?``  k << Interface >> Statement 4F   T[jJ ?   # << Interface >> PreparedStatement 4F$  TYjJ ? 0 6 $ << Interface >> Callable Statement 4F%    TbjJ ?p   << Interface >> Driver 4F   T4mjJ ?X ( ~ DriverPropertyInfo 4F    TnjJ ?`  << Interface >> ResultSet 4F     TxtjJ ?M6  # << Interface >> ResultSetMetaData 4F$|   TjJ ?{ Z v   NjJ ?  v  NjJ ? *  v  NjJ ?{{v  NjJ ?ABzv  NjJ ? v  NjJ ? R p  HjJ ?cv  NjJ ?    T4jJ ?  6  " << Interface >> DatabaseMetaData 4F#H  0޽h ?         3333   0(  x  c $0     x  c $d1   H  0޽h ? 3333  $(  r  S +     r  S `,   H  0޽h ? 3333 $(  r  S #p  r  S p$ p  H  0޽h ? 33^  (  r  6A h??? hr  S @     r  S X  `` 0  H  0޽h ? 3333>      (  r  S t       ZjJ ? ` U SQL-Anweisung    f jJ ?8 f `@ S Optimizer      ZLjJ ?   [Zugriffsalgorithmen j  BjJ ? d  <jJ ?     N3jJ?0P  PTabellen 2     NjJ ?  XData Dictionary  B   NjJ ?%`G S Regelwerk    p   HjJ ?  p  @ HjJ ? p  HjJ ?`p  HjJ ? v @ NjJ ? h v  NjJ ? 8 H  0޽h ?o      3333   (  x  c $݇       Z jJ ?``S U SQL-Anweisung    fjJ ?8 f `@ S Optimizer      ZjJ ?   [Zugriffsalgorithmen j  BjJ ? d  <jJ ?    N3jJ?0P  PTabellen 2     NxjJ ? %  XData Dictionary  B   NjJ ?%`G S Regelwerk    p   HjJ ?  p  @ HjJ ? p   HjJ ?Y`p  HjJ ? v @ NjJ ? h v  NjJ ? 8 R  ZjJ ? _  Q Analyse    p  HjJ ?  4 p  HjJ ?P Y p  HjJ ? { pB  HDjJ?`  ZjJ ?` h S MHints p @ HjJ ?Y? (H  0޽h ?@         3333l  (  r  S Ӈ     x  c $lԇ    r  S (Շ p   H  0޽h ? 3333  $(  r  S ̻     r  S <   H  0޽h ? 3333X   (   x   c $   x   c $Ȭ     `   c $A 8?? # 8H   0޽h ? 3333-  m(  x  c $<       Np3jJ?p 7Cselect c.num_distinct / t.num_rows as feld_sel from user_tab_columns c, user_tables t where c.table_name = tabelle and c.table_name = t.table_name and c.column_name = spalte Diese Variante greift nicht auf die aktuellen Tabellen, sondern (performanter) auf das Data-dictionary zu erfordert regelmige Analyse der Tabellen 2 2ff+f4f D ..H  0޽h ? 3333B  5B-B}0 A(  r  S v    v 8 P  =P0 ~  NjJ ?P ~  NjJ ?P~   NjJ ?8P~ ! NjJ ?P~ " NjJ ?P8~ # NjJ ?`P~ $ NjJ ?P~ % NjJ ?P` ~B & NDjJ? 8   ; @ ~   NjJ ? `~  NjJ ?  p~  NjJ ?p ` `~  NjJ ? ~  NjJ ?` P ~  NjJ ?  ~  NjJ ?  ~B  ND1? pp ~B B ND1?`0 ~B B ND1?@ ` ~B  ND1? ` ~B B NDjJ?`  ~B  NDjJ?`  B  TDjJ? @ ~B 7 NDjJ?  ~B 8 NDjJ?  ~B 9 NDjJ?  ~B : NDjJ?@ @ 8 p P  QP@ @~ ? NjJ ?0 p ~ @ NjJ ? p ~ A NjJ ? p ~ B NjJ ?p ` ~ C NjJ ? ~ D NjJ ? ~ E NjJ ?` P ~B F ND1?p ~B GB ND1? p ~B HB ND1? p ` ~B I ND1?` p ~B JB NDjJ?  B L TDjJ?  ` B N TDjJ? F P  R  ~ S NjJ ?P ~ T NjJ ?p~ U NjJ ?8p~ V NjJ ?p~ W NjJ ?p8~ X NjJ ?`p~ Y NjJ ?p~ Z NjJ ?p` ~B [ NDjJ?`  8    0p@ P  < ~  NjJ ?P ~  NjJ ?p~  NjJ ?8p~  NjJ ?p~   NjJ ?p8~   NjJ ?`p~   NjJ ?p~   NjJ ?p` ~B  NDjJ?`  N P  \  ~ ] NjJ ?P ~ ^ NjJ ?p~ _ NjJ ?8p~ ` NjJ ?p~ a NjJ ?p8~ b NjJ ?`p~ c NjJ ?p~ d NjJ ?p` ~B e NDjJ?`  f ZjJ ?l T Sort & Merge   ~B g NDjJ?pp~B h NDjJ?``~B  NDjJ?pN8  ` v  06 N P  i  ` p ~ j NjJ ?P ~ k NjJ ?p~ l NjJ ?8p~ m NjJ ?p~ n NjJ ?p8~ o NjJ ?`p~ p NjJ ?p~ q NjJ ?p` ~B r NDjJ?` bN p P  s  `0 x t HjJ ?0 p x u HjJ ? p x v HjJ ? p x w HjJ ?p ` x x HjJ ? x y HjJ ? x z HjJ ?` P xB { HD1?p xB |B HD1? p xB }B HD1? p ` xB ~ HD1?` p xB B HDjJ?  ~B  NDjJ?  ` ~B  NDjJ?   TjJ ?   TjJ ?( "   TjJ ?(3 q   TjJ ?(    TjJ ?(    TjJ ?( ^   TjJ ?(o    TjJ ?(  B  TDjJ?H H ~B  NDjJ?  " B  `ZGrUHI ~jJ ?c v~B  NDjJ?` p  N3jJ?0 \Table Acces by Rowid 2   N3jJ?    `Table Acces by Full Scan 2   NH3jJ?0  YIndex Unique Scan 2   Nt3jJ?   XIndex Range Scan 2   NL3jJ?P R Merge Join 2    N쮇3jJ?  XNested Loop Join 2 H  0޽h ? q 3333  p$(  r ~ S v    v r  S Hv  v H  0޽h ? 3333  `$(  r  S @v    v r  S v  v H  0޽h ? 3333a 0 vn` (  X  C nR   #n  S "# Sp  # Der Platzhalter  ? darf nur dort stehen, wo bei eingebettetem SQL eine Hostvariable stehen darf, d.h. nur an Stellen, wo ein konstanter Wert (Vergleichswert oder Eingabewert) erwartet wird. Der Vorteil gegenber eingebettetem SQL liegt also nur in der Wiederverwendbarkeit der Anweisung, es wird keine weitere Flexibilitt in Richtung auf  execute immediate erreicht. rH  0:lZ ? ̙338tx}uUJ 3; RS08/n- -ZHXqb{@or{ONgigX߭I~)M %6k* y@2AAXؠ8TRRRRҀ҂ҁ҃2222rrrr K?u+ YT.(C]{?1QsI씷}׫{z##WmcԍjRK_/DKu;QЩ^')I##޳ݫx~>ZB $GiZ|_# EJwn~zV]{tm3mN 홶RHNmBy=~_77?WlA㠌3&m6Ҷnl(j=|B ܹMӷl۶C6M# ٴVn: my=;tO綴R m~dh[ҿǞ^ѻ'M/6_"euf\ oOf~)NGDd-#MPL!_^;IN@ow"oٖxz5jJյOZ];tztLWެ缯-#/uΨ=. `/(,(%KqW`.͛G4x` p\1<<Z =^|IMLvp$ &IapiȾvC^ߐו!/vE.종uܹ P 1e"3Qf7e#3Gn1K: ]RS^9d:#j-ʊn u!hlʊ\@xr9Am;q۟د'L ʤ4Lu|mzءԡef.%ID@6O:UQ5K}DZK(-BM>*`Q 6r|h U5#!лtn rה41Kgw~$ڜ"QhbNEmH26I#RH)ԅ~A !F"H!XHwp 8u#Ñ u0[&mkVvma6/M};͇̔ \sZj>%& ,k=Ŝ>{lO]bS؅6vcW;G}pGIMڬ)}v֠H=& 4UI4LKC4\/Z_iCL+"; ;; ;[;;{Rİdܞq(چPO<$zߏW==~Wt_A=`O,:Oz;\ֿ; @]0G0?)uDuiSW%umQC7-uM^#1XCuu1yc ✮&n*"t#E1W8CX\<13q!Ez.' pYQK*\XAn؄3vZt#t/3?'ߢ1Q|@=wQފz15Z<*$* (*`#rœqQs#v&mSoD89OkV>|ZZ4v>4|~i §%Os~O v >|p]iN]O{ > |Z5votnp0E[{unݠy|em+,=ul$ؠ|J1w $C2 :tsv7:ז`KPfCP6/i1U0Zzkź`o<\1X<™<gq8_$ [L,ht&#ngU}{!nVN gNp,b y8O=-dh6j4K9`S%)@Wnv :!ELRbRv ^=i!Ma{_Zz訇סbtkEEJԅן2Ȯ!V`7x|~q ŚMt]DݙM1PJ Ibiw{h=F4?|isDa:i:|H1ASt31ZۊU9[OuE [tQVF{P"N#vgm難TAb'?x)~o'Xt. t\jE>cTts \ @P'w@2O~DAgtCk-l,HjSUÅ\,ϖm?_ yW@]Q㠽]x-W`%5@PC'jss'S~ތ^?UN"g˄R@"?oψؔTM4[c\ 8p}I}sa\8ms/<8} 'ypGp {/pokR9pN={lF98OCg787I!ߤ:>+FP&,4=0ML{.淃!^$ƹa6r9ĽSZZN} 8꧇@ }8GԓpU0q;?{tI Q@xx >؁d7I3e:/Xe#yhk~_(Z|ֺ0T\O@?xZYz-<ZwJw _xG]Ht <y< J﷛W;:O]>%=>f. L׳/ZSГw}Y*hŠ1|mNЫa٩lZxƞ,ix>WC<_hl5/j蹩{Gfz:=tNROMTq2?QŨ z긭&z3Fյ U%[MU6[Z%%E -Wh.֫&b:$v=6꘼ɧkTTOv:*#4mֳE[DE3tQܱ&tY=Pq5ޮP/QWCl}ڂͧҢ u0-Tb>UkP2@SUB4;TusB7oDiU/xU5Ik' <=UMUUCT(B]]=@V] 0\QjYV j.jh-iStvrQ>T5BuU>[Vey0~Q x|{1ecx#ϖ^PbER3!Kٌ]ى,ǡɎZ~j#+u  'VILzRMAWLy5RMrhfjcNa p!@q9ss8͙\Xh{; [Q:JuDګ*O^b7^ɽxQA`Ge*?S%*T5>T%.8,rX䛞R/< zgtRaȇd"'SGdY_d0ڎɔC?=WѷpCB_e;LJ1 77HHIo/dOʎz^nbDz&ߖ,\|MfD=%IdL~^26? L2?9OY,Uc)Ree0>'.#I>PI@Qώ9*qTENjr,UZU6P `$T^Ns2X#*Kz*ePsvU\BCZM!:L9RZM]bDյ6xp]^8 OQA^)Qg@{u@SGt Nzb:ڤ-:&~js݇91:XN+:xNih9Ldsj#d:L:''1 #N1'0rLu').B1DݠYuN|O <Ռ#Tw>j5%`yHTeqhV.`x0终C:)8{—Cq!gBDϢg?Y[&E&R& ` Jjh*L)2*h+b"_2Yq{Wj4|נoC;nfNw8+8WF߃ 7YƧ०?QsG5{!ÑÓA#jwEi&qca]Pwblec"ڍBDN@' ɦsf̜ +&y>mDO Ha5 XgݠmmT?|3#St1=bPbĢ8͗\//:OWj5Ϛ`GfF=FUĶ'zʼ2[`k]C߮';|kwD&Lm÷"smFP$ '4hl)j w5bA"Z),ϙM,B^O9s (6((9fHR#JbXhzwD7y=!SMN=|t3*)⬞g̦ T6rPUtPeLd|ZM1eAET W| ﷒G*Σq-hqT1i\S9>S!Qy1O`dF9Q~`ST@Y5FnbL?~ڃZB*`Ǽ}YR~)Ujzv;<T7*FRT!Mc^  D@kʘ=ښ *b2| !!q0|O?0z3zK1ȑ/q:*uIGv2jJnn8z<*ku9YG7L\5N~6IO5ZjtyLX qmW mNĦ f84N$"5y)@шu#%=B:Cxb7ewwH,-[鹘Hd2y-g2y~NE,+HREdNLf?!ɶB-2+OrUdayOʴBʔMUT[De*VRLO>s@?>0͛߹QXj:%esΙ=SsOS6uNm|i8l{gmlmhۇ#s}ni@!N{j J<&ITC\SAt۪UY̞GX\OZ+E&i,ٲ,iG"l.~CJ--_ߕ?ge=]y_ߢ:=u>$E=&NQ1:1qaY.!ۏeOXT#>ng(w|gt4Wef]hHSi'`:gi4ԞJ7[N'ΘwA5g9t؞;ҟ9hS9 w vsEoMd좻"/J/_׿b&mmf(l}Qx69NbEע=wo3czsT`oSp!GURQ7T={aMn&mf܈HQ!"΋hmgGL"؈J4&P̉)"zo#19ThD%0xgk]f+nl 66>g؝ana7Y>Y^w#rIr.(=b.+Bb> ;]\~EwFT9E;i /蔻,uGnh Mf_/̱(3+Z1첈C"t/Yc)Ja@t{>Gs YKZ5Q mۓv'γܕVwW`y[ s<:67(f1֘ic{$i U0yhmG\ 7`.)b,x3OKM?.UӷB.ʧ7P, h}w]tG^h 7Mq[ sP쭊~lBw`_FUu`ɂ^$=ח'x.2=v>ӝ.NJwR9}Jꛨo.zb&@y׾"]xL,oiճ)JGSW_54NP6Kt%L]d @/^9xo{jx-V@;A/(/(zُrƯA{3G2uG3F2t#d]YG.p]YG&Nbk3}^z7[^}r}.3uhseF\O&`Zm}uxnctCqkWO7xhZz[ܾbrDSn{BLRn˛tG^l݋']qjt>Z^}:1NuRkPTn` (O#}:5$lKqϻco& p:w//r s|'rw^NӻvԎn: ::Xmu =Bsж}t}^u{-NĽu.$]gu) D:;cQ}]gA6\z,1zHG4=H/u\G-EkMuS:+Хr.@c9d<2nPsn--|M|Mt-nqVn/ #,zA{ 9rUU|ㄈvYt NR@D=5'1_g.O.OL% cJh?Τq9m9ō ]s]X+`s_7t5 ?Z#:׻ugHޡ{%Y:TO-? bΆ+/d_ :RٚvmCju`o> 3@ ވ_@P=Z2XG=DGB7LԌbB}#crq''bP>];+_/_ީ_ ߡ_ߩ_5s%`\\BDz~#-WT'nՕO;{?pwh{Gr]>G d$AH9&~nuњ榕nm /ngj68R GSW4@p_2]Յf3/dw7>M( ;pw'E;w4v>^nwB{;} ݚȷ>n9- cb|-|˭ƷOP v?=#?V=S@uo كb{X1_üX'?LJܢ x;6^蟎uE[#.01Gztߊ=8%w̠\ܞ rW.K^ eµ4rU7깹7g8"GMѭ8L@ yj3ޣ?僺1n klͿ!߼G٩#_НCG@KA0L.y[.թzu0f#C2ro*¾wbǓYĞtW` yQ(h F^_y=xckRP>CdȏF1Rd֋P_?BN/`>c_XMSǢ.'@m Ծh8>8CDWF1F}ǩ(Jby0t{|t~"Ul(;ɡax1D$$΃%K0ǃpR`AetƜهpjXC9kDWbkNL~oDQo4t>cm,-lFt1N@ᶋlKLOS,\r{{_K'ռf=&`P[{G l.v(*Nپ⎝ n]&vۅb%)(vXhwoN1nCQmaKTD1P5Y".b/V>zx>o"0iBl /5h﷐)6_1|"xOZS%ʨO>b y4vp~#C#ڑ#javhlV6gKV֞g޾os|VV0u;Bۭ416fu]CKZZa7:6) ?{.+tAOlL~^P)q 'l $ba/X{Yo @w!,KLDV|m?ec L#c EBsEꁚJDhu[J6(gS`Y=Um-sdEJOb6Hm Ey-`RU17O=CW= t!?} O y6#dt,ۍni]Mav%-hnv7}t cczd-.'!mV38 9k;  brΰb,C&cXnUbACZi秅\ mmP#[nhg;O#p]5n]T`DȪ,EA[] rNl@D:+Dn{=T{j_y՞@Fp~,π~w=OgwD[Q[OYfۙ"WZǫ{śo]5ߙQ?7S xUOPF ʲkU@jdn`L@MjwRS()8<Oz6B,@ V[,@y? ā~h}WNӃ¨c#]ȟϤQ|BϏDs4>7rƮm5M.jm֒'gTN7)4ZcX5-J"8m?0jiniMcWބhlT&/iѪj5Rchm67B4+SckX'ɵēYU*tW{6"ngKEi6"#нnuqT6r=vPSU LUu%H,l$y|]׿X(2^$W:Yg2K%L,I>˓[7pR xUOPv`òklvи4٤-A][S()8y~g~yPLa̛v޼fS7o0M@OŒO'x4,{~OW|4"Xt9 56[o_5~9}ՊJ/ ¨c#D]ȟϤQ|BODs4>7cff!%?X U8:>& 1b8JcvX-)2*v3Z)j}8ՙƊZl{.I%:Z{Ͻ~s<[G&Ea0_@de}(˹ܷkʤ cX0,L!L%˜J1E0M߆_X0Bz,࿆q1X$:w¾.ѓSV@R, !еB}o,QuЅrsFC|M{ߡP| wùMv8h'Yg&ݨ$>vs&q%EN\۽gC{obqkawobi[:Pj  /^%MNMKۚ~On]ݑJÁ_JpUkN A*wՏɊ7af֗,ZH8Zx=IDZn1Iob\ݝ5vMH?ce&<;%A)c@ 7&\l*[e,N1N2nTN#Og^M՟%u~c y_EX2i$|5)x %7Xc8!u͓|~?༒M;<<0&n,s]/>m!ҝ/BZu5nVWQ9zT;gԸqsZU,+aN!?Tڸڣhv \ID`zk+_5\IjUXUR>T-B%ؘ`̄ ]""}na.Qv&FGICe>9Sg1}tkz}<$ٜʙT^d"sB&݄hQYs#1˱@{]xh"cfp{H38Nx޳6 bݷ7a;|LyO; uz쉨CQ%z{vƋU¨r-,REel(=iV`L/gJG ǖ]&m嘮Wr~^Z j?P&hF Q/`*MZE ^rmP[ni|y|Z !1Hk'nk[rR~PjN\q]Aq[(_a\g٥Z 0ga,/>w-NF4ͣ9'0h1isfz_4+p<3YL 3^00Rh6٣EYy&sIuPǚ{L^/˯P z,e7 v!1ZHҾQqlװxlCJ4Odw<[Uwd@}~)PuUWPuUܬ .Q@% u;.BTd^K$/qmC̱X hL -)u̬OI>Fu9}Ndy>kFj,]}~j#'u+]_mh~ͯubvh-<@[v̸v (h-hZTЂW1oD *hAMsR,,h HB4KA 樓h!-<@h"[!KuX"PY4KDA-PKjIDA-sŽ5԰f6˼a:OKT^SΒ jZꡖ ԗ.Y)u-UPK%4EWyԷz3Le]` D<@Bn݈Mśl fPmՖr5 TC[nOHT[A=V}}nU[e.^\`_iw$*KOCl0=4كaˑM鮖2hBѺY Qu3;ܶlVX :F IF @XtoB,C0:y?o(?4<:ġ D6JJWAVJET',_mN4c{2\: +0¿($$ui3֕7.=&OX.ǴA>标Ez iz uXO`6Ҩu1 ) _q15 xY{pTݻ5 H M,%Dr$1ۢZcS:!EuZicE6asY{;;=ӵGר$\D>: Q@9QBHw\.sUBra5R?" b1xbSύDCeȤ)4E7.fcܶx=0ⵅuͻ<5  8 Ct?7\5 În5 wW=E;aG?Èʟp,w?濻V|7p@%kqYb{j(=ԛ1 $W2fpf +/g_s=`X[6?H-s ]#N,1LkةӔ\zx.S+7țȗN+W4`2T^KrD2N2Xf&SFa4rݠH֗64KMUYCҙيe} C.)焰m˱OҵRhC"f=I#6!=}} >`/>]!C'e ;Oa_ag2vhon@Y*>_tSJ%l*W}P5ҋN$#})kһDF~.k4#L$xǎtL+ZiXMǏr78}wG3u[8k:6l;-1ycYOo=ٺm\JП_[]:f9_$#S 1fqҳy;^#G9Cwn_Ꞌ{<8hG>k UN8?ϛ}BV-8X\07 oX{IQ8e^+w< ÑI߄ m_n3kone"z1 4 gqo"VE'oG5}xuww곌S 8˅߿/Gǡ\f=g]5 *Q=Lj^9lHчB+Zy3o={Y./2y~Q$YR]O (3Y{|VW毚jJ F/R+ fEms؂El"ےž5[-TBm}1UZ 6c;5_Wʅ%=;.>N7b-@=ڇV;pG0O:;64M7"mB R3fߊ|+) i;RW}8\ @yN8 5OA:_уeZW~oq`N;jAcTo]0q\u~] jPZxOQI[qU[麜7?1^ Ҿ=fr?L eh<4'?:^L{jۭ]zիo;wYQzLԊZCOZ1%Ah' `G=c>,> u[!ԷP|9!r|޾%` fѕŧ1#!BCҥ{X]xC&{FwZ} ' ͌&gHJymUƨOTm:MI :aSx؍!~ Ĺpwc9ӘF32VIza!n^5.&mC|<6'b|}$|gҿZ^/M%[I5itUVJljwN{y˕TߴD9N2y>x][xg_et]NŜ\l*OfL6әl D<E6'e{Š{6mok*U.7Jϥ)/ x1 cTkcۘ$j:<ƥMuJbKuj dHx "@%}RzOi:0::0F0qOjԟ`%PrpSل9iY:1t5N<2 @ᷝ2{8 }Tl eO'WPPPPPPPPPPPPPXN?|x6+dq7a =](NQ6#%62 tl߃ #~u <;Ի^:^䏛[ey3X4V_; 8MLD=Yl}G ݘka/tE`]]4]{1 ԝn2 O+ fx\}lw9ciDԍ:݅;G[%UQ$m4UJRJiԒ(_J jG6(-Qsj&ޞ3;;ޛv귞~~?9[Ҙ$*E_2\P U{H8s/ii̳H @5R MH nFEZHY-HK!!-G +0\Ԁ i5F^0iR3FM2a/$ocqPpEԂ'5j;s~V\=}E0ռnHI2¬qZn 7A?ah:Q@Sd'yB>,Y~ O(W01hݗLF}h`gxd$#>-Gor$7t&r,sʮ>JL㝁x¯7Az ZŰB{KZ2TfQhNQ`$R笀= ξ][p~ƃ##Tt_(?7jO4Iz"cX8jxl(1BH.B?d{~7 N. o BzGzUAUU0\89ǴzLcdspG ;$S40C !Ù/eս5L2ucuK3+9Q}sOEݑYyתF1Ӥe21R7ev2wezfTkp&{04λ@a~<&(n?t@}ri CǴo_ř)`cQ8$hGc>Dd{- B3XLy%uNi0MH;)^NTÌ_!QIZJ5UJEdvڣ]hEud؏FBz0p/¼oA> xWרy)M2+ڇ|Gハv>VsHтD2pQ>Ngg ޺ϝ25UcKDm24?Ņ .\p… 71;Qc4ϧ֯kk6-99`щ>o! a ր #w*1݃[vq: QWz|*C 0ynlJB6@}t.p6Yg" Pb:qDxF#1 [&8d Ux}N\kX%l[/2D>YSń'Z;&a7??ƻcMHg}oM $b X3NZ z#T< !h5Hq,eX`7̵KKRQ ڦT)8wM政NVۥiji4r5mE>w#][G9Q-vH-bGvDva8|!ђ!n}s^mwǐaO{cڮJ!jim3^y g)Kk]Ӹ_Wkb7)G͂I$ċ ,c^1=z~&2QL̐yxOzaڙdR c=M/KtXVδf.&scȌ{izYz ө{n/.sniz=f_?5q:Q2F5!il=B= κg0aUJ= Z"͜Y7lUmùo+M1bjHuhHH3]h$!Z%XWVRպS\֒=8^{hR]~!JٖLfVj4ZiRS݆뙵 RLlھ ivux[[zux+Jj Z]QNq'hW4M89aِv/Y_dө Y=R]l5k4VX͚iQF}Yj݋fMuY3TYzψS=ƲzWֽj֔i\'5N@<Qxq69(g2ʜ4ֳfکz̾9[,?-_k]YҹVr6`X'w1UF?_!o7N~n4/~+b>`n/?SXK=yߍ^钗xߋ~ﹽ|_쥽H]*(8,A jy[+3DENv#AfM>kwP!݌XjuHZnEjCR|jUɹ/^&䗝e2xz]h6 LxoS*|<UJƫ(s5ʪZf簽dslQKe0眏yğyZ*32OzCQh*zbZ OO6N>X G4kN_o]\{\%No=5g`ݚ_fa;# |!4#a gA'AK, bD.b);F) gDO&~CBlRyqF"0MFq-D2iޟ22d(ÿvy1֌i'<"xo~HqU4|DЅ .\p… .\Mx|,{6%%zROR_m (Eyh}n-Vp @仹 GDwDS ˴@^ JXг`)smH5w^,6^b^Ƭ ^ `H!^yԊʲa Km/9NP&?H6MDQj+5 MJ &wvfgh;w=3>gf^==`:,iL?$o#.+$=$R1N܃EC(,pR w(E*C4rHDD@T4) p.R5ߪU8DY]oҪG)E2$EpŸʰsjؼcOPooS@dgstWxk(UwD``{J厡h/^jE1OcUK\:\tCWhٕJBX8ԅ1I3fN\aZ&`jI[bj0jZPI$u%aW¨Jɠ=@ސ$gK3yV$Dm:y}r1]$' 5rer<+yu1dPr\#>86^^_/tջ#w}c6ݺN]ٰPߛ*|*C{#a1`mxoҵ &RM+>_+J$۞Yg P$Hx |OMC14'OE<]0'-k4!œITqu3sZ, ocTqc|^aLpf)FLbzVz+0'tSa7?A:tnmp'"iJudzi<-B=XX P^¨ٗbn'V-Vj@+ "gKޅS:Y`Jմ[S`֧[Zyhr;$gz!i_GZQ kwnݜ+]vG-nOnOn`0^w.>xizZjDzQQ I|4^^:*h:-q˥GuJŏE&1r|2/2{V/0T)=V;ֺ>!sPiqOz 0ZXn\2~՞LJ@<џcVXݍen =MˢKtRuMtZW;]@e:3,>Yg?Q|: ss, gNY$ȺrU{QՈ#ֹ_M0눽+ mH΢& ޔf^VWA WXϜo͜otޣyb'GLM>fL--dLS5L 0gqRXl;ӻ(z|gxg {9+p~Eݰci'1#NNa9k\3XS1[f L;Y/0T)=3|kk4f̘i' *#NLa9[\3XS1[f L;YtGJ죈^E9 TE15Nfc%|6y3lou6Il>[y^,i|M5yjN< .x Mβ_$d@JN={?3G)J]tZ% ##%9xx𮃐|(goK c W.'a5*J`:&<_W5vbkN[L=~tb>s#%\=>`n/?VXK ܟx'߲uo.ya{p\EG_:XS\|wQ8b/Oqr1F5o` 6$:3VxiZ=&#M0i6sӪÓ mI;EK ^|n8BWLA/x^l|q´"(Zx{jx[,;uys`/ L zwSq#yokN"3WZ- { }_S UzN4sj~eީ{[#429>+׮o/6=|FTHs#ߓ%}|bb W| :7#(V|!5'H'<Cw:Q~ˢ= !H#YˁѿvN{1D4ߏޘrW|zR\2}#{… .\p… .\'Ԍ/W~YC\Α;Y~J{ǃ3^%ߠ'.-Ap>wO>{@mwG{D-=}}wc=#7 #x~(sI}K;X[.{^]~ý)@$߸ںk#ڇ0lGRˡac-H[-x0rX=m1w_.\p… .\p_)8 fx\}l[?}u !N6J[ R68I?iM0Ei:B@lDQ։VX4bچFبUkЁι>~jgsϻ?'7p`0liLG@ǟ+d5$1N܇G@*,p:RhPTtRҍHH3f214iR|<ÅHMH#-AZjk9W D #B y0Ց7> uFB;RIQ{Fwx#u0$h[{CN`7ZrU7D37VG!>(p{?Ƃ\:v!i՛232cFvH h(a FCDeoQʆ%lz[v*;G]BNT_ܞ12%T]mVkyuPWg7kwwdd8P ݶ8*|7W4 7±mƟ`DqL^`X3iuZc:}e{-$B+ӡKNiuzx5 z .Q{T"%hSYMXzb+=!^ N;C8va8> &(La>C}X){ I \TC&eea}s?m{~D|O AVjQ0xpc)I8!rӥWk~"bؒMưkx (|=0F K|< ƭm2"3';Cp~b5 ʟE?rr(lF{NbX*/C~M>!H<6g8MPO#!}Q Əɇ7#LUD]7qX i` TzFcS|̰I˕Lp8$v90hsضg4 c| 1&9g30 J+ 6XMD +4#[zI2n0NZuM֝NOKvL )z3>n,,ՊEKF-jrx%bnd]Y Wv{Û>-Wbר|};VjCe:iCa{cÛѧNJ+knUOn݂nnp+>x|dmrsksۊtMւrR4cץU`"dҖxm+GSNOF&1J|20gQtǙflݭ^_JՔ9:ӌ8ψ[=Frz=puzp)tSfRwOz$szl7*Y)pEiۑȍjT0 nn%Yl%|wOZ RɼY)>F#-mŏsf5cjň}}X/yg}mu 'sЧ5{9U RYrVG"d+XWGhG>Zfk5`ydK5$gs-9[k=djL63gKd:m4JsY-auwa.uG/cnxvEߘkc6MiNjq%xգ)s%YKh-u+Z+xEzfӭgrz8WֽԊ֒i^ǘҎWyF<1ù,VLs:v"=VdNⳈQE9+)VMҎK̟򓢫˟ie%[Koyɳ)-i8uw$gD3g%;A_aYV q(̒q_GQGXh>OxEHoU3ӷ}Ïd:hu&lPB_oc'z497,=~t~|f~'Nx2,uK򓅽wAy_bVLk ywGwJ|5χnU$ӏ|Ӧ]*x8Bjy_Z+DU!mGuTf=HӐf0irUHZ>fk3pypB!،&|'Z *\| &_yN8\SN.>*kpif?^~L?4k Ee|LߵV_k.?q9t yHo: ztoQxkO\m_G|ɯޠ271t;C |!4#a $@<'AKz,bD.b.;RF gD+&CBl $# ĝ;iJݩa(,#HV 2mCa4H{vix7 #zKwcM |,3g_zY3~(mC{ߊІM+u,2' n 9H&"[')Nq߽;sG1BR7AjWb_\cӉWB; "k0Z} fx\}lw>;Oc` >lI"a &ڴ }g[[%JVqF!MЦZ$QK j)i95}ofvo#ogvv7oo<`P9[Ҙ$"?6]TH!{H8s/ii̳r  H"-@ZHYRjeH5Hˑ W"!BZiE߀ԀBڈԈ$({!x/:!a&C5<>Qۙ r5oۂ S8~!$ ?(Z˰ /Zri :9Ovha8vG _UDI_C> & \Aۻ`Ph81$&aQcÑ(SvQZG  jsǬZ c?(5lMS9Ey/* Nk0:vیS4jhJϾpd$ƠRKD4Po41=Wq͕Gk7v{, &oC3*h\Y6?E`xW[ ze$!co_ÙiaEr4viA9$PNM|^\:5N3__tS4y2~~= @UJ CBǩ)<=dlOpa{0p/ysߌ|x¼b Ї0=\\]7aY>ľ*~DՑCO#G ' J5RY 8_x{k?w5t-[D[v.\p… .\d^G *Mi>SMkk69"ޏ5&_D`oc3!ra ր #w*1݃[v:pJ?uwZY_k- 9*G乱_n ӷҵ9}#+9m>?\EL٫%!P L|LI&8Id Ux}v5\kXel[/2D>YSń'Z+'o~T.8zI2+:lN͚`L߫F#D(-i;e)&_0̴KK&RQsڦP#8މ7S:YmdٶK %GvЎ6Kgv׭p};jIմBiIg]Xh<Gj|Zy ;8j<zxTBнPwppV|t>֤{=nE&kA9)vBp{{,h0DN~K2ӣ.Iu7Ǎ|2`K̞#x:RZ[wyL5d4$=>`өi=XlOa!3汧%OzzKQ>=!_9}Nj,HG%jBӺzF=sκ2g֕1+cUJ=7 "͜YZZ}~5bjHu:w[ڋm]UUJޓfM/@DEp^u^uͼ=S[,m>l)O]>n>tq&3_4eۧ)n ھ )fCpbl-Үok2xOׇwvbxx1r{*k=yeX4C;X#Ɛ'U#@\]2jmoag~=g{ǴUgn.>|6MK/q\}8c>XW2w2tA;I^Qɑ0r ߓ%}pcoiQ䷘RF#Έ&%MHdIF";}(NeO G!L#Y 3k ;>sIR.\p… .\pl“ca#./ȗ9 q3߿~"4}~_-6p@9 -#;a~)<B>#%>W%?AҺ7v6w9qY e,o[&ܶF*/:J'-2qo<8@wё>aa3 M 7#ua :zaMЈf,ۅaF׸.\p… .\p~Kx_yU=vS IZ Ic}b 8I q4mC8 Nm`= Kg2LLOt&S zaF;SIݙ( w;g]M%>{~Z9͝䶮3V:EG߱ arVUì\Qe{Kx?uc܀1\ 87c܂Aa|#b]0n؅q؍0>wb]wc| C?¸c/ƽa|S'؇q?~0> n;,!0c<ƣG0>y/`)Ɵa<81b| '12Ɵc|/004_c 1a:38Moau̡w9~ԉ/=cOp)^gֽmڊO>wg=;l^?֞yw;~ڪϟ>-b[78?vp=rCN=tgQsO<}Oǟsn.>ϟgCk{j#Ο=[c{*{9v;lGV\]|ztO]#=Fwn/މ}T\_[|d cO.=xqnx ?\otG?3B_6+I ~;Y;d%Y\y} Sf)3y{̼=efޞ23oOSf)3y{UfD/zo9ggf̜gf̜gf̜gf̜gf̜5lG՜ bqC6n|RtQ.XP]=yj䮒)tAJ~$TG@wr K":%(Ks8KW~r}^ =xAO?̵{3Ω 7/=Աz \vA)ʊ7܇@րV^zr#/bŇeU,z#2VE_ahn$ʿ\(4Ce]q[Kқ .jh 3{,P腅D&+|IhK\fBS"E(6w<h+r39a 8ΰIpǟ74w9EJ(iIOK> }ʵ&Ԙ`2Ya‘C+;z;mơm2S̃*ny̮1hnis͍@6qݐ4Fs}i(ܥ-'҆8*6K> Ќ-/BTX-P2w ({ȸ>11K>?#E˙DܬS=E]f<.F>^vпCs6$UhJyuUH ga~b Le@ETOl3sg֍l4C)1n2֍ ǹrejIyƙryKy[S+͌*d(ז#`j@. +tZAV%+ʽs:-9Ods#1|K$Z f/eΗ{l;%(63-!ynڼFfW99ʙ{Yk77;@fp3Ls:2h,<2nnb Ƽ<٬x-mN1*1:mΛ{Y+tahvqұY,Khqh;If5ۼļl}0f/Vbjy,:LndΛ{`ٰͯn>?cw$1ˍfrRte2,ͽk*2c6S&__F殢vfLү˽lҘ.ޢYwU^j36A D_#ef2\e،=ACνLJ>BsKmR?ʑWm)^&3i! $9{i}]4{_lK e= M lHf^lVxisܐϤIeMõ>c4f)iu7U`TH*fas/3%^׷b)uABP J Mx +q7.2Nb/FlN^& Pe̵yENshsIla*.dĜ*ֽ#feAhΓ{9s92[)ted3fe̹r/U2q?֘# ofSh 3Ey͵9:¬g.37>8 }mo3w#O w%;LstnW 0s/G)6Cho^N6Gg^9+9ǘܧI 3+0\yёٻl+Y4P2zykyrPFd/{g3r9AձDL^zI% 2cK̽SfaBw flʽL܄mt.W3T5/:6;#m4^Z+hiɝu9s//f,&ç'W/гCܒ#ClCeFJ^kV̜g*3sj+Լ^Sn\uefޞ23oORKkK?WsTFqff̩qff栐=pCMtBe8ΞqSƹfֽ7TisUhe翡o:.OBBi_ь33[efNsm#N4)S5j[0e"T3A16N#uv9g 4=J n `Vҍ7Ü~ X\*#@Y]%(Jvd+EKuqoJ:=YXfoS8! WA3s|~麰FZJ<: 5v́ n{ Pƛl-!]L\{9c:Kڬjwc3dcsxJ'E94l:mnkґNMMS̔X nq՞3m>n. {`)CumjkRd6if+h5Gf>f)gܭ=@x\430O=\9gl S B[n5Ћ17+3\reӸhD>9r{_AՀJ9vohXh}LCG_ќg"<4(5cmN+v#wjy(/u'x*#42_ |EFլh ei|I n*sgTwwkﲶ֒E1O١stAjhp/ķ'ryY;+ M,nt%fQgrgo;OWx|] AVϤy]j`n&(T=;Ua }m6vksBM80k/֜͘@Ci)A#BmNe+sO-ݛiFg8<[㹪Uf2;362ēK0W9|S/ i7~khT3~j?xi`m`>f_߱է#~8ζY.Vv7y0%z-!Xx[y5`J@.4`,)$-ऍMH6i]8`zL۴&)Ҽ䡫s0/Yk[Xkf2] Yk4ך=}[-i4G$|{f$oֵopCWpxr4m }x{7 q >g[PoE] 5D :Y@uwޅz7zOރu#j+&6ڎځi{Q?[Pއz?C<6;P;QD} _D} u'#Pwy[Qt/EC݇ڏu꣨~+Q>:a#GQD*S_C:7PF}BB60골PCA}8 QP::z:::::"KPgQPzue3(,ؗqgp]nJxb3~y;v/-HJ%_jeKIiNK-? N:L~ ߉! gpi{n\ExE9by>vjlw艽l?pر#ΉGJsW;y/zӹOy䉥O-)OpLȵݣcIw~e-tÏc]N,y=|e }<(O=vç>osGWN+^GNoS^:~I#vڷSGʵW˾٭[g/oYi+(9tw>V~{*5P _ u_ 7Q;ߣ(OoۨQWԿ(ru5J[|_WHW6~)1(1(1( 0Hhf(caML1f(caML1f(caML1f(caMLˑq:F0rzxJN?yߡV5c_p('JeY\F :hf3V*Pӹwc(B΍2-h4A!4aLpТMhMma$~ݴ5Z-݇ls,10PC1h˜k.i:~2j#ȔTb-]F܀èL6O0dF cu%cF\D0<T6z\wT회m^XȇMh)ר9echg8!Xb4$FKc'נ32\S4sF&3c۾0\]IDF,*' #q*Tqck00˖U9D 83d4)1'eʸrό&=x~Ẁ,SFh5F,qg z82[q&qfdhcUlz_=R1hw(8Mh#- Af Y˴37 ~N`b_O#Qbl邑haBi[8kkQz|X`)x+q&.F(iGʞQ|v2v06\FND┅<|a5^uLD'Yu1c1QX`8؝CQ6?.br0b=; :F֌gD0J׮vz^4mn `f挣0cMfN0oR[_(.2fA;P4>c%̈~TEjZ:Qǝw&QƉ(Ì 36 xm{mL=j|k&: 0Z>*Ȍ~)n7q1h H^;j6vٛVӼJLag#fjO`6196ĨQ䙛f_/( Hi`619 Xi`619 Xi`619.G l5Z28}69Ή R>Q$e$U>)A>BA5h>%Uᓚ9g՝j3CI1@ Ԙk.@2c'UgF:} 1)B!R%!_'55Wwz]GɌ0Iy>I T>)QʌaTBj5ǗOaC>yfQIetSF!;I} Cc42e0c7IQqc c^>)7 '0}F5W7oq*3SaO O;1Ҽ}R.b A>sI9|.K*IcOJ0:1­b⌔sI ƙ8c'pEnfT'eYI\b2>'K ]f `$36kv.OJk[!TiIm-8frI5XTsel\'acqc>(c'ŌwFbkwaՃH,M>)q0 Ee&3NƮ˘O*IՖ8\ƙH}R1Ɛ t$/`kWsI-fm;;O*I!{'Et'c 6)ni'51IO ju]Mީ}R`8O}Rv%'eW4oy3uLc}RcFDᓚf(caML1f(caML˙1zhE6%8D<ǼUp6 5GC^Yjƌ\1J^.`-1|`!3wmgĘߘWX/.nnj\>cs<12yyŹVڊb ,flǘӘWn3X1'3VJ0rdM8cՓksz3u+Rxqg֢jc^ FИP ˌ/Cu q8`#hCM 1\/pL3cPnA̞}[1rM2rɌĖߘWcGYV.#^\9`\ZK41\g\sƼr0E)M{MeKW#^ Of941”Ywc~c^d4Ì0m9U;yy0Kbx\!Fc^-f ݎy0V sObLrqfyNjKs̫Ōa/ \z[܆z"긙{92g(y4%{4s+Ytc%1`10U\:1VquZhfr%ĦlDX0FLc'UQ7wDM%S>v.6JbaML1f(caMLKy3g0.Ȝq( 3:z3aTN0ŏ%c & a',IN0 F9ckKbő9)L$h` lp'z`mQ*03hq5l+ի}1Zm &ǕeZv `t,s^_xĭa -5´vq,+,XOn[U|Oy[FT} :l=W p0E/ 2#YAF՞k7^ +LF(=z_U6&&hX k \:GKĸѳF&<lc{nڌ] }9q࠴AelalJ񀡁 coc{6q0q#X:*89}]MYȌصu:i0Ɗ(UDC}14xΈ1i- #_DBGeƊbFz^nf`a}W.c;_FvV0jU2Qq8]P]h| "XuFK`b&a]|Fѷ?$sdiMC=#162c;`l)N&0v}N&1U'22$33ZO/9+Q3p 5o_װaU0* 1U'2aBƱs'c3‚}ƶ`t##FXF0֢tW>|F,[цqUẁ FV#Y%/0bq-3l3)cΘhcaF-`lm0ĸ: ڐ/ٛ13ϱLQ<>6R7){"1VT ^Q0r2]q$1;lbn6]ZFC@0vJh;cw1QT00;7mIh+*khcu]9!.Ewצ7a90fÚè.dDnxR2wu[Bم퀱S3kXt2/%Ɨu#0nIk0;Uc4]F3`4_Ps`Nf!c=`~7Uhh^={! X'# ]F=`?n"kZ܎=hyp0rQ͛`mP73ʨ-̏'BIY`߶$ƵyNF 5{m,0qU>m/9^ϚIm^iP%Yv_K/Ej{뷇?;M^gbz619 Xi`6196xѢ`& l`& l`& l`& l`& l`& l`& l`& l`& l`& l`& l`& l"nΟ09(1(1(1(1H8["afL3?3NZMNY֊U8MTڣUZ葆c@Rpy#XpDϢP:qnyyM@ z!?d~z[ah81>=Zhؠ'Ƚ:q]i4h4laMN5QZPq +@č{w8r  n8O) >OyH W\px0V 4t9BL8P&8G0=/f%Z֐ >59$I#6Rq p1Oƪ`W%'7ڈ/si#*i(l4ީTz"3"7r*9.+Fl*\xR2F zʵqq /iFG2htnT7eF_{1U56y#Td ƀ(c #/?fxJQ6n٨K ,43]pt=K{Kj 6b(TmTICAR#fy4l #rTICA #i(T59dUIC<_*È9ڄ1;$5an㹑TICmd8aZ/]F02,@9#*I.hccZ1\ESy~O44uIC*c[69dj(,&;gW0,[g /#\Fk܈W4&O@UCSHu̸ϛl'0k]A~qN<{bNhfbE㩵Ql<#7}Nhf5h&a,kX(J(ꌵŴWxbګXKl,%媔R:4`KvMlhFascyOt&r oqHbp͈3WJ+]+"p3#>c+Zc# RjG#"0V62E3n鿌]ָ1b!ʅ/0awHqj9[1:hW!\oF%#ӢȈp=c|-茴Q(##(he[6)eOlvhRY޲1˜Kp-sei,Z87r[/7k 0^h#4996@ɺl.Q #߂Ѿ 4 =SFZƘ96v\fsחQf6me;H= dc\mB3#e17T`rrmc>嚰LhE׊5|ca: dŤW+u=utz3u%3}Z9͆5c 64Lz ݎh&ZhfqYzYeDk4LF3Dk4Oxr_#Lx9 [ m[;㲙w0൜{?sɨ~5N#bB0??q̉45 ,pT@P8=bHˌ@1aԈɭXQ AgA#"z$9)t=.bp6r S7cEG=w03C=id/G:Ij I1֏yb:xބKep* $8B#( ͭNs/rc,03_ 2[x{u8TG5}n?6uQzq+ b#.~uf<'#KK@!#3Fj\sjPޭO9zɋ(^Ah ]|>%c TV6GV'5Za,:Tj알6.afScrT~Wj7O R~PrxژwqFCKƨ0{H9'gl<_G`l$EX"FW(L'%=\% 03c >c#)FI'QQDž~xZO1mnVOr6n.N2BsdQ|l_qxh 1V9 1,}ǰ-0ċc8$WA_mR_2:m/jnoO.FWY1ʌ32LX lc9diINh/O-Q^Vk]2s5~O ;%ƍTP\hKe|M~-1ނ+oaAjzcؤ`<øo:<_-S/tt< M/.~Q.pԘ%6/{{ kxT^CuScԅph kV˱u(v~hˢ5cnF3Dk4LF3Dk4LF3Dm{oY_Z?~b˕߳~0=MЕXMS %x{W}GQ҅WB0;N)Ւ-I x0&h  1!1\PQ_U)G_hoڦTS(s4̝vXy_4hνw|W.i3wD2ʆGߤ-;*O.K" Q&F?c= z4t!㠋 ӯ%'@O= z t9Th4h7COz3gAφ=6ۡAWBWAχ^;AWC@B/^]TmðAC{W@CB^ .軡B7A^ Л7C z+}CACBn z7tzAt;tz/t: z?tt A8$%~X\r,^cxqAxs{j+^|˛w:yT'ㆤ=yP}/.4+yh߃8G4>j Gq߿q4\Ч -8ƊߍbJno8pw~ѝ{c;?x#wK9 ]|8XƗ+nt Oxwvwzxi9p~ѸnyGW>}WTr7=l-O?tbs~=lbXN_z{žOn%48%4&e $SOC?,砟> /A~*qנO@} 7߂~w߃~SЧ@#菡?gПCTSPKЗ&W_C-eV'蟡7+пC'qKxu?:7/SH_5A#U7 |7 |7qܵ) mT%xSn)wFܩ(3NEw* (SQpgDmͽXjS'ٯ)ԯ#G 6+Mvٰ sa˒ NirvI-8.O\s_bKE5F{N.vFR":ɤ5-!Z2s ۻo4&QMpר&>uf񹱡 5:rD'-&!vwP8Z K4RҖ5hE r e߫Q  =jSlo nW 7bӢ/ᘻ2*_IpSu@wY(rmb3T=Kw⮒"iS ԗ8F>'=QpӐ5 d:. ܼpSqqC P]Bnc>"hzut"F܎0A%s0V>M>F}jFmr's"F1w>7lgBnp7*5n&riv&KwCq/=17J8&W#jlGZu1ƃ$-4ۖĹi#^ ׸Ŋ);i]ӹkbs/ي NĽI]l2nw{ Hqca *hSn[0U<ٜۑT~c .7cnpEKҚm;Z=Ƚˤs7#r-aM/^0_&;i#xCE wLաܢrcZkv,yh.hݶdVS[^b:ֲϽMv{`<,sI{=nomӸVk+K]7sW#yM~oMgd}"a&rޜ6VU~]%?D:x#+CRn)'[OLkZ{RU|ͨsw0IQ'5Fu+$6ʰHr7(YLsmEJ8\#VpLr5 zZ1`.e ~7wW4JȽLg:w8o_' W:+ܵῶ] ]uˑq?Gkk5p"k<Դr3橤t=J9T#QE/;# TqVmv)XQwFܩ(3"7n3zXs[jMY]=MY9qm ]ڔ ܺӯ6ex"6e]զ,`X4 -\CxZ.ɶ0.3erqMrl{^Xilx>?'%kSeS֧\!UW4ycr7Yh/Eg_FV`7?E-!$s A^#\uR/u{^X|n^5nv*s7녥sWPUMrs׻Wָ$ycީwx5.>-'ޑ䞋?v2w#饸s-l'+w{%iMM9ca q{%TjpmvčOr. {cIVǓO8c7F>ۍs[7/%sDŽ4 >35yc7˃*OTV?>Yq잵js*ep?Yv=vVֹaGIK \jJ_XCv?nxl{cXuzO]k-=$O{Q5}Qd+y g|qחVxy0]4cX;;[abY鏝%}ciBfr@ܹc'scܔՍ7OdV6ycD3WϘlc'sK>w,]KqB珝̌{Xk1<]K' lnsQv\eߝ7G׵D3/SVc$kXNB|N]سvyQcwFܩؾKv_n==!jS~o) (SQpgD;# TQpΈGPֶ}j:L圇KR-,i}e,gkRyXTbq>ZxNPL[rdq>S|a]gZwW»pi㮺==ǹc~utn)-V>S}Gm"+:4>+rsv;{SX綼ÙsVŹc>-p癇UqK;L=PӜ*ȈJjk~sƂgs癇}41wyX}Uگ|w=aT[n9aUܭnrgJMMڴ4-BU;<>wx3g&T65Aݙg:<[ Bϔ6 LgUq!wg:8v}ZLg^!3^7TU"/a-GNLs?E^yXU=i/D1i\ }Uy9<ΎqsMݯ sÚNLcwE򰦸>Sj:Ʊ>wyX'sCڧb>S>7{O琇ucno;?IsÚLk3>@Q=<9<`2}m[^=wFa C+klx6eΈ;g4oɄMY@(3N#êÚ8wUE5vPjSPpo)!Qm鏝Y֜3Ú?vfyXs,kؙa;<9cg5g쏝Y֜3Ú?vVyX*kYa;SonR8#tF†Rlm+gb>cwSZֹX{"7Ր;[ muqq,t$ pw&fsl p9SYfWp?Vqf lcsW!̽ڝ{c :bաM'A?6۳96>w[Xōe>s'Szq=LbyŒDKp?6> c{s?ۙӑ߱(nnc7c]ۙߣnnc&=4;M85&j|sQpOx;ܟ)e?gZӅV8mǾe{qŊc{.d|mN*q>IU ,5\VR|lT 2cˎ MG1ǖ|-N^TR}Udb=t&}-yخcǺ*>خc:,>؎c;:,>؎c;:*>خcǺ*>خcǺ*>خcǺ*>؎c;Ǻ5(|jmsk:^˛3qsە+mW[]S\' ܁羑;"a)rE"|@Nv'X aTu|RN/Ɔ- Ì{;=Vo"zqb])r 6^o>Sw M)ɔxg1n,|aZ?@rs6͸C.KR0HoapPr!@DP'2 EG'=c&-nNT0r3.p#>>UKr|,L-4kp=ѳePWƵYy9wTx?$OXpn\9wLq9h)U}K7eyǃJmAν(qJ۸os"Y wr yU<?{{ֹY{!T{)(Z\bp+|= ˁ-: H8^p^x{=~;jHr>j=g2H!p}Ƹ 6s*d|,a7&Q?+4ɬd6k\I۸aBf0.Yo Awȿd22ս3B8Τj!T!TV8 ._-(|ل]> Γ8ngAs\vtR\460b2,'CY$ 9vuxoUCVh?DP<>7*b5Tb ŝfO3Uf+hNDziJd ǭ_g ̈gTxG 81%ȷl{Kr=#Mܦmȭ_֙G|q64"JƓ;7s*?1M0(25{p;n;}fl]˗;2r3)a-{X5xAZ|.Uz:r\q$wʲIv2iHsO.e:q?_7Ä;*'軱77zr>y6sۇ;|>1pRG9nZ7PӶ+=(smeܵ}Gi˶vgڠ}NN¬\ 2ZD{k&GjZ"qLje2'7=ZB6u$-[R]W?<1(qLtG<7*sFv$mWۮ<]ynvsە+mWۮ<]ynvsە+mWۮ<]ynvsە+mWۮ<]ynz\ۮ<]ynvsە綫W; hՑulC^j. EB$H~wma f逛l)D>AcV>!Y$n l\!m-&9U{.U#XqYyC]vog5Xrv>NDM}r1q,ox$p~ J+RG1>Ys$ܳ8{](UшIsȭ 97>kz&inYj87-+6πi1a^KBq/rwKѿQr[7WpR{0hIm/Ճ06c=-θ5 I{rXX^<ۏ7;r * ֧'^{~w}#ydrn(HӘ#7Ad zBN` y@sB7 N ż#>|nO˴WԱsە+mWۮ<]ynvsە+mWۮ<]ynvsە+mWۮ<]ynvs9$_w'm&_#7N׻@ou>+xO}phč,/䤍H6"˲ⴖiƭq[%%j{)ۙ&r5'ɭt&SReǼ{tIcS4^h|@@tY+.Y|ΝݟY*[H\ k.GGf_ja>cf?U`݂u+mXc&Xz4;ºcX=XIXbkډ SXc6X CX g~ڍa} Xb=8bz"ۚfb} k?SX: !/c=?#c=uX/`װXX /b}k[X`}w^z 8wISXX^:uy X&[Xoc-aY;¿τ_><77o?/v? @2[DxܪmKg}L'q[>w?.$#8h8 cDA5tt#W?׮UGecO/ߊ RWjۏ>}Ug~ႏL**/r}{+;iT?ts*?S?^$~}HP7*_ zF[~6$#fs~QUr#7]XWrw\-AJ\Z*pʝہvQ7Ǚ^|]}亚lE ]}ׂ*tk.?Ve:\̺uXIl]pւva :Cf2 ,h s0Xeje`е3n3r\n ]Ӏa.zH#pdǃo%rJzIs-;vׅmw]7tuuhw]悤y"Kp1EnWUFWӒn˷Į6]Y#bXn288{ 욓]2{Fm{~ߏ;.wˏ;^f<1pkkxw-rwwҮLyҹڏ4?Yr5zl?>wshzwc.!1W߸$\B..3Wٶc.!;+U}Jr6x9vQjRs90܈\*wx~V;k(W%,-&@ů4# :W x ]s%g᷍[B~] x~t#7}xn-m[5[4?q gloGς-qwY3n,xި+5~g>3Vۡߊg>3pg53|pK<ފfb}KϘhnm ?P }Uh)rKϢŏ_._Jȹҏ[yYj2~\R~63s\c;!? s<+)?C7H=neg̑[Z~?1>K@=qϔ\*:wU.PsMFnyHo 6dr9kKx.x{#pr%\ {h.V-s\`.n \8\p.'tK.8㖐n :w"1x.y8mrrdh~6 3v=r1\.5r1\.kSr\d7u]s&n]ta }OrKuDewBYY+ќ4y?ZFSgU@q4s-{I,0}T3]k5׼5vd|u:2ݟdZ)w~;mgqw*lJ ^|,n}':N{Q\_Q~/j{7\]8 -: q3ۡ? --μx.͍F`cQ Yw-n}Eε3:;\Nt%מ5ij!)4}pLqKӷEUr\*7s9Z_|.Gkh}mM2Q3JL]\FH}m\FH}m\FH}m\FH}m\FH}m\FH}m\FQkq%s9&s9Z_|.Gkh}mmlz^ڔ\*WU}mE ~.MkkJv'EOާFk\#qBW0_-Fk ћFnv6Z_[PMh}my`6R__emW4_-rwg\j6r;%&֣W0_-r`\|m6psk#幂H}mnO\|m> zRFkwk#%|ytp\ȸH}mbW8_ (d7?k# or|m6< 9nq5FOiHЭ庉b }m<qG1m$%W_MFkÃ޸&r] q%|m6߀K-&k#U@;R*Ծ6|mMUr\mt.GM:#&kIr6\FHg\Jr6B.Gk#r6B.Gk#r6B.Gk#r6B.Gk#r6B.Gk#r6B.Gk#r6B.Gꏒh\\\n }mR\\n RM>r6_:#IrQPr--Hpuϥ맯|mK2ڊ&ϊ&ιזMMMMMMsVx|m9nY9WnY&gkeCi}mcnI}mkgEkny}mcnI}mR2ni}mWצ\*WUrg6?+B2JPrϊϫFJ?+>!*jϊϫFJ?+>!?+мjYig]T~V^YkLwKqK?Kj^5*X3vg\*W6Y]gp+ܲ?+j[ }xfo:f溾l߻ v=r ?Do/l^{>hiu`K>pM}eƵfٌ@?l 7t]]}x٬Vw.[irn;|7Vƍމ.-/cl0$][#u݄[F+ ]*NrqEt1D7|6.3n2~>$]|\~>YV _q׍ݮKrykOw1pm]uН2n#.>D>üe+G| Zê?ai\8xǝeˏ;;f]k4_qu6|Mr=Xْ>l=Kx<t_жGE1>˹x\6a;p4`{^0t È:uBo' 3pdpDcp uu<-g(n6e\7z{in=nW[ԑkC_6YkV@q `戲7 ]= $Zx}.kѩt5_[X;\`\>_W *[ٝ8;\*Wʽ\%7 ;.WV9彸a+ }ٓ2}+0x u׷Qkaϻkr7O Z# }m.3"W FVJpLfF=,"ׅk7xQHnɔkqa7"׷EZKYzQ7Fa5MH(B^)7;J] ]'t>w;3qmHo5QXc&QʄJvKfp8q8;)noCޒ M ·㡠lEa5r 7+:tF܊/$3?LJƬAX 9pٸylܺodwշֳU z%%'O8Lv;ɺ.n7)tfMیrlw|R3[JWnu\*WUUK fFX1mv:Ǥϼ-ܦukAY?F lY%bx}ǵ 0 (Z,SJ!I m՘$-`ҴMZ!$8b 0iڴMҔ>? Nw9's6@;I795AWs,_۫{%}Fsuuuݟtqg qհV̲so0ƋυXoB:7@o...~zdMzN]лK~ 9f*ǡ~z^}OA? 3B?} t+y޶-˅~ m> }(/A@BAۡAC;C }W_> } u7Ч]gBA>= 톾& =CB!З/CǠ߂w O\k^d=o7~ǎ{E={nup}Xuy>ۻƎ~fm:@;: g[Ww^պwniﲷZ'zl|jkwj|hxekë,+?Ɲ{^׸nƦ-+7n2d{?8 ~zC.{סgг@߀&GC߂SϠoC@ =诡硿;'蟡3]4z]·wLFwX 77=Iͼ1Q3oL5Dͼ1QƼb2KYffZjjh֛ڪRb85P)yhgl1Jd=h59IPr0ĕX(ˢf6t+J^#"O\eb1Wa~u=kCVl {榸K1Qc ]lܢzq™gT:e4a97&vN ,'3`1'5sea?Z[<*2lW%Α)t56'QU`n+qWVdkY,!!v{x9'NY sXB错-u:^X"',hc3ItUf{ۉYfX_,cn-8(9%@_skuxiϜaGv 658s{})sdf: 3S161)s_b2{Jfd< !0Ѣfrވ#qQcq1ה8NTdSV/gnE3/0̃,bn303੘Œ9٣ >1G2$0hn9&h.0Om}G,bN;1`f̭Y,I؋_dv:*f$ei3;|-0Ƿ0 |Z s=ʙ %ceyrl5268-GdFkYޔUT^7sǹE9!f=Αq9z9YΌ>< Vc<똔;3byR;̽2f_-gDK`, e̹^G];tN<"#ր_8̽|eΑBbH-ms3'2?n9vU4FۜHfc@'?lpŒ1s|%X:6ev[ƢɀEۨ]3?sn33?Kxq.ٱ~eQ3W@^\-z5s4"ЬW3W@^\-zg>{=8{=pȳƏG֛,C k,f'!1ڕxc7t'NsKd':ezf0=B3w īfo?ۄf{h1=¥`"fWXS0lSszrO ?wtkF 7FrO8x|X2f'#4G0z!tV{bR2ujf'8k:k*3?`y9q2+_Q0<̚zrO 1w@lI/j,bVx}l-i2j`D?+{ӈYtl d0I80S1ӺN_tlhZ}:1,li3@,}jĉ'-a.xc 7|ͼv+<-2%kآ_ k '舧3UxXT {i-N#b1Ø;k̯<c~'0?ln_2O Fny cƽEb{+'p9,3A3#;3qQ\,,3,ugs'p1_wf=ꢇjK0e"9rZ,ۧ;23;&KW̽f~9fǙ{y~YS3; sJ03wr]9sys-%ʘٜ3eD_5Y}0w 93JŶzOq9b.x_'ۧmVq8e̱K[ 3f.̂3 #31k/ѵ[sq.Cb;  Z J\GɘG -] s7g3oDν|Tfސ{̼!9QyCfAqQ\9l!-*Ϲ7Jeg+˹w+3ʹG:o-8 ^`%3M̆98s69࢛#f{0 i=9.eϹ`6ʹǍ_0i+؈$7}YMls/eMά~3d>>1b6˹bVVtg{RfÜ{@Uﴕ1c_c4rf98sOdVVtqf{I,;Lgb6ɹǚqf9X>eVVls٠=ls3iKwj0o˘gc*qwʙ r%qyf{*f;m9F98ܛܫzmƙ rsxr92ʹUﴕ3܋3S2i[pqf{ f{᷽ڞ‰YN[yǙ rE*Cf9O򝶢39܋kYNI=j7=Sf{h `vew &9|9qppJ!]*).dXE \Y)閴lv/fDP3l| ۤ4II ذjvOޱ .j&㴖7zO[=> {d&гsy;|_l믣uuVG |f:o;LG ܣ32*CӹGg:Lٵsuљ@k ܣuf=:_׹f{W%h#u>{t&Яsϒ4w:=lܣ2>{ٯs;LO ܣu=*ӹG:HstY^{d&޹Gf}:L_^K& 3~}_-@OycpU#3j-b&3L673;tY2oLfw0[2.FVͯs{i`v#2{-@*:Gf=;2.SOq6@νL٧svd]^{T&pO{>3;ӛM^o6zĎ3m!?u^9WjダAOo>zĎn;כM^o6zĎn;כM^( C6  㧐Ubs ҏq|o5fa> ?;~ybJ(O#`G7 _d n Q?ʝr dҘP~m&_7h^h3J+`(%>ĘS-̗h-M snedMS_\W9|bWG(|&l.A3~>^$Sxݬ^!scn -m*0h%Of2l0Wh3!Gsf6=ffQi6 upsƦ(ɚ P4 KG '̉՜f6D3y3mNx`dU%[,l.f2!݌l+3nSW,nԱΘjNinCgsr},Y'pk̩՜6eNkϜ ,Q5sb/6O :sseqm .f}lk¬j':Y= Zs6q:K7ޟgPu٦9//2,idǚKy23 n9֍o 5f26uk*fi5K¼|6ۼ<]Ss}]+g7hsP?UXP̛}G%ڬyD2,8I?i3ei(XaYo3yޢgbWj^o9KٜLnYUQ'mb}3Qj/A+oI@u1/|恳K|Q<$[i͜Qfi5חH( KcI۰4ϩ-P{Ę/+eހj/Y\הw7/?OW͑>Z6j/AmCúʼJWͲHl7D1^,srqM뭆6Uڼ^j^ݕmn?>o3sbz&v\7wq7gz~p͇x;DaMoLoLoLoL<d+ytSxOV |y:8~#3T-ޗl\Hᄁ`܀ã ǐ}xX@%o#C|9DZN19T=zv6XAR|!e7`!^~3ec Gad\˕9ultzJe4gX</S3^3v/ZO1c̓YFV=%C WfL@w1g:_^5_gLl#g( SN?03|C4F P]XW;aN5f4F:i>ܧ^*Ciif1Oy6.l:%* )@'ra eOr9`iFAy- ":L@=Awm3\ـys m:;f/MQF'ҩ`0=y!K㚼֛ؗ}|ϟP339e S*!Ky3rʿcnZl9&=M wk|='ids;:%֟u['LqSS{Ip} ][/avDd">OwF߉#:iQ{ӯ϶2=gs<)*PbZ/)juKO˳Yx*zLʼ vp5fcz{_+PjMv'ZlR1Y.o/*>mːn#?J qabX#0X`9`2&{=yr4)g%#2fj.f;ny6ٻ\uV&Y ,@~JQIbk|JLVs\ E=xſ>5U%@$JT+/_VϲrH<;2$-qc6Yc+,$/A"(dIGt6Kl'x~i'MLh{#Da,eLe'9Ή ! ,:tNufdDY 9> q|gwK?K&j{={u?Gb9MQtDD7$k!NQlĮtbl^]oNG[ra(; mh$Z䕸ˈ<7?֭>K n*JWc5LaHUx 4QBAVEޒ^aŒ O!gL+(OlyKC׽4 6a#0~]@>lleaٹƙCé$#WV1ZQA\K}\9 {C0yt)͐a11{euݯ|EcQrJJģ k69.w-K ,yN 2kaS 6%zhZ Aӭ2?qכH \ p(5DnNϪ\dՓ1,.-k[.3Hh7~Ô]Z(e,[C;7 a&„jsNj%j1ۉzR=Goq # #t kźүV[ /6t3eD9,`on[]<&##EKNwr>('a93(ӈ>~ $-j,'s YI.|p.Kpfl~gWqfeswtzjA.)O`Su 'X\C 8txOܿ M=[\njO8Mi ݌u~N=b7aHxaRS6/ɕ ;D(鳒'LE~;4~V~y7,|p .r{={1|x5so"l1M$4?4ny;LQ ^SAWoti.3:XVϑ*i4]KN'PKsI-]M[;zNzc~EcD0ۍGv<ѽS{&׊' jyhA6ʲ9E<:(z:9#G5 VQ.rUzOJ9+69*}='o5B^:߬KV6RVN-'18]]_:ƆZc=n㌱ pld//p[- t~~+F:z~ &cixX6=CbN8->՘ jWkK-'ǛVޢ 'lm\_D|טoy sN хyꯚz3H_G6ww q7֟#}0 +CK|绒{zsÉz~BIz_Ms<}G/zL#J>3FM%=oq{ڸv]ƱX*=Ɠ;SQiaOF_d:b^:G7[Q?'ҩWҘE2doxn 2sxKlUp۸Ď[i Im#( -("$mEM0K^׎&B >P$(9p(Pk|a3TM[PQf=}ͼyg~xh4ðy(!zlmO{32Hg5mÝ( :Xa3Eע||e{>:V;|X z Un_ _c^Y ʧH:u+ƛ=hy8"aӿ׋!ox(1E;w!@^npm'{r~1*ă޸mwx|X8SS"u>k%<+U1G?!MͥŕMd+<:'+8<$1n8N$?.ʯ*#@F@ K(nШh!Ybw >pӒMqa^_oqai *XUÆϿZCTk߬fWe9(!D;`-j;\Ml^EQvjj+.VMjp0Wm«l%3*e iMr{~@DoM.@/j1,GlV ݪ\Y dn0-a&K²Dݮ!g!)n y&,}̙c<9(*,fYǍ)DxQT % E fղ{NHͥUl`?pXߘ=%3-143c3Tllhٌ^22и ] AkDl"DD,"*j0!"TdfЛ 0ۇl͕+/m-s)"`V*]w.X :D.v_z2%?(˛K9O`j"x[dAUwD7ymxÈc2| 9ʑQN#wuX*7l{zwqS`boʿp7?=NW,Rw;V*Ju؀Џ0N51Á )Ek>`-%owBr ?K4~/rkvϔ%+o[o]C`74 6z8ޞΠJ$*&3E'C"Gb[In/KMNM(!!%%#)Jmy S #Gz_=}]{3ms<S>Qjz$5_;?=\?B[D]e~fp)fd Y- ӰZfhu3+7kmC#Kosۉۙ~R jV`^ \Hj^   #'+8048>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0{23456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\]^_`abcdy|}~Root EntrydO)vNXf@PicturesCurrent User8SummaryInformation(1RPowerPoint Document(} DocumentSummaryInformation8[Equation Equation.DSMT40*MathType 5.0 Equation0#Tabelle Excel.Sheet.80.Microsoft Excel-Tabelle0%Tabelle Excel.Sheet.80.Microsoft Excel-Tabelle056Dokument Word.Document.80.Microsoft Word-Dokumentd078Dokument Word.Document.80.Microsoft Word-Dokument0=9Dokument Word.Document.80.Microsoft Word-Dokument 0A:Dokument Word.Document.80.Microsoft Word-Dokument0F;Dokument Word.Document.80.Microsoft Word-Dokument0i(Paint Shop Pro Image PaintShopPro0(Paint Shop Pro Image0j(Paint Shop Pro Image PaintShopPro0(Paint Shop Pro Image0k(Paint Shop Pro Image PaintShopPro0(Paint Shop Pro Image0l(Paint Shop Pro Image PaintShopPro0(Paint Shop Pro Image0m(Paint Shop Pro Image PaintShopPro0(Paint Shop Pro Image  SQL.psB.sql92syntax\sld001.htmlp#\http://cl1.fh-lueneburg.de:7776/db/sqlscripts/"SQLPLUS0hDiagramm Excel.Chart.800Microsoft Excel-Diagramm08Equation Equation.DSMT40*MathType 5.0 Equation0/ 0`DTimes New RomanXt\ )0tY 0DArialNew RomanXt\ )0tY 0" DSymbolew RomanXt\ )0tY 00DEuclid Math OneXt\ )0tY 0@DArial Special G2t\ )0tY 0"PDCourier Neul G2t\ )0tY 0`DCourier Newl G2t\ )0tY 01pDArial Unicode MSt\ )0tY 0"f . @n?" dd@  @@``_@,ZISCHEN.WAV.WAV 20103RIFFWAVEfmt ++data~~~~~~~~~~~~~~~~~~~~~~~~~~~|||~~~~~zvtvxz|~zvrnlrv||vtrpptz~|xvtv|~~zxvvvz|~xrlhntzzvrrpprrx~|j[QU_|bICCYn[ICY~zlnh]_r|]SUSSjz|x__l~v_]drnUb|nfd_]d]5=rrnj]jz~lMldrx[[_f|YQfWK_xh[zx[CIjzxxdSQz|_fI9WӹM;QnvK;OUx~xj]]YS~ɵlM?plM;CGpٵ[)Kh|% %;xtKQS]ɖbGr|lSnvz~nfS[nëx;Az=+AYݻ|=/1r_ ?|潄W5/Czãf)/pvbMQr|O=OtjdhjlG?G_ɊK3לdQCMppW;1SŷAMz/#?bx͖SAM[hvhYp~~zrvt[]ptWOUtxxd]v~vvxzd_xzh_nrSQltbdp~_lrQ_l][tf]W]~hWfp|fWhnhbU[hzlSCWbYbnxpdhjvjM9Ot]GQ[dpp~hhhdpx~xh]Yntnrp]dlvjQMb|vdjpzxzztljr||_[r~~jb_j|z|xpp~~v]Wh||zx|x|zzndhpxr]Yfntzjl|z||~vppnrzphrxz|~|xtrjjtv~~vz|z||xrrv~xrprtz|||vzxvx|xtx~~~~~~~zxxxx|zxz~~~rrz~|xz~~|vtx|zxz|~~~||zx|||~~zz|zz~~~~|~~||~~||zz|~||z~~~~zxzz|~~~~|~~~|~||~~~~~~~~~~~~~|||~~~~~~~~~~~~~||~~||~||~~~~|||~~~~||||~~~~~~||||~~~~~~~~~~~|~~~~|zz~~~~~~~||||~~||~~~~~|||~~~~~|||~|~|~~~~|z|~~~~~~~|||~~~~~~~~||~~~~~~~~   0  '   [Du I#!"$5&%'(*)+,n-.E.013A89#:+;6<24"597V=6AyCZ>? @BDEGHIJK LM#ON P-Q F1R+S TUVWYX1Zq[]^_ `abd/c\efg:     hijklmn o pqrsuv wxyz{|}~ "$Grd /&$(} 2$gi Qjh/\} 2$ߥANABV46r$rsv* "ۚiE"$x)u0uժv-< 9F2$Ot8D0y)q40P2$kLVOd,NfJIRBT2$|}k(;X2$wzZڔ?,GA\2$jt8;73>ab$k<в+Neb$p5/YVOb$ S4*r&B b$Ρ`Hhv||<b$K58}\SDw =2$5Oڞ]O-A9"$yV^E4SS c $0e0e    3 A@ AjJ  8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||p3ff@f8$ g4OdOd )0hppp@ <4BdBd 0$D W<4!d!d 0$Duʚ;2Nʚ;<4dddd 0g4dddd )0h<p p2*___PPT9 / 0h8?:-&Prof. Dr. RiebesehlO =bL0" Datenbanken Einleitung1! LiteraturEdwin Schicker: Datenbanken und SQL. Teubner 2002 preiswert, einfhrend, bercksichtigt MS-Access im Vergleich mit ORACLE Helmut Jarosch: Datenbankentwurf. Vieweg 2002 sehr detailliert wird Datenmodellierung behandelt Patrick O Neil, Elizabeth O Neil: Database. Principles, Programming, and Performance. Morgan Kaufmann 2001 Referenzbuch fr fast alle Fragen zu Datenbanken Kevin Loney, George Koch: Oracle 9i - The Complete Reference. Oracle Press 2002 neben der Referenz auch als Tutorial geeignet Cornelia Boenigk: PostgreSQL. dpunkt.verlag 2003 ist auch allgemeine Einfhrung in Datenbanken, Webanwendungen mit PHP 2H.2k1P.1Gf Hf 2"2f1  "  f    .   fF%T7$  M2#Literatur, tiefergehend/Theo Hrder, Erhard Rahm: Datenbanksysteme, Konzepte und Techniken der Implementierung. Springer 1999 sehr umfassend und vollstndig, keine Datenmodellierung Martin Schader: Objektorientierte Datenbanken. Springer 1997 Ramez Elmasri, S. B. Navathe: Grundlagen von Datenbanksystemen, Pearson Studium 2002f8<f8f f>*YDatenorganisationDatentrger DatenstrukturenDatenspeicherungAllgemeine Anforderungen geringer Speicherverbrauch Kosten minimieren einfaches Einfgen, ndern und Lschen von Daten Zeit minimieren schnelles Wiederfinden von Daten Zeit minimieren einfache Algorithmen Wartbarkeit, Zuverlssigkeit optimieren Diese Anforderungen widersprechen sich: 3 erfordert Hilfsinformationen, zu 1, 2 und 3 behindern sich gegenseitig 4 ergibt meist schwache Leistung bei 2 oder 3 112!34)(1!  )(  Datentrgersequentielle Datentrger Magnetbnder Streamer Bandkassetten direkt adressierbare Datentrger Disketten Magnetplatten beschreibare CD schreiben sequentiell, lesen direkt adressiert`$!(/$!(/ v 2  sequentielle Datentrger ... (1)$Vorzge relativ billig groe Kapazitt bei optimaler Speicherausnutzung bequem archivierbar einfache Verarbeitungsalgorithmen Nachteile Datenstze nur sequentiell durchsuchbar Lschungen von einzelnen Stzen nahezu unmglich lange Zugriffszeiten Einsatzgebiete Archivierung Sicherung Logfilestv n v n  v  sequentielle Datentrger ... (2)*Beispiele, Kenndaten Magnetbnder Streamer& (direkt adressierbare Datentrger ... (1),Vorteile kurze Zugriffszeiten auf beliebige Stze Lschen und Wiedereinfgen problemlos beliebige Datenorganisation mglich notfalls auch sequentiell benutzbar Nachteile hhere Kosten kleinere Kapazitt Speicheroverhead durch Dateiorganisation Einsatzgebiete alle Daten im hufigen wahlfreien Zugrifft  J* J* Q (direkt adressierbare Datentrger ... (2)0Beispiele, Kenndaten Festplatten beschreibare CD&! SpeicherungsverfahrenDirektadressierung Listen geordnet sequentiell geordnet auf adressierbarem Speicher geordnet verkettet Bume (z.B. binr) Index-sequentiell Hashing6M-M-DirektadressierungLsetzt adressierbaren Datentrger voraus setzt feste Satzlnge voraus Adresse errechnet sich aus Schlsselwert: Adresse(Satz) := Startoffset + Satzlnge Schlssel Zugriffszeiten: alle Operationen: O(1) nur bei nahezu vollstndigem Vorhandensein aller Schlssel aus dem Wertebereich sinnvollzo6Yo) Y  Direktadressierung ...  Listen, geordnet sequentiellDatenstze enthalten Schlssel variable Satzlnge Stze sortiert nach Schlssel, aber sequentiell Schlsselraum nicht ausgeschpft Zugriffszeiten fr Satz suchen: O(L/2) erheblicher Aufwand fr Lschen und Einfgen (L ist die Gesamtlnge der Daten)| -%f}-$ ,Listen, geordnet auf adressierbarem SpeicherNDatenstze enthalten Schlssel feste Satzlnge Stze sortiert nach Schlssel Schlsselraum nicht ausgeschpft Zugriffszeiten: Satz suchen oder ndern ber binre Suche O(log n) Satz einfgen oder lschen O(n/2) hoher Zusatzaufwand fr Einfgen oder Lschen (n ist die Anzahl Datenstze)*  .f[ f . Listen, BinrsucheSuchschlssel: 42 nacheinander vergleichen mit Satz Nr. 23/2 = 11, 11/2 = 5, 5+ (11-5)/2 = 8, 5+ (8-5)/2 = 6: x8@ Listen, geordnet verkettet:Datenstze enthalten Schlssel feste Satzlnge (mit besonderem Aufwand auf variabel mglich) Stze auf Datentrger unsortiert Schlsselraum nicht ausgeschpft Zugriffszeiten fr Satz suchen: O(n/2) kaum Zusatzaufwand fr Einfgen oder Lschen (n ist die Gesamtlnge der Daten)  -%f - fB-#Listen, geordnet verkettet BumeStze mit Schlsseln Trennung von Daten und Zugriffsinformationen Speicherung der Daten nach irgend einem Verfahren mit direkter Adressierung Zugriffszeiten: Satz suchen oder ndern ber binre Suche O(log n) Satz einfgen oder lschen ... wie beim zugrundeliegenden Verfahren bei Einfgen oder Lschen mssen auch Verwaltungsinformationen angepat werden (n ist die Anzahl Datenstze) * ,O f )O    Bume ... Index-sequentielle Speicherung^fr Datentrger mit Blockstruktur Blcke direkt adressierbar Datenstze mit Schlssel, sortiert variable oder feste Satzlnge Zugriffszeiten: O(L/B), gemessen in Plattenzugriffen bei Einfgen und Lschen noch Zusatzaufwand fr Anpassung der Verwaltungsdaten (L=Gre aller Daten, B = Blockgre) Z)Q'z%"Index-sequentielle Speicherung ...  )Index-sequentielle Speicherung ... (Bsp.)$Annahmen: Blockgre 2048 Byte Satzgre 116 Byte, Schlssellnge 20 Byte Blockinhalte Datenblock: 17 Stze maximal, bei 75% Fllungsgrad 13 Stze Indexblock: 85 Eintrge zu 24 Byte ( = 20 + 4 fr Adresse) Datenvolumen 1 Indexstufe: 128 kB Daten, 2 kB Index 2 Indexstufen: 10 MB Daten, 172 kB Index 3 Indexstufen: 926 MB Daten, 15 MB Index 4 Indexstufen: 78 GB Daten, 1.2 GB Index 5 Indexstufen: 6.7 TB Daten, 105 GB Index, 6 Plattenzugriffe @ w  @ w  > (HashingStze mit Schlsseln Schlsselraum nur schwach besetzt Adresse wird aus Schlssel errechnet feste Satzlnge (mit Mehraufwand auch variable mglich) Zugriffszeiten fr alle Operationen: O(1) Zusatzaufwand beim Lschen Adresskollisionen erfordern Sonderbehandlung nur effektiv bei geplanter Unterausnutzung des Datentrgersp8i\f '!i"Hashing ... (Bsp.)$CHashfunktion: 17s+23 mod 50 mittlere Anzahl Zugriffe: 1.7$  +$ bersicht&SekundrschlsselLPrimrschlssel identifizieren Datenstze Sekundrschlssel identifizieren Datenstze nicht Sekundrschlssel dienen als alternatives Suchkriterium Zugriffe ber Sekundrschlssel sind ohne weitere Hilfen ineffektiv (wie ungeordnete, sequentielle Liste) mit Hilfen hnlich effektiv wie ber Primrschlssel Zugriffshilfen heien invertierte Dateien invertierte Dateien knnen im Prinzip beliebig organisiert sein Indexstrukturen sind besonders vorteilhaft sie enthalten Paare [Sekundrschlssel, Primrschlssel] Achtung: i.A. mehrere Primrschlssel zu jedem Sekundrschlssel vorhanden \8%z*\8%zf   fE 'Einstieg DatenbankenMotivation Anforderungen( Dateiverarbeitung, konventionell)Datenverarbeitung, Variante*Datenverarbeitung, komplex+Datenverarbeitung, Mehrbenutzer,Dateiverarbeitung, Datenbank-Datenbank: DefinitionEine Datenbank ist eine Sammlung von Daten, die untereinander in einer logischen Beziehung stehen und von einem eigenen Datenbankverwaltungssystem (Data Base Management System) DBMS verwaltet werden.zfff ff.Datenbank: Anforderungen@Sammlung logisch verbundener Daten Speicherung der Daten mit mglichst wenig Redundanz Abfragemglichkeiten und nderungen  ad hoc Logische Unabhngigkeit der Daten Physische Unabhngigkeit der Daten Zugriffsschutz Integritt Mehrfachzugriff Zuverlssigkeit, Ausfallsicherheit, Kontrolle=)Datenbank: Anforderungen (2)... es ergeben sich als Konsequenz weitere Anforderungen: Datenkatalog (data dictionary) Namen, Typen, Gren von Datenelementen Beziehungen mit deren Namen ... Integrittsbedingungen Berechtigungen, Benutzer Statistiken (ber Zugriffe etc.) Transaktionskonzept Recovery Authorisierung Hilfsdienste Datenimport/-export berwachung (Monitoring) statistische Analyse (Performance, Nutzung, Durchsatz):9d99c    bM  9/ Datenbank: Architektur>*Datenbank: Architektur (2)?+Datenbank: Architektur (3)A.DatenmodellierungEntity-Relationship-Modell$ @,Architektur: Sichten, Sprachen3$DatenbankmodelleC1. Beschreibung der Daten und ihrer Beziehungen (graphische) Modellierungssprache, z.B. UML 2. Spezielle Konzepte, die zur Modellierung verwendet werden hierarchisches Datenbankmodell netzwerkartiges Datenbankmodell relationales Datenbankmodell objektorientiertes Datenbankmodell andere, z.B. Logikmodell, Fuzzy-DatenbankenP0,=0,=4%hierarchisches DatenbankmodelloBaumartige Zugriffsstruktur, Segmente keine Redundanz, sehr kurze Zugriffszeiten Inflexibel, komplexe Programme5&netzwerkartiges Datenbankmodell\Durch Zeiger verkettete Struktur geringe Redundanz, kurze Zugriffszeiten komplexe Navigation7'relationales Datenbankmodell~Daten und Beziehungen in Tabellen Redundanz unvermeidlich, Abfragen intern komplex leicht programmierbar, nderbar, verwaltbar<("objektorientiertes Datenbankmodellbesteht aus Objekten, gegliedert in Klassen, mit Vererbung keine Einschrnkungen in der Modellierung Programmierung objektorientiert erhhte Komplexitt bei Verwaltung und Programmierung erfordert hohe RechnerleistungB-konzeptionelles Datenmodellnach dem Entity-Relationship-Modell Objekte (Entitt) Objekttyp (Entittstyp) Eigenschaft (Attribut) Eigenschaftswert (Attributwert) Beziehung (Relation) Beziehungstyp (Relationstyp) >%%,  E1Datenmodell, DefinitionenEin Objekt ist ein Exemplar (von Personen, Gegenstnden, nichtmateriellen Dingen), ber das Informationen gespeichert werden. Ein Objekttyp ist eine durch einen Objekttypnamen eindeutig benannte Klasse von Objekten, ber die dieselben Informationen gespeichert werden und die in prinzipiell gleicher Weise verarbeitet werden. Eine Eigenschaft ist die Benennung fr ein relevantes Merkmal aller Objekte, die in einem Objekttyp zusammengefasst werden. Ein Eigenschaftswert ist eine spezielle Ausprgung, die eine Eigenschaft fr ein konkretes Objekt annimmt. Eine Eigenschaft ist eine identifizierende Eigenschaft, wenn sie die Identifizierung eines Objekts innerhalb eines Objekttyps herbeifhrt. Trgt sie zur Identifizierung bei, heit sie teil-identifizierend. Alle anderen heien beschreibend.f70 f fpfqfff fF2ER-Modell, graphisch5Objekttyp durch zweigeteilten Kasten darstellen Kopfteil enthlt Objekttypnamen im Singular unterer Teil enthlt Benennungen von Eigenschaften im Singular (teil-)identifizierende Eigenschaften werden unterstrichen die Reihenfolge der Eigenschaften ist beliebig, aber identifizierende sollten zu Anfang stehen.6 f8f f% f fff_G3Datenmodell, Definitionen (2)uEine Beziehung kennzeichnet den konkreten Zusammenhang zwischen zwei realen Objekten Ein (dualer) Beziehungstyp beschreibt den typmigen sachlogischen Zusammenhang, der zwischen den Objekten zweier Objekttypen besteht. Jede Beziehungstyp-Richtung wird beschrieben durch: eine Benennung, die die Semantik des Zusammenhangs ausdrckt (Verb) die Optionalitt die Kardinalittf fT ff f0f f f,X  C/ ER-Modell, duale BeziehungstypenH4Datenmodell, Definitionen (3)Ein schwacher Objekttyp ist ein Objekttyp, dessen Eigenschaften es nicht erlauben, jedes Objekt dieses Typs zu identifizieren. Ein Beziehungstyp ist rekursiv, wenn er einen Zusammenhang zwischen Objekten desselben Objekttyps beschreibt. Ein Koppel-Objekttyp ist eine Menge von sachlogischen Verbindungen von Objekten, ber die dieselben Informationen gespeichert werden. Sollen ber die Verbindung zweier Objekte weitere Angaben gespeichert werden (Beziehungs-Eigenschaften), so wird der Beziehungstyp in einen Objekttyp umgewandelt. Wenn es sinnvoll erscheint, einer Eigenschaft weitere Untereigenschaften zuzuordnen, so wird die Eigenschaft in einen Objekttyp umgewandelt.f~fTffsfED0ER-Modell, SonderflleOschwacher Objekttyp rekursive Beziehung Koppelobjekt Beziehungsattribut I5Datenmodell, Definitionen (4)Ein Objekttyp kann identifiziert werden durch eine einzige Eigenschaft eine Kombination von Eigenschaften eine zustzliche  knstliche Eigenschaft eine Beziehungstyp-Richtung eine Kombination von Beziehungstyp-Richtungen eine Kombination von Eigenschaften und Beziehungstyp-Richtungen Eine minimale identifizierende Kombination von Eigenschaften/Richtungen heit Schlssel des Objekttyps. Ein Schlssel heit zusammengesetzt, wenn er aus mehr als einer Eigenschaft/Richtung besteht. Ein Teilschlssel ist eine echte Teilmenge einer identifizierenden Kombination von Eigenschaften/Richtungen. .5 ffA f%ff# f fCJ6Beispiel ER-ModellVBGeneralisierungK7Normalisierung L8 1. NormalformEine Eigenschaft heit mehrwertig, wenn sie zur gleichen Zeit mehrere Werte aus dem Wertebereich annimmt. Ein Objekttyp ist in 1. Normalform (1NF), wenn er keine mehrwertigen Eigenschaften hat. Es gibt auch Datenbankmodelle, in denen mehrwertige Eigenschaften erlaubt sind: NF2-Modell  non-first-normal-form-modell Im NF2-Modell knnen mehrwertige Eigenschaften sogar geschachtelt werden.  K f^ ff ffE5MM91. NormalisierungsschrittN:Funktionale Abhngigkeiten:Seien A und B zwei Eigenschaften eines Objekttyps. B heit von A funktional abhngig, wenn sich fr jedes Objekt des Objekttyps der Wert von B zwingend aus dem Wert von A erschlieen lt. In dieser Definition kann statt einer Eigenschaft A auch eine Kombination von Eigenschaften oder Beziehungstyp-Richtungen . (A1, A2, ..., An) stehen. 6Af f#   NO;Funktionale Abhngigkeiten (2)redundante Speicherung von (Name, Vorname) und (Projektleiter) nderungsproblem Lschungsproblem Einfgeproblem Ursache: Abhngigkeit von Teilschlsseln&pf"P< 2. NormalformEin Datenmodell ist in der zweiten Normalform (2NF), wenn es sich in der 1. Normalform befindet und jede beschreibende Eigenschaft eines Objekttyps vom Schlssel des Objekttyps, aber nicht schon von einem Teilschlssel funktional abhngig ist. Verletzungen der 2NF knnen nur bei Objekttypen auftreten, die einen zusammengesetzten Schlssel haben. (Beziehungstyp-Richtungen knnen auch Teile des Schlssels sein!)f+Wf+f#f"fBQ=2. NormalisierungsschrittS?Funktionale Abhngigkeiten (3){redundante Speicherung von (Hausmeister) nderungsproblem Lschungsproblem Einfgeproblem Ursache: Kette von Abhngigkeiten&|ZfR> 3. NormalformlEine Eigenschaft B heit von einer Eigenschaftskombination (A1, A2, ..., An) transitiv abhngig, wenn es eine weitere Eigenschaft C gibt mit funktionalen Abhngigkeiten (A1, A2, ..., An) C B. Ein Datenmodell heit in 3. Normalform (3NF), wenn sie in 2NF ist und wenn es keine beschreibende Eigenschaft gibt, die vom Schlssel ihres Objekttyps transitiv abhngig ist. Alternativformulierung: es gibt keine funktionalen Abhngigkeiten zwischen beschreibenden Eigenschaften. Achtung: die Formulierungen sind nicht quivalent, wenn es alternative Schlssel gibt.8nWn=fP ffDfj!1T@3. NormalisierungsschrittUAWeitere NormalformenBoyce-Codd-Normalform: Alle Abhngigkeiten gehen von kompletten Schlsselkandidaten aus. 4. Normalform: Alle mehrwertigen Abhngigkeiten gehen von kompletten Schlsseln aus. 5. Normalform (Projection-Join-Normalform) Denormalisierung: bewut in Kauf genommene Verletzung einer Normalform transitive Abhngigkeit abhngige Eigenschaft ndert sich selten Zugriff auf Eigenschaft ist erleichtert Modellierung eines kaum gebrauchten Objekttyps entflltGZZfD fH ff7Z WCBCNFvObjekttyp ist in 3NF Abhngigkeit Lieferant Bauteil widerspricht BCNF nderungs-, Einfge- und Lschproblematik tritt auf! Es gibt (Projekt, Lieferant) als zweiten Schlsselkandidaten ^"fOf!XD4NF YEDatenbankmodelleRelationales DatenbankmodellZFRelationales DatenmodelltEigenschaften Domnen = Wertebereiche Attribut A Dom[A] = {a1, a2, a3, ...} Objekttyp Kreuzprodukt von Domnen Entittstyp E(A1, A2, ... , An) Dom[A1] Dom[A2] ... Dom[An] Eine Teilmenge R Dom[A1] Dom[A2] ... Dom[An] heit (n-stellige) Relation ber den Wertebereichen der Attribute A1, A2, ... , An. Dabei heit n der Grad der Relation. R beschreibt die Menge der Objekte vom Objekttyp E, die gespeichert werden sollen.((%Dn& f% ff fffff  f C 'Sf\GRelationales Datenmodell (2)Relationen lassen sich als Tabellen darstellen: E A1 A2 ... An a11 a12 a1n a21 a22 ... a2n ... ... ... ... am1 am2 ... amn Aus der Mengeneigenschaft folgt: Die Reihenfolge der Tupel ist nicht definiert Es kann keine zwei identischen Tupel geben. 1[n{nn0            % f'f f>63]HRelationales Datenmodell (3)Die Relation R ist ber die Zeit hinweg variabel es knnen Objekte hinzugefgt, entfernt oder gendert werden. Auf die Elemente der Relation (= die Objekte) wird ber Schlssel zugegriffen. Notfalls ist die Gesamtheit der Attribute der Schlssel man unterscheidet: Primrschlssel und Alternativschlssel Beziehungen zwischen Objekttypen werden ber Fremdschlssel realisiert: Fremdschlssel sind (Primr-)schlssel eines anderen Objekttyps, die in die Relation zustzlich aufgenommen werden.sHtffx fKff-f t M_J"Beziehungen im relationalen Modell ^IIntegrittsbedingungenPrimrschlsselbedingung: Ein Primrschlssel-Attribut (bzw. -Attribut-kombination) muss stets einen Wert aus dem Wertebereich des Attributs haben. Dieser darf auerdem nur einmal in der Relation vorkommen. (Verbot von Null-Werten) Fremdschlsselbedingung: Ein Fremdschlssel-Attribut (bzw. -kombination) hat entweder den Wert Null, oder einen Wert, der als Primrschlssel in der referenzierten Tabelle tatschlich vorkommt.f fF^>G  N`K&Beziehungen im relationalen Modell (2)Ist im Prinzip berflssig. *) B bernimmt Schlssel von A als  not null und  unique Fremdschlssel oder A nimmt Schlssel von B als  unique Fremdschlssel auf. B nimmt Schlssel von A als  unique Fremdschlssel auf. B bernimmt Schlssel von A als Fremdschlssel B bernimmt Schlssel von A als  not null Fremdschlssel nicht realisierbar! (links stehen zwei Alternativen) B bernimmt Schlssel von A als Teil des Primrschlssels *) B erklrt seinen Schlssel als  not null und  unique Fremdschlssel, der den Schlssel von A referenziert - und A macht dasgleiche umgekehrt.0020x2/02:02502:020Z2ffGff!f:ftO33 *   aL%M:N-Beziehungen relational modelliert pUKoppelrelationen (2) bMDatenbanksprachen#relationale Zugriffsoperationen SQLcNZugriffsoperationensatzweiser Zugriff ber Primrschlssel wie Dateizugriff sequentielle Verarbeitung Mengenoperationen Relationen sind Mengen , , \ = Durchschnitt, Vereinigung, Differenz Ergebnis sind vollstndige neue Relationen vom gleichen Typ Teilmenge und/oder Untertyp Selektion nach Auswahlkriterien Projektion auf Untermenge der Attribute Join@H@kH$ @dO Selection MPersNr Name Abteilung Gehalt Position 100000 Schmidtbauer VORST 320000 Vorst.Ass. 100100 Kuhn VORST 100200 Holzmann CON 75000 Trainee 100300 Sulzing CON 120000 Sachbearb. 100400 Berlisch CON 115000 Sachbearb. 100500 Dingwort EDV 95000 Assistent 100600 Petterson EDV 150000 Assistent 100700 Grtze EDV 180000 Abt.Leiter$N(f&l    / =fP ProjektionMPersNr Name Abteilung Gehalt Position 100000 Schmidtbauer VORST 320000 Vorst.Ass. 100100 Kuhn VORST 100200 Holzmann CON 75000 Trainee 100300 Sulzing CON 120000 Sachbearb. 100400 Berlisch CON 115000 Sachbearb. 100500 Dingwort EDV 95000 Assistent 100600 Petterson EDV 150000 Assistent 100700 Grtze EDV 180000 Abt.Leiter$N(f&l    / =gQProjektion + SelektionMPersNr Name Abteilung Gehalt Position 100000 Schmidtbauer VORST 320000 Vorst.Ass. 100100 Kuhn VORST 100200 Holzmann CON 75000 Trainee 100300 Sulzing CON 120000 Sachbearb. 100400 Berlisch CON 115000 Sachbearb. 100500 Dingwort EDV 95000 Assistent 100600 Petterson EDV 150000 Assistent 100700 Grtze EDV 180000 Abt.Leiter$N(f&l    / =hRJoinoTNormalformen revisited nNormalisierung wird erreicht durch Zerlegen einer Tabelle in zwei (oder mehr) Tabellen Die Originaltabelle kann durch Join der Teiltabellen wiedergewonnen werden Bedingungen: 1. Alle funktionalen Abhngigkeiten finden sich in den Teiltabellen wieder 2. Es entstehen keine zustzlichen Stze beim Join der Teiltabellen ( lossless join ) Normalisierung bis 3NF erfllt die Bedingungen Normalisierung nach BCNF verletzt u.U. die 1. Bedingung h#fKf( fflff-f!>v knSPJNF revisited qVSQLDDL DMLrW Geschichte1974 Vorlufer ist SEQUEL = structured english query language, von IBM, fr System R 1983 1. Version von DB2 mit SQL 1986 ANSI-Standard SQL-86 1992 SQL-92 (auch SQL-2) - Tabellen knnen nachtrglich gendert werden - Integrittsbedingungen knnen formuliert werden - Domnen knnen definiert werden - Mengenoperationen 1992 (Mai) SQL-3 (nie fertiggeworden) 1999 SQL:1999 setzt SQL-3 fort, Objektorientierung`f5 ffff  ff*#usX SQL SyntaxKurzes Tutorial: Syntax-Diagramme in BNF mit Erluterungen Syntaxdiagramme: Verlinkte Diagramme der wesentlichen Teile von SQL-21) SQLPLUS Anweisungen zum Formatieren von Abfrageergebnissen und zur Reportgenerierung 0RZ` *?P 0 0 0 0A 0AR 0R 0 0 0 0yCREATE (einfach)xcreate table Mitarbeiter (Name varchar2(30) not null, Abteilung char(5), Gehalt number(7), Position varchar2(20))y ff f ff6 7z CREATE ...create table Mitarbeiter (PersNr number(6) not null, Name varchar2(30) not null, Abteilung char(5), Gehalt number(7), Position varchar2(20), primary key (PersNr), foreign key (Abteilung) references Abteilung(Abtnr)) fff f fff f ff{ CREATE ...create table Mitarbeiter (PersNr number(6) not null, Name varchar2(30) not null, Abteilung char(5), Gehalt number(7), Position varchar2(20), primary key (PersNr), check(Gehalt<200000 or Abteilung= VORST ))0 fff f fff ff  ff  8 | CREATE ...4create index Abt_index on Mitarbeiter (Abteilung) 5 f f f@ } CREATE ...>create sequence Personal start with 100000 increment by 100Z? f fffH ~INSERTinsert into Mitarbeiter values ( Personal.nextval,  Schmidtbauer ,  VORST  , 320000,  Vorst.Ass. )  f f fff f    INSERT ...insert into Mitarbeiter (Name, PersNr) values (  Kuhn , Personal.nextval) S fff ffZ SELECTselect * from Mitarbeiter. ff$  SELECT ...(select Abteilung, Name from MitarbeiterZ) ff ff$  SELECT ...!select Abteilung from MitarbeiterP" ff ff$   SELECT ...*select distinct Abteilung from MitarbeiterP+ ff ff$   SELECT ...select Name, Gehalt/12  mtl. Gehalt from Mitarbeiter where Gehalt < 120000Lf f f ffffH   SELECT ...select Name, Gehalt/12  mtl. Gehalt from Mitarbeiter where Gehalt between 80000 and 120000\f f f fffffl   SELECT ...select Name, Gehalt/12  mtl. Gehalt from Mitarbeiter where Gehalt between 80000 and 120000 and Abteilung =  EDV Rrf f f ffff ff~   SELECT ...XPersNr Name Abteilung Gehalt Position 100000 Schmidtbauer VORST 320000 Vorst.Ass. 100700 Grtze EDV 180000 Abt.Leiter 100600 Petterson EDV 150000 Assistent 100300 Sulzing CON 120000 Sachbearb. 100400 Berlisch CON 115000 Sachbearb. 100500 Dingwort EDV 95000 Assistent 100200 Holzmann CON 75000 Trainee 100100 Kuhn VORST$Y)f0  /    (JoinNAbteilung Kurz Leiter Beschreibung EDV 100700 EDV CON 100900 ControllingOOf,1  Outer-Join$ Gruppenfunktionenzselect sum(Gehalt)  Personalkosten from Mitarbeiter \> ff f . Gruppenwechselselect Abteilung, sum(Gehalt)  Personalkosten from Mitarbeiter group by Abteilung W f ff f fH   Gruppenwechsel ...select Abteilung, sum(Gehalt)  Personalkosten from Mitarbeiter group by Abteilung having sum(Gehalt) < 300000 sff f f ffZ   Count-Funktion select count(*) from Mitarbeiter 8 select count(Abteilung) from Mitarbeiter 8 select count(distinct Abteilung) from Mitarbeiter 3 select count(Gehalt) from Mitarbeiter 7 ~ ff f ff f ff f ff        Unterabfragenselect Name from Mitarbeiter where Gehalt = (select max(Gehalt) from Mitarbeiter) Schmidtbauerkf ffff f f~    Unterabfragen ...select Name from Mitarbeiter m where not exists (select * from Abteilung where Kurz = m.Abteilung) Schmidtbauer Kuhnf ff$ ff fff  korrelierte Unterabfragen select Name, Abteilung from Mitarbeiter a where Gehalt = (select max(Gehalt) from Mitarbeiter b where a.Abteilung = b.Abteilung) Name Abteilung Schmidtbauer VORST Grtze EDV Sulzing CONf f fffff ff f fLff  5 tYSQL Syntax (2)RAliasnamen Select expression [as] aliasname ... Outer Join ... from tab1 natural join tab2       !"#$%&'()*+,-./0123456using (col1, col2, ...) ... ... from tab1 join tab2 on bedingung ... ... from tab1 {left | right | full} outer join tab2 ... Subselect ... where {exists | unique } (unordered select) ... Case-Struktur ... case when bed1 then wert1 ... case wert when bed2 then wert2 ... when wert1 then wert2 else wert when wert3 then wert4 end ... ... %  43 f f f ffffff*f f  ffffffff-ff$f6N         ,\ 0  0 0 00: 0:; 0;? 0?D 0DQ 0QV 0V[ 0[` 0`w 0w{ 0{ 0 0 0 0 0 0 0 0SuZSQL Syntax (3)NMengenoperationen Select ... from (table tab1 {union | intersect | except} table tab2) ... Bedingungen mit Listen ... where (exp1, exp2, exp3) = (exp4, exp5, exp6) ... ... where (exp1, exp2, exp3) < (exp4, exp5, exp6) ... Domnen Create domain name typ [check bedingung]hjm)fff?f   f   f   f   f   f   f * N25 }bBeispiele zu SQLXBibliotheksbeispiel 1. Gesucht: Die Rckgabedaten aller Bcher, die eine Person namens  Meyer ausgeliehen hat. 2. Gesucht: Eine Liste aller Reservierungen mit Namen, der reservierenden Person, Reservierungsdatum und der ISBN des reservierten Buches, fr die keine andere zeitlich vorrangige Reservierung vorliegt. 3. Gesucht: Eine Liste aller berflligen Bcher, fr die eine Reservierung vorliegt. Die Liste soll die Signatur des Buches, den Namen des Ausleihers und den Namen des (zeitlich) ersten Reservierenden enthalten. 4. Gesucht: Fr alle 1989 erschienenen Bcher die minimale, maximale und durchschnittliche Zahl von Ausleihen im Zeitraum von Oktober bis Dezember 2002. fffRff f f~cBeispiele zu SQL (2)5. Gesucht: Die gleiche Anfrage wie eben, aber fr jedes Rckgabedatum einzeln, in einer Tabelle. 6. Gesucht: Jene Bcher, fr die es im November 2002 mehr als doppelt so viele Reservierungen gab, wie fr alle Bcher im Durchschnitt, und die nur einmal vorhanden sind. 7. Gesucht: Eine Liste aller Bcher mit Titel und ISBN, die mehrfach vorhanden sind. Skripten zum Erstellen des Beispiels, zum Fllen mit Daten und mit Vorschlgen fr Anfragen zu 1. bis 7. finden sich in diesem Verzeichnis zum Download.jf fY f f# 0hTrigger'Sind fast von allen Herstellern implementiert Sind erst Bestandteil von SQL-3 CREATE TRIGGER triggername { BEFORE | AFTER } { INSERT | DELETE | UPDATE [ OF column1, ... ] } ON tabelle [ REFERENCING OLD AS altezeile NEW AS neuezeile ] [ WHEN bedingung ] sql-Anweisung [ FOR EACH ROW ]NOf3fff ff ff fft^ J  i Trigger (2) CREATE TRIGGER gehalt_upd BEFORE UPDATE OF gehalt ON Angestellte REFERENCING OLD AS old NEW AS new WHEN :new.Gehalt > 1.2 * :old.Gehalt AND :old.Abteilung <>  VORST INSERT INTO controller_tab_1 VALUES (:old.Name, :old.Abteilung, :old.Gehalt, :new.Gehalt) FOR EACH ROWf ff fff"f ff9 f-G 4v[Eingebettetes SQL, Beispiel C++uSQL-Befehle sind eingebettet Prcompiler: setzt um in Bibliotheksaufrufe, belt SQL als Kommentar im Programmtext.&+K+K Nw\#Eingebettetes SQL, ProgrammstrukturuVariablendeklaration EXEC SQL BEGIN DECLARE SECTION; char Name[21]; int Gehalt; int Personnr; EXEC SQL END DECLARE SECTION; Fehlerbehandlung vereinbaren EXEC SQL WHENEVER SQLERROR GOTO Marke1; EXEC SQL WHENEVER NOT FOUND GOTO Marke2; Verbindung zum Server EXEC SQL CONNECT TO servername; (Details wie UserID- und Passwortbergabe hngen von der Systemumgebung ab.) kSofkfQf Mb7   ;x]'Eingebettetes SQL, Programmstruktur ...HSQL-Befehl EXEC SQL SELECT Name, Gehalt FROM Angestellter INTO :Name, :Gehalt WHERE Personnr = :Personnr; Fehlerbehandlung if strcmp(SQLSTATE,  02000 ) cout <<  Personnr  << Personnr <<  ist nicht vorhanden ; else cout <<  SQL-Fehler, Fehlercode:  << SQLSTATE; z g fffZ    3y^ SQL-CursorOVerarbeitung von Tabellen satzweise Cursor-Deklaration EXEC SQL DECLARE c_ang CURSOR FOR SELECT Personnr, Gehalt ... FOR UPDATE OF Gehalt; Cursor ffnen EXEC SQL OPEN c_ang; Stze verarbeiten (in einer Schleife) EXEC SQL FETCH FROM c_ang INTO :Personnr, :Gehalt INDICATOR :i_gehalt; if (i_gehalt = = 0) continue; 7_&p7f^f&fp   )E?z_SQL-Cursor (2)Stze verndern (in derselben Schleife) EXEC SQL UPDATE Angestellter SET Gehalt = Gehalt + :Zuschlag WHERE CURRENT OF c_ang; Endekriterium fr Schleife until (strcmp (SQLSTATE,  02000 )= = 0) Cursor schlieen EXEC SQL CLOSE c_ang;(e)(fef)f  b  >gSQL-Cursor (3)DECLARE cursorname [SCROLL] CURSOR FOR SELECT ... [ ORDER BY ... ] FOR UPDATE OF column1, ... FETCH [{ NEXT | PRIOR | FIRST | LAST } | { ABSOLUTE | RELATIVE } wert ] FROM cursorname INTO :variable, ...f ffEf ff, {`Eingebettetes SQL (2)Cursorverarbeitung ist oft vermeidbar Hauptzweck ist es, die Lcke zu schlieen, die durch mangelnde Array-Verarbeitung in Programmiersprachen entsteht. Deklaration eines Cursors setzt automatisch Sperren Mismatch Datentypen SQL und Programmsprache insbesondere fr Datumstypen, LONG etc. Spezielle Behandlung von VARCHAR in der DECLARE SECTION ist erlaubt: VARCHAR name[40]; Umsetzung in Array + Lngenfeld WHENEVER-Fehlerbehandlung benutzt lexical scoping6&t`(!$ #&fX,f, ff!'   f #f6 G|a Dynamic SQL4Execute Immediate: EXEC SQL EXECUTE IMMEDIATE :sql_command; Auswertung und Compilierung der Anweisung erfolgt erst zur Laufzeit. grtmgliche Flexibilitt Prepare, Execute Using: sql_command  delete from angestellte where personnr = ? EXEC SQL PREPARE delcommand FROM sql_command; ... EXEC SQL EXECUTE delcommand USING :personnr; Compilierung der Anweisung kann vor dem Linken stattfinden.)y<)f` ff;(b    >dBeispiel Oracle SQLEXEC SQL BEGIN DECLARE SECTION; VARCHAR username[20]; VARCHAR password[20]; int emp_number; float commission; EXEC SQL END DECLARE SECTION; EXEC SQL INCLUDE sqlca; void sqlerror(); main() { strcpy(username.arr, "SCOTT"); username.len = strlen(username.arr); strcpy(password.arr, "TIGER"); password.len = strlen(password.arr); EXEC SQL WHENEVER SQLERROR DO sqlerror(); EXEC SQL CONNECT :username IDENTIFIED BY :password; Zf_f&     0  !  fBeispiel Oracle SQL scanf("%d", &emp_number); EXEC SQL WHENEVER NOT FOUND GOTO notfound; EXEC SQL SELECT COMM INTO :commission FROM EMP WHERE EMPNO = :emp_number; printf("%-8s \n", commission); notfound: printf("Not a valid employee number - try again. \n"); EXEC SQL COMMIT WORK RELEASE; exit(0); } void sqlerror() { EXEC SQL WHENEVER SQLERROR CONTINUE; printf("ORACLE error detected. \n"); EXEC SQL ROLLBACK RELEASE; exit(1); } fpf!&f'f D$   ) , %eBeispiel mySQL $db = mysql_connect("127.0.0.1","root"); mysql_select_db("flohmarkt",$db); $result = mysql_query("SELECT * FROM eintraege",$db); while ($myrow = mysql_fetch_row($result)) { printf( Laufende Nummer: %s \n , $myrow[0]); printf( Vorname: %s \n , $myrow[1]); printf( Name: %s \n , $myrow[2]); }hAf3f ff ff fff) f% f% f    j Beispiel JDBCimport java.sql.*; class Employee {public static void main (String args[]) throws SQLException {DriverManager.registerDriver( new oracle.jdbc.driver.OracleDriver()); Connection conn = DriverManager.getConnection ("jdbc:oracle:oci7:@","scott","tiger"); Statement stmt = conn.createStatement (); ResultSet rset = stmt.executeQuery ("select NAME from ANGESTELLTER"); while (rset.next ()) System.out.println (rset.getString (1)); } } 0f? fHff:ff ff0 f f@        kJDBC-API Klassen und Interfaces lJDBC-APIInterface Driver wird vom Datenbankhersteller implementiert DriverManager ist in java.sql.package vorhanden wird versorgt mit der URL des JDBC-Drivers stellt die Verbindung her Connection Objekt stellt Statement Objekt bereit Statement Objekt stellt ResultSet Objekt bereit Interface DatabaseMetaData enthlt Informationen ber Tabellen etc. aus dem Datadictionary der Datenbank Interface ResultSetMetaData enthlt Informationen ber den Typ etc. des zurckgegebenen ResultSet lE- f, ff E f f f ff2ff= fmODBCOpen Database Connectivity: offener Standard fr API fr den Datenbankzugriff u.a. fr Access, dBase, DB2, und Excel bentigt wird: ODBC software Treiber fr jede Datenbank basiert auf: The Open Group standard SQL Call-Level Interface erstes Release 1992 durch SQL Access Group auf gngigen PC-Plattformen verfgbar fr JDBC gibt es eine JDBC-ODBC "bridge" zum Zugriff auf ODBC-Datenbanken. :)%f!%f!%f!%f"!%fR!)!!%f !%f!%f>!%f$!                  #   #  )                   0gj 0nDatenbanktuning Performance Optimierung oTuningpotential DB-Interna: internes Modell z.B. Indexe Design konzeptuelles Modell Betriebssystem Hardware z.B. Plattenkonfiguation Applikation SQL-Code Optimierung "  "  pOptimizer, regelbasiert  qOptimizer, kostenorientiert  rOptimizer, kostenorientiert (2) Faktoren: Tabellengren Indexstufen Feldselektivitten CPU (Anzahl, Geschwindigkeit) Speichergre Faktoren sind statisch statistischT Z Z  QHints gegeben vom Anwender untersttzen Optimierer erzwingen bestimmtes Verhalten*LL RsFaktoren Indexe dafr spricht: hufige Suche ber indizierte Spalten hufige Sortierung nach indizierten Spalten Spalte ist NOT NULL Indexwerte sind gut gestreut, d.h. gleichverteilt im Wertebereich indizierte Spalten bilden einen Fremschlssel dagegen spricht: Tabelle ist kleiner als 100 KB nur wenige verschiedene Indexwerte einige Indexwerte sind extrem hufig indizierte Tabelle unterliegt hufigen nderungenH t Faktoren (2) Feldselektivitt kann auch in % gemessen werden maximal 100%, wenn Spalte faktisch unique-Eigenschaft hat Index lohnt sich bei einer Selektivitt ab 85% in Ausnahmefllen reichen 30% select count(distinct spalte)/count(*) as feld_sel from tabelle x@ff  u Faktoren (3)  vTabellenzugriffe  wTabellenzugriffe (2) Access by Rowid bentigt entweder die rowid zum Zugriff oder einen Index Full Table Scan wird z.B. bei select * from tabelle ausgefhrt Index Unique Scan setzt Index voraus nicht mit allen where-Klauseln mglich wird gefolgt von Access by Rowid Index Range Scan bei Abfragen mit  like ,  between ... and bei Verwendung von Indexen ber Spalten ohne  unique -Klausel9/[iff fP f-f oxIndexverwendung nur unter Bedingungen: keine Funktion angewendet auf Spalte mit Index keine Abfrage auf IS NULL oder IS NOT NULL keine Abfrage mit Ungleichheit () Indexe werden aber insbesondere verwendet bei Ermittlung von Minimum und Maximum (MIN- bzw. MAX-Funktion)n}*'z*A Execution Plans (Oracle) hVorbereitungen User muss Privileg PLUSTRACE haben ( role ) (ist meistens vorhanden) Plan-Tabellen anlegen (vorbereitetes Skript ausfhren: drop table Plan_table; start /user/oracle/rdbms/admin/utlxplan.sql ) Variante 1 Kommando (danach werden Plan/Statistik automatisch angezeigt): set autotrace on ,7K ? !K  6   5Execution Plans (2) Variante 2 explain plan set statement_id =  ??? for ... (statement) ... Danach Anfragen auf Plan_table ausfhren (Beispiel siehe Skript  show_plan.sql ) Auswahl des Optimizers select ... /*+ RULE */ ...; alter session set optimizer_goal = RULE; H))E 9   )E   /  $(  r  S      r  S    H  0޽h ? 3333   F(  x  c $v    v   c $$ v  v "  (H  0޽h ? 3333r-f }  f