Stručný obsah Úvod Výběr vhodné databáze Základy databázové teorie Základy jazyka SQL Databázové tabulky Normalizace databází Pohledy Vkládání, aktualizace a mazání údajů Výběr údajů Spojování údajů z více tabulek a databází Výběr pomocí vnořených dotazů Funkce jazyka SQL Seskupování údajů Indexy Kurzory Transakce a konzistentnost Zachování konzistentnosti údajů Zálohování, import a export údajů Komprese, šifrování a audit údajů Procedurální nadstavby jazyka SQL Uložené procedury, funkce a spouště XML jako nativní formát pro ukládání údajů Vyhledávání v textu Ukládání geografických a geometrických (prostorových) údajů
33 35 45 63 71 89 95 101 117 133 149 157 191 197 203 209 213 217 233 241 257 267 297 305
4
Stručný obsah
Ukládání binárních a multimediálních údajů Základy administrace Optimalizace na úrovni přístupu a dotazování Optimalizace na úrovni databázových struktur Jednoduché řešení z oblasti Business Intelligence Vytvoření a naplnění testovacích tabulek
333 341 355 375 385 401
Rejstřík
407
Obsah Úvod Komu je kniha určena Konvence použité v knize Doprovodné CD Zpětná vazba od čtenářů Errata
Výběr vhodné databáze 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
Databáze jako základní pilíř informačního systému Výběr databáze pro informační systém Jak bude databáze v rámci informačního systému používána? Úloha databázového systému v podnikové informatice Vývojem prošly nejen technologie, ale i cenová politika Komerční produkt versus Open Source Kritéria pro výběr databáze Jaká edice databáze je vhodná pro konkrétní informační systém? Co umí edice Enterprise Typické scénáře nasazení pro edici Enterprise Co umí edice Standard Typické scénáře nasazení pro edici Standard Co umí edice Web Co umí edice Compact a Mobile Co umí edice Express Typické scénáře nasazení pro edici Express XML jako alternativa malé databáze? Microsoft SQL Server 2008 Je to ještě MySQL, nebo už Oracle? MySQL: Instalace a konfigurace Oracle XE: konfigurace uživatelského přístupu Oracle XE: Využití cvičného schématu HR Oracle 11g XE: Odemčení účtu Oracle 10g XE: Odemčení účtu Oracle 10g XE: Nastavení oprávnění Jak na praktické pokusy Jak připravit cvičnou databázi Co ukládá tabulka pro testování výrazů a funkcí
33 33 33 33 34 34
35 35 35 35 36 36 36 36 37 37 37 37 37 38 38 38 38 39 39 39 39 40 41 41 41 42 42 42 43
6
Obsah
Základy databázové teorie 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
Co je to databáze, server, platforma Co je to databázový systém Co znamená transakční zpracování údajů Zotavení z chyb a nehod Jak na víceuživatelský přístup Jak se definuje ochrana údajů Co jsou to databázové tabulky Relační vztahy mezi údaji uloženými ve více databázových tabulkách Jaké existují typy domén Jaký je význam domén Co říkají podmínky relačnosti Co jsou to integritní omezení Co je to primární klíč Primární klíč z pohledu relační integrity Primární klíč mohou vytvořit jen silné entity Jednoduchý a kompozitní primární klíč Co je to unikátní klíč Co je to cizí klíč Cizí klíč z pohledu relační integrity Jednoduchý a kompozitní cizí klíč Pravidla pro relační databázové systémy Co říká pravidlo informace Co říká pravidlo zaručeného přístupu Jak na systematické ošetření prázdných hodnot Proč je popis struktury je založen na relačním modelu Co říká pravidlo komplexního datového jazyka Co je aktualizace pohledů Co umí vysokoúrovňová manipulace s údaji Co je fyzická datová nezávislost Co je logická datová nezávislost Co je nezávislost integrity Co je to distribuční nezávislost Co říká pravidlo nenarušení Jak na modelování Modelování databázové aplikace Modelovaní obchodních požadavků Modelování databází
45 45 45 45 45 46 46 46 47 47 47 47 48 48 48 48 48 49 49 49 49 49 49 50 50 50 50 50 50 50 50 50 51 51 51 51 51 51
Obsah
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
Co je to databázové schéma Co popisuje konceptuální model Co je to entita Co je to entitně-relační model K čemu slouží vztah Co je to atribut Co říká kardinalita vztahů mezi entitami Co říká vztah jedna ku jedné (1:1, one-to-one) Co říká vztah jeden ku více (1:N, many-to-one) Co říká vztah více ku více (N:M, many-to-many) Co je to parcialita vztahu Co je to unární relace Příklad unární relace Problémy spojené s implementací hierarchické struktury Návrh hierarchické struktury umožňující operace Implementace hierarchické struktury umožňující operace Vytvoření a naplnění hierarchické tabulky Jak to vlastně funguje? Výběr záznamu a jeho „nadřízených“ Výběr záznamu a jeho „podřízených“ Operace v tabulce obsahující hierarchickou strukturu
Základy jazyka SQL 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
K čemu slouží jazyk SQL Stručný pohled do historie jazyka SQL SQL – slovní zásoba SQL – gramatika Data Definition Language (DDL) Data Manipulation Language (DML) Data Control Language (DCL) Příkazy pro řízení transakcí (Transaction Control Commands) Praktický příklad DCL Praktický příklad DDL Praktický příklad DML Středník za SQL příkazem Jak používat komentáře Víceslovné názvy objektů Konvence pro názvy objektů Jak zadat příkaz databázovému serveru
7
52 52 52 52 52 53 53 54 54 54 55 55 56 56 57 58 58 59 60 60 60
63 63 63 63 64 64 64 65 65 65 65 66 66 66 67 67 67
8
Obsah
103 104 105
SQL Server: SQL Server Management Studio Oracle: Klientské a administrátorské aplikace MySQL: Konzolová aplikace
Databázové tabulky 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
Vytvoření databáze Vytvoření databázové tabulky příkazem CREATE TABLE Oracle – vytvoření dočasné tabulky SQL Server – vytvoření dočasné tabulky Oracle – vytvoření databázové tabulky podle už existující tabulky SQL Server – vytvoření databázové tabulky podle už existující tabulky Vytvoření databázové tabulky prostřednictvím vizuálního návrhu Co jsou to datové typy Jaké číselné datové typy jsou k dispozici Jaké existují datové typy pro vyjádření finančních částek Jaké existují datové typy na uložení celočíselných hodnot Oracle – datový typ Number Jaké existují znakové datové typy Jaké existují datové typy pro uložení data a času K čemu slouží hodnota NULL SQL Server – jak na řídké sloupce SQL Server – jak na filtrované indexy nad řídkými sloupci SQL Server – použití filtrovaných indexů nad řídkými sloupci SQL Server – jak na filtrovanou statistiku v tabulkách s řídkými sloupci Definování uživatelských datových typů SQL Server – definování datového typu Oracle – definování datového typu SQL Server – k čemu slouží datový typ HierarchyID SQL Server – vložení kořenového elementu do hierarchické struktury SQL Server – vložení potomka do hierarchické struktury SQL Server – uložení procedury na vložení potomka do hierarchické struktury SQL Server – výpis hierarchické struktury SQL Server – vyhledávání v hierarchické struktuře SQL Server – změna pozice v hierarchické struktuře SQL Server – k čemu slouží datový typ TABLE SQL Server – příklad bez použití datového typu TABLE SQL Server – příklad použití datového typu TABLE SQL Server – přidávání údajů s využitím datového typu TABLE SQL Server – informace o datových typech TABLE
67 68 69
71 71 71 71 72 72 72 72 73 73 73 73 74 74 74 75 75 76 76 76 77 77 77 77 78 78 78 79 79 79 80 80 80 81 81
Obsah
140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
Omezení pro atributy databázových tabulek Vyloučení hodnoty NULL – NOT NULL Co je implicitní hodnota v sloupci – DEFAULT Jak na kontrolu zadávaných hodnot – CHECK Co je omezení na unikátní hodnotu – UNIQUE Co je to primární klíč – PRIMARY KEY Jak na primární klíč nad více atributy Co je to cizí klíč – FOREIGN KEY Aktivování omezení Deaktivování omezení Modifikace databázové tabulky – ALTER TABLE Odstranění databázové tabulky – DROP TABLE Oracle – zjištění tabulek patřících do schématu SQL Server – zjištění tabulek patřících do schématu Výpis atributů databázové tabulky Oracle – komplexní výpis atributů databázové tabulky Oracle – komplexní výpis atributů databázové tabulky Oracle – výpis indexovaných atributů databázové tabulky SQL Server – výpis indexovaných atributů databázové tabulky MySQL – výpis indexovaných atributů databázové tabulky Oracle – výpis omezení týkajících se atributů databázové tabulky Oracle – výpis omezení týkajících se atributů databázové tabulky
162 163 164 165 166 167 168 169 170 171 172 173 174 175
Co jsou to normální formy Jaké jsou úrovně normalizace Co říká nultá normální forma (0NF) Co říká první normální forma (1NF) Úprava struktury tabulky do 1NF Úprava struktury tabulky do 1NF pomocí dekompozice Co je to vztah master–detail Co říká druhá normální forma (2NF) Úprava struktury tabulky do 2NF Co říká třetí normální forma (3NF) Přesnější definice 3NF Co říká Boyce-Coddova normální forma (BCNF) Co říká čtvrtá normální forma (4NF) Co říká pátá normální forma (5NF)
Normalizace databází
9
81 82 82 82 82 83 83 83 84 85 85 86 86 86 86 87 87 87 87 88 88 88
89 89 89 89 90 90 91 91 92 92 92 93 93 93 93
10
Obsah
Pohledy 176 177 178 179 180 181 182 183 184 185 186 187
K čemu slouží pohledy Jak vytvořit pohled Vztah pohledu a tabulek, z nichž byl pohled vytvořen Co jsou to jednoduché pohledy Co jsou to komplexní pohledy Interakce mezi pohledem a tabulkou Odstranění pohledu – DROP VIEW K čemu slouží materializované pohledy Oracle – vytvoření materializovaného pohledu Oracle: Vytvoření protokolu materializovaného pohledu Vztah mezi materializovaným pohledem a tabulkami, nad nimiž byl vytvořen Odstranění materializovaného pohledu
188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211
Co je impulzem pro vložení údajů do databáze Vkládání nových záznamů Vkládání nových záznamů s využitím pozice atributů Vkládání údajů z jiné tabulky Generování příkazů INSERT Vkládání unikátních hodnot Vkládání implicitních hodnot Oracle – vkládání více hodnot do tabulky SQL Server – vkládání více hodnot do tabulky SQL Server – vkládání více záznamů v rámci jednoho příkazu INSERT Oracle – vkládání údajů do více tabulek podle hodnoty atributu Jedinečné hodnoty v primárních klíčích a jejich automatické generování SQL Server – automatické generování unikátních hodnot SQL Server – příklad pro automatické generování unikátních hodnot Oracle – automatické generování unikátních hodnot pomocí sekvencí Oracle – vytvoření sekvence Oracle – příklad pro vytvoření a použití sekvence Oracle – změna a odstranění sekvence MySQL – automatické generování unikátních hodnot MySQL – přidávání záznamů s využitím automatického generování unikátních hodnot Přidělení nejnižšího volného identifikátoru Změna údajů v tabulce – příkaz UPDATE Aktualizace všech údajů v tabulce Aktualizace vybraných údajů v tabulce
Vkládání, aktualizace a mazání údajů
95 95 95 95 96 96 96 97 97 97 98 98 99
101 101 101 101 102 102 102 103 103 103 104 104 105 105 105 106 106 106 107 107 107 108 109 109 109
Obsah
212 213 214 215 216 217 218 219 220 221 222 223
Aktualizace záznamů s využitím příkazu CASE Aktualizace obsahu tabulky na základě hodnot z jiné tabulky SQL Server – vylepšení příkazu UPDATE pro změnu záznamů Výměna hodnot sloupců Vymazání údajů z tabulky – DELETE Jaký je rozdíl mezi vymazáním a zrušením objektu Vymazání duplicitních záznamů Odhalování duplicit pomocí spojení samotné tabulky se sebou Vyprázdnění databázové tabulky – TRUNCATE TABLE SQL Server – k čemu slouží příkaz MERGE SQL Server – jak na synchronizaci tabulek příkazem MERGE SQL Server – jak na sloučení tabulek příkazem MERGE
224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248
Výběr údajů prostřednictvím projekce Výběr údajů prostřednictvím restrikce Výběr údajů prostřednictvím kombinace projekce a restrikce Výběr údajů pomocí příkazu SELECT K čemu slouží klauzule SELECT K čemu slouží klauzule FROM K čemu slouží klauzule WHERE K čemu slouží klauzule GROUP BY K čemu slouží klauzule HAVING K čemu slouží klauzule ODRER BY Jak na výběr všech údajů Projekce pomocí uvedených atributů Co jsou to aliasy atributů K čemu slouží uvozovky v aliasech Přidání textového atributu Operace s hodnotami atributů Vytvoření pseudoatributu pomocí aliasu Spojování textových atributů Použití klauzule CASE na přiřazení hodnoty Použití klauzule CASE na přiřazení hodnoty do intervalu Použití klauzule CASE na vytvoření souhrnů Omezení výběru záznamů podle definovaných kritérií – restrikce Porovnávací operátory pro vytvoření podmínky Logické operátory pro vytvoření podmínky Porovnávací operátory pro znakové datové typy
Výběr údajů
11
110 110 111 111 111 112 112 113 113 113 114 115
117 117 117 117 118 118 118 118 118 118 118 119 119 119 119 120 120 120 120 121 121 121 122 122 123 123
12
Obsah
249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274
Operátory pro kombinované podmínky Výběr hodnot patřících do intervalu Výběr hodnot patřících do vyjmenované množiny Výběr podle vzorů Výběr pomocí operátoru LIKE Zamezení výpisu duplicitních záznamů Testování na hodnotu NULL Seřazení údajů – ORDER BY Seřazení v opačném pořadí Seřazení podle více atributů Seřazení podle údajů SQL Server – k čemu slouží příkaz TOP(n) SQL Server – výběr vzorku údajů pomocí klauzule TABLESAMPLE Oracle – výběr údajů v náhodném pořadí SQL Server – výběr údajů v náhodném pořadí SQL Server – výběr údajů v náhodném pořadí pomocí funkce NEWID SQL Server – výběr určeného počtu záznamů Oracle – výběr určeného počtu záznamů MySQL – výběr určeného počtu záznamů MySQL – výběr od určeného záznamu SQL Server – výběr počtu záznamů daného obsahem proměnné SQL Server – výběr počtu záznamů daného obsahem proměnné z více tabulek SQL Server – národní specifika ve vztahu k vyhledávání a řazení údajů SQL Server – k čemu slouží parametr COLLATE Oracle – k čemu slouží parametr NLS_LANG MySQL – k čemu slouží proměnná CHARACTER_SET
275 276 277 278 279 280 281 282 283 284 285 286
Výběr údajů z více tabulek Tečková konvence pro specifikaci objektů Spojování tabulek pomocí klauzule WHERE Vynechání názvů schémat Použití aliasů při výběru údajů z více tabulek Použití klauzule WHERE pro spojení tabulek i restrikci Výpis údajů z tabulek, které vzájemně souvisejí, přes jinou tabulku Příklad spojení tabulek svázaných pomocí třetí tabulky Výpis údajů z nepřímo souvisejících tabulek přes jinou tabulku Spojení tabulky se sebou Spojování tabulek pomocí klauzule JOIN Výběr vhodného typu spojení
Spojování údajů z více tabulek a databází
123 123 124 124 124 125 125 126 126 126 126 127 127 127 128 128 128 129 129 129 129 130 130 131 131 132
133 133 133 134 134 134 135 135 135 136 137 137 138
Obsah
287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308
Jak na vnitřní spojení (INNER JOIN) Jak na vnější spojení z levé strany (LEFT OUTER JOIN) Jak na vnější spojení z pravé strany (RIGHT OUTER JOIN) Jak na úplné spojení Jak na výlučné spojení Spojení z levé a pravé strany Jak na vnější spojení Jak na vnější spojení z „levé strany“ Jak na vnější spojení z „pravé strany“ Vyhledávání osiřelých záznamů Jak na křížové spojení Spojení tabulky se sebou (self-join) Spojení tabulky se sebou s vyloučením duplicit Spojení typu self-join jako alternativa k některým vnořeným dotazům Jak na úplné spojení SQL Server – k čemu slouží operátor APPLY Spojování nehomogenních tabulek Jak použít operátor UNION pro nehomogenní tabulky Uložení údajů získaných z nehomogenních tabulek Rozčlenění položek výpisu tabulky na více typů Jak zjistit průnik dvou tabulek Jak zjistit rozdíl dvou tabulek
309 310 311 312 313 314 315 316 317 318 319 320 321 322 323
Jaké typy úloh se řeší pomocí vnořených dotazů Porovnávání pomocí jednořádkových vnořených dotazů Jak použít agregační funkce ve vnořeném dotazu Jak zapsat víceřádkové vnořené dotazy Jak zapsat vícesloupcové vnořené dotazy Použití funkce NVL Testování existence hodnot Vyhledání „osiřelých“ záznamů Jak na vnořené dotazy s komplexnějším porovnáváním Vkládání, aktualizace a mazání údajů pomocí vnořených dotazů Nalezení n-tého záznamu v pořadí podle daného kritéria Výpis n záznamů podle daného kritéria Co jsou to korelační vnořené dotazy Příklad použití korelačního vnořeného dotazu I Příklad použití korelačního vnořeného dotazu II
Výběr pomocí vnořených dotazů
13
138 138 139 139 139 140 141 141 141 142 142 142 143 143 144 144 144 146 146 147 147 148
149 149 149 149 149 150 150 150 151 151 152 153 153 153 154 154
14
Obsah
324 325 326
Příklad použití korelačního vnořeného dotazu III SQL Server – Common Table Expressions jako alternativa vnořených dotazů SQL Server – Common Table Expressions versus vnořené dotazy
Funkce jazyka SQL 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360
K čemu se používají funkce? Databázový server jako kalkulačka Výpočet souhrnných hodnot pro více záznamů Zjištění počtu záznamů Co umí jednořádkové funkce Jak zapsat přirozený logaritmus Jak na výpočet mocniny čísla e Jak na dekadický logaritmus Jak zjistit všeobecnou mocninu Jak zjistit druhou odmocninu Jak zjistit zbytek po dělení Jak na goniometrické funkce Jak na inverzní goniometrické funkce Jak na hyperbolické funkce Funkce pro zjištění absolutní hodnoty Jak na zaokrouhlování Jak na ořezání čísla Zjištění hodnoty nejbližšího většího celého čísla Zjištění hodnoty nejbližšího menšího celého čísla Zjišťování znaménka Jak na agregační funkce Výpočet aritmetického průměru Zjištění maximální nebo minimální hodnoty Identifikace záznamu obsahujícího maximum resp. minimum Jak zjistit součet hodnot v množině údajů Oracle – ohodnocení záznamu podle určených kritérií Oracle – procentuální ohodnocení záznamu podle určených kritérií SQL Server – k čemu slouží poziční funkce SQL Server – příklad pro funkci RANK SQL Server – příklad pro funkci RANK z cvičné databáze AdventureWorks2008 SQL Server – k čemu slouží funkce DENSE_RANK SQL Server – k čemu slouží funkce ROW_NUMBER SQL Server – k čemu slouží funkce NTILE SQL Server – příklad použití funkcí pro ohodnocení
154 155 155
157 157 157 157 157 158 158 158 158 158 158 159 159 159 159 159 160 160 160 160 160 160 160 161 161 161 161 162 162 162 163 163 164 165 165
Obsah
361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398
Jak na statistické funkce Oracle – překódování údajů podle kódovací tabulky Oracle – použití funkce BITAND pro logický součin na úrovni bitů Oracle – použití funkce DECODE pro výpis ve formě kontingenční tabulky Zjištění délky textového řetězce Převod řetězce na velká písmena Převod řetězce na malá písmena Převod prvního písmene na velké písmeno Převod čísla na znak Ořezání textového řetězce zleva Ořezání textového řetězce zprava Odstranění mezer nebo znaků z levé strany řetězce Odstranění mezer nebo znaků z pravé strany řetězce Doplnění řetězce zleva Doplnění řetězce zprava Nahrazování znaků v řetězci Speciální nahrazování znaků v řetězci Jak vytvořit podmnožinu řetězce Oracle – výpis textových grafů Oracle – zdokonalení výpisu textových grafů Funkce pro práci s datem a časem Způsob definování atributu pro datum a čas Vložení aktuálního data a času Vložení zadaného data a času UTC, GMT, SEČ – světové časy a časová pásma Přehled odlišností a příklad použití data a času pro jednotlivé platformy SQL Server – datové typy pro datum a čas SQL Server – nové datové typy pro datum a čas SQL Server – seznam datových typů pro datum a čas SQL Server – použití nových datových typů pro datum a čas SQL Server – převod datových typů pro datum a čas SQL Server – hierarchie datumových a časových hodnot SQL Server – připočítání hodnoty k datu a času SQL Server – rozdíl mezi dvěma hodnotami data a času SQL Server – část data a času SQL Server – zjištění hodnoty aktuálního data a času SQL Server – zjištění hodnoty dne SQL Server – zjištění hodnoty měsíce
15
165 166 167 167 168 168 168 168 168 168 169 169 169 169 169 170 170 170 170 171 171 172 172 172 172 173 173 174 175 175 176 176 176 177 177 177 177 177
16
Obsah
399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437
SQL Server – zjištění hodnoty roku Oracle – datové typy pro datum a čas Oracle – zadávání datových typů pro datum a čas Oracle – datový typ TIMESTAMP Oracle – datové typy pro vyjádření intervalu Oracle – posunutí data o několik měsíců Oracle – aktuální datum a čas Oracle – zjištění aktuálního data Oracle – zjištění aktuálního data a času Oracle – časový posun vůči GMT Oracle – část data a času Oracle – zjištění posledního dne v měsíci Oracle – zjištění aktuální hodnoty lokálního data a času Oracle – počet měsíců mezi dvěma daty Oracle – následující den v týdnu Oracle – část data a času Oracle – zaokrouhlení hodnot data a času Oracle – ořezání hodnot data a času Oracle – časové posunutí připojení Oracle – aktuální systémové datum a čas Oracle – převod řetězce na datum a čas MySQL – zjištění aktuálního data MySQL – zjištění aktuálního času MySQL – zjištění aktuálního data a času MySQL – formátovaný výstup data a času MySQL – aktuální systémové datum a čas MySQL – aktuální datum a čas MySQL – část data a času MySQL – datum určené počtem dní od začátku letopočtu MySQL – připočtení intervalu k zadanému datu a času MySQL – odečtení intervalu od zadaného data a času MySQL – hodnota hodin MySQL – hodnota minut MySQL – hodnota vteřin MySQL – hodnota roku a týdnu v roce MySQL – název dne v týdnu MySQL – název měsíce MySQL – pořadové číslo dne v měsíci MySQL – pořadové číslo dne v týdnu
177 178 178 178 179 179 179 179 180 180 180 180 180 181 181 181 181 182 182 182 182 182 182 183 183 183 183 183 184 184 184 184 185 185 185 185 185 185 185
Obsah
438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454
MySQL – pořadové číslo dne v roce MySQL – pořadové číslo dne v týdnu MySQL – pořadové číslo týdnu v roce MySQL – pořadové číslo kvartálu MySQL – pořadové číslo roku MySQL – převod počtu vteřin na čas MySQL – převod času na počet vteřin MySQL – počet dní od začátku letopočtu Datumová a časová aritmetika MySQL – datumová a časová aritmetika SQL Server – funkce pro převod datových typů Oracle – převod binárního čísla na dekadické Oracle – převod znakových datových typů Oracle – převod datumových a časových typů na znakové Oracle – převod na datový typ LOB Oracle – převod na číselný datový typ Využití matematických, řetězcových a převodních funkcí – kontrola rodných čísel
Seskupování údajů 455 456 457 458 459 460 461 462 463 464 465 466 467
Seskupování údajů na základě stanoveného kritéria Seskupování záznamů pomocí klauzule GROUP BY Omezení seskupovaných údajů – WHERE Omezení skupinových výsledků – HAVING Kombinace omezení Seřazení skupinových výsledků Seskupování záznamů obsahujících hodnotu NULL Použití seskupování a agregačních funkcí Eliminace záznamů obsahujících hodnotu NULL Zjišťování duplicit Zjišťování duplicit pomocí vnořeného dotazu Seskupování údajů podle data a času SQL Server – klauzule GROUPING SETS
Indexy 468 469 470 471 472 473
Vyhledávání a vkládání údajů v databázi při náhodném uspořádání Vyhledávání a vkládání údajů v databázi uspořádané podle primárního klíče Zavedení indexů Použití indexů při vyhledávání Vyhledávání pomocí B-stromů Jak B-stromy fungují
17
185 186 186 186 186 186 186 186 186 187 187 188 188 188 188 188 189
191 191 191 191 192 192 193 193 193 194 194 195 195 196
197 197 197 197 198 198 198
18
Obsah
474 475 476 477 478 479 480
Vytvoření indexu SQL Server – vytváření indexů Oracle – vytváření indexů Oracle – bitmapové indexy Oracle – použití bitmapových indexů Odstranění indexu – DROP INDEX Nevýhody indexů
Kurzory
198 199 200 200 200 201 201
203
481 482 483 484 485 486 487 488 489 490 491 492 493 494
K čemu slouží kurzory? Proces výběru údajů pomocí kurzoru SQL Server – deklarace kurzoru SQL Server – otevření kurzoru SQL Server – výběr údajů prostřednictvím kurzoru SQL Server – naplnění proměnných prostřednictvím kurzoru SQL Server – uzavření kurzoru Oracle – deklarace kurzoru Oracle – otevření kurzoru Oracle – výběr údajů prostřednictvím kurzoru Oracle – uzavření kurzoru Oracle – cyklický výběr údajů pomocí kurzoru Oracle – testování konce cyklického výběru pomocí kurzoru Problémy spojené s kurzory
495 496 497 498 499 500 501 502 503
K čemu slouží transakce Transakce pro zachování konzistentnosti údajů Jak transakce fungují Explicitní zrušení transakce Vytváření návratových bodů Zrušení změn od návratového bodu Potvrzení transakce MySQL – příklad pro transakce Doporučení pro transakce
209 209 210 210 210 211 211 211 212
Zachování konzistentnosti údajů
213
504 505 506 507 508
Sdílený přístup více uživatelů SQL Server – zachování konzistentnosti údajů Oracle – zachování konzistentnosti údajů SQL Server – vytvoření statického snímku databáze SQL Server – příklad na vyzkoušení statického snímku databáze
Transakce a konzistentnost
203 203 203 203 204 204 204 204 204 205 205 205 205 206
209
213 213 214 214 215
Obsah
Zálohování, import a export údajů 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545
Proč je potřeba chránit údaje Jak na zálohování údajů K čemu slouží fyzická záložní databáze K čemu slouží logická záložní databáze Synchronní a asynchronní logická záložní databáze Co je kompletní zálohování databáze Co je diferenciální zálohování databáze Co uchovává záloha transakčního protokolu Kdy je vhodná komprese zálohy Co je to replikace databáze Jaké existují druhy zálohování SQL Server – modely obnovy databáze SQL Server – zálohování databáze SQL Server – komprese zálohy SQL Server – zrcadlení databáze SQL Server – vytvoření koncového bodu pro zrcadlení SQL Server – informace o koncových bodech pro zrcadlení SQL Server – vytvoření účtů pro zrcadlení Oracle – obnova údajů z transakčního protokolu Oracle – zálohování databáze ve verzi Express Edition (XE) Import a export údajů Kvalita importovaných údajů Scénáře pro import a export údajů Problémy při importu údajů Oracle – export údajů Oracle – import údajů Export údajů do flat souboru Oracle – export údajů do flat souboru Oracle – import údajů z flat souboru Oracle XE – export a import údajů Oracle XE – import Oracle XE – mapování atributů pro import Oracle XE – definování primárního klíče pro import Oracle XE – export Oracle XE – export do formátu Excel Oracle XE – export do formátu XML SQL Server – nástroj pro export a import údajů
19
217 217 217 217 217 218 218 218 218 218 219 219 219 220 220 221 221 221 222 222 222 223 223 223 224 224 224 225 225 226 226 227 227 228 229 230 230 230
20
Obsah
Komprese, šifrování a audit údajů 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562
Komprese údajů v databázích Oracle – pokročilá komprese (Advanced Compression) SQL Server – řádková komprese SQL Server – stránková komprese pomocí prefixů sloupců SQL Server – stránková komprese pomocí slovníku SQL Server – typické scénáře pro kompresi SQL Server – transparentní šifrování údajů SQL Server – vytvoření klíče MASTER KEY SQL Server – vytvoření certifikátu SQL Server – vytvoření šifrovacího klíče SQL Server – auditování SQL Server – vytvoření objektu typu AUDIT pro server SQL Server – povolení auditu SQL Server – vytvoření specifikace serverového auditu SQL Server – vytvoření specifikace databázového auditu SQL Server – testování auditu SQL Server – ukončení auditu
Procedurální nadstavby jazyka SQL 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581
Omezení jazyka SQL T-SQL – jak zapsat komentáře T-SQL – jak na ladicí výpisy T-SQL – jak vypsat obsah proměnných T-SQL – jak na převod data a času T-SQL – naformátované ladicí výpisy T-SQL – výpis pomocí příkazu RAISEERROR T-SQL – jak na proměnné T-SQL – naplnění proměnných z databázové tabulky T-SQL – řízení toku provádění příkazů T-SQL – podmínka IF – ELSE T-SQL – cyklus WHILE T-SQL – předčasné opuštění cyklu T-SQL – skripty T-SQL – dávky K čemu slouží příkaz GO Platnost proměnných v dávkách Kdy použít dávku T-SQL – ošetření chyb v T-SQL
233 233 233 234 234 235 235 236 236 236 237 237 237 238 238 238 238 239
241 241 241 241 242 242 242 243 243 243 243 244 244 245 245 245 245 246 246 246
Obsah
582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614
T-SQL – výpis chybových zpráv T-SQL – výpis uživatelem definovaných chybových zpráv PL/SQL – modulární procedurální jazyk PL/SQL – komentáře PL/SQL – ladicí výpisy PL/SQL – proměnné PL/SQL – deklarování typu proměnné podle jiné proměnné PL/SQL – deklarování typu proměnné podle atributu databázové tabulky PL/SQL – výpis obsahu proměnných PL/SQL – použití znakových datových typů PL/SQL – použití datových typů pro datum a čas PL/SQL – použití datového typu BOOLEAN PL/SQL – naplnění proměnných z databázové tabulky PL/SQL – vnořené bloky PL/SQL – práce s údaji v tabulkách PL/SQL – řízení toku provádění příkazů PL/SQL – podmínka IF – THEN – END IF PL/SQL – podmínka IF – THEN – ELSE – END IF PL/SQL – podmínka IF – THEN – ELSIF – END IF PL/SQL – příkaz CASE pro vícenásobné větvení programu PL/SQL – vícenásobné větvení podle podmínky PL/SQL – jednoduchý cyklus, podmínka v klauzuli IF PL/SQL – jednoduchý cyklus, podmínka v klauzuli WHEN PL/SQL – cyklus FOR PL/SQL – využití řídicí proměnné cyklu FOR PL/SQL – cyklus FOR s definovaným inkrementováním PL/SQL – dynamický cyklus FOR PL/SQL – záznamy PL/SQL – deklarace záznamu podle databázové tabulky PL/SQL – ošetření chyb PL/SQL – typy výjimek PL/SQL – příklad pro ošetření chyb PL/SQL – simulování výjimky
615 616 617 618
Uložené procedury Vstupní a výstupní parametry uložených procedur SQL Server – vytvoření uložené procedury SQL Server – vytvoření uložené procedury v jazyce C#
Uložené procedury, funkce a spouště
21
247 247 247 248 248 248 248 249 249 249 249 249 250 250 251 251 251 252 252 252 252 253 253 253 254 254 254 255 255 255 255 256 256
257 257 257 257 258
22
Obsah
619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638
Oracle – vytvoření uložené procedury Uložená procedura s výstupním parametrem Vnořené uložené procedury Viditelnost objektů ve vnořených uložených procedurách Odstranění uložené procedury K čemu slouží funkce SQL Server – vytvoření funkce SQL Server – vytvoření funkce v jazyce C# Oracle – vytvoření funkce Odstranění funkce K čemu slouží spouště Definování událostí pro aktivaci SQL Server – vytvoření spouště SQL Server – příklad použití spouště SQL Server – vytvoření spouště v jazyce C# Oracle – vytvoření spouště Oracle – příklad použití spouště Odstranění spouště Zřetězení spouští Zakázání spouště
639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655
Co je to XML Jakou strukturu má dokument XML Omezení ohledně volby názvů prvků Schéma XML Transformace pomocí jazyka XSLT XML na platformě Oracle Podporuje vaše verze databáze Oracle XML DB? Oracle – vložení údajů z databáze do elementu XML Oracle – vložení údajů do více elementů XML Oracle – příklad vytvoření dokumentu XML Oracle – příklad vytvoření formátovaného dokumentu XML Oracle – generování elementů XML pomocí funkce SYS_XMLGEN Oracle – sloučení elementů XML pomocí funkce SYS_XMLAGG Oracle – výpis více atributů XML Oracle – ukládání údajů v nativním formátu XML Oracle – ukládání údajů v nativním formátu XML Oracle – výpis údajů v nativním formátu XML
XML jako nativní formát pro ukládání údajů
258 259 259 259 260 260 260 261 261 262 262 263 263 263 264 264 265 265 265 266
267 267 267 268 268 268 268 269 269 269 270 270 271 271 271 272 272 272
Obsah
656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693
Oracle – kombinace relačních atributů a atributů XML Oracle – vyhledávání v dokumentu XML SQL Server – výpis údajů ve formátu XML SQL Server – výpis údajů s využitím klauzule ELEMENTS SQL Server – výpis údajů ve formátu XML s použitím modifikátorů RAW, AUTO a PATH SQL Server – použití modifikátoru RAW SQL Server – použití modifikátoru AUTO SQL Server – použití modifikátorů AUTO a ROOT SQL Server – použití modifikátoru PATH SQL Server – kombinace s modifikátorem XMLSCHEMA Načítání části dokumentu XML do paměti Načítání části dokumentu XML do databázové tabulky SQL Server – nativní formát XML SQL Server – vkládání údajů v nativním formátu XML SQL Server – výběr údajů v nativním formátu XML SQL Server – vložení dokumentu XML ze souboru SQL Server – naplnění proměnné datového typu XML z databázové tabulky SQL Server – výhody nativního datového typu XML SQL Server – indexy XML K čemu slouží technologie XQuery XQuery – klíčové slovo FOR XQuery – klíčové slovo LET XQuery – klíčové slovo WHERE XQuery – klíčové slovo ORDER BY XQuery – klíčové slovo RETURN Oracle – jak zadávat serveru příkazy jazyka XQuery Oracle – jednoduchý příklad použití jazyka XQuery Oracle – výběr údajů z dokumentu XML pomocí jazyka XQuery Oracle – dotazy jazyka XQuery v cvičném schématu OE (Order Entry) Oracle – zjištění počtu dokumentů pomocí jazyka XQuery Oracle – restrikce pomocí podmínky jazyka XQuery Oracle – zobrazení hodnot vybraných elementů pomocí jazyka XQuery Oracle – vyhledávání pomocí identifikátoru přes jazyk XQuery Oracle – zrychlení vyhledávání v jazyce XQuery pomocí indexů Oracle – aplikování dotazů jazyka XQuery na relační tabulky Oracle – cvičný příklad pro dotazy jazyka XQuery do relačních tabulek Oracle – výběr údajů z relačních tabulek do formátu XML Oracle – výběr údajů z relačních tabulek do souboru XML
23
273 274 275 275 276 276 276 277 277 278 278 279 279 280 280 280 281 281 282 282 283 283 283 283 283 283 284 284 285 285 285 285 286 287 287 287 287 288
24
Obsah
694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714
Oracle – výběr údajů z relačních tabulek do definovaného dokumentu XML Oracle – dotazy jazyka XQuery do relačních tabulek obsahujících datový typ XML Oracle – jednoduchý dotaz jazyka XQuery do relačních tabulek obsahujících datový typ XML Oracle – příklad komplexního dotazu jazyka XQuery do relačních tabulek obsahujících datový typ XML Oracle – pohledy XML vytvořené z relačních tabulek pomocí dotazu jazyka XQuery SQL Server – jak zadávat serveru příkazy jazyka XQuery SQL Server – jednoduchý příklad použití jazyka XQuery SQL Server – komentář v jazyce XQuery SQL Server – využití funkcí jazyka XQuery SQL Server – výběr údajů z databáze pomocí jazyka XQuery SQL Server – příklad použití dotazu jazyka XQuery SQL Server – použití klauzule LET SQL Server – použití příkazů jazyka XQuery pro databázovou tabulku, příprava údajů SQL Server – jednoduchý dotaz pomocí metody XML.query SQL Server – jednoduchý dotaz typu FLOWR SQL Server – dotaz typu FLOWR s podmínkou SQL Server – výpis elementu pomocí predikátu jazyka XPath SQL Server – metoda XML.exists SQL Server – metoda XML.value Metoda XML.nodes s klauzulí CROSS APPLY Metoda XML.nodes s klauzulí OUTER APPLY
Vyhledávání v textu 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729
Vyhledávání v textu SQL Server – cvičná tabulka pro fulltextové vyhledávání SQL Server – vytvoření fulltextového katalogu SQL Server – vytvoření fulltextového indexu SQL Server – výpis klíčových slov pro fulltextové vyhledávání SQL Server – predikát FREETEXT pro sestavení podmínek vyhledávání SQL Server – predikát CONTAINS pro sestavení neostrých podmínek vyhledávání SQL Server – predikát CONTAINS, jednoduchý výraz SQL Server – predikát CONTAINS, operátor AND (&) SQL Server – predikát CONTAINS, operátor AND NOT (&!) SQL Server – predikát CONTAINS, operátor OR (|) SQL Server – kombinované podmínky SQL Server – výrazy s použitím prefixů SQL Server – příbuzenské výrazy Oracle – cvičná tabulka pro fulltextové vyhledávání
288 289 289 290 290 291 291 291 291 291 292 292 293 294 294 294 295 295 295 295 296
297 297 297 297 298 298 299 299 299 300 300 300 300 301 301 302
Obsah
730 731 732 733 734 735 736
Oracle – vytvoření indexu pro nástroj Oracle Text Oracle – vyhledávání pomocí operátoru CATSEARCH Oracle – jednoduché vyhledávání Oracle – kombinována podmínka „a zároveň“ Oracle – kombinovaná podmínka „a zároveň neobsahuje“ Oracle – kombinovaná podmínka „nebo“ Oracle – kombinovaná podmínka se závorkami
Ukládání geografických a geometrických (prostorových) údajů 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766
K čemu slouží technologie Spatial Geografické minimum Světový geodetický systém WGS 84 Zeměpisné souřadnice Dotazování v geometrických údajích Dotazování v geografických údajích Uložení geometrických a geografických údajů v databázi SQL Server – definice základních geometrických objektů SQL Server – údaje popisující geometrické objekty SQL Server – práce s body pomocí objektu POINT SQL Server – transformace bodů mezi geometriemi SQL Server – vyjádření množiny bodů pomocí objektu MULTIPOINT SQL Server – znázornění lomené úsečky pomocí objektu LINESTRING SQL Server – množina lomených úseček SQL Server – vyjádření mnohoúhelníku pomocí objektu POLYGON SQL Server – děravý mnohoúhelník SQL Server – množina polygonů SQL Server – sdružování geometrických útvarů SQL Server – databázová tabulka pro údaje o geometrických objektech SQL Server – ukládání geometrických objektů do databázové tabulky SQL Server – dotazování do tabulky s údaji o geometrických objektech SQL Server – textové atributy v tabulce pro údaje o geometrických objektech SQL Server – dotazování do tabulky s údaji o geometrických objektech s textovým atributem SQL Server – převod údajů o geometrických objektech do formátu XML SQL Server – grafické zobrazování geometrických a geografických údajů SQL Server – vytvoření tabulky s cvičnými údaji pro operace s geometrickými objekty SQL Server – výpočet plochy geometrických objektů SQL Server – zjištění průniku ploch SQL Server – výpočet plochy průniku SQL Server – zjištění průsečíku obrazců
25
302 302 302 303 303 303 303
305 305 305 306 306 306 306 307 307 307 307 308 308 308 309 309 309 310 310 310 310 311 311 312 312 313 313 314 314 314 315
26
Obsah
767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802
SQL Server – sjednocení ploch SQL Server – obrys plochy SQL Server – obálka ploch SQL Server – konvexní obrys plochy SQL Server – počet vnitřních ploch (děr) SQL Server – obrys vnitřní plochy (díry) SQL Server – definování obrysu geometrického útvaru s odstupem SQL Server – nachází se geometrický objekt uvnitř jiného objektu? SQL Server – protíná řeka nebo cesta daný pozemek? SQL Server – dotýkají se geometrické objekty? SQL Server – ukládání geografických objektů do databázové tabulky SQL Server – zjištění průsečíku geografických objektů SQL Server – vytvoření tabulky s cvičnými údaji pro operace s geografickými objekty SQL Server – určování vzdáleností v geografických souřadnicích SQL Server – optimální zásobování SQL Server – příklad použití vnořeného dotazu SQL Server – spatial indexy SQL Server – indexy pro geometrické údaje SQL Server – indexy pro geografické údaje SQL Server – vytvoření Spatial indexu Oracle Spatial Oracle – datový typ SDO_GEOMETRY Oracle – vytvoření tabulky s cvičnými údaji pro pokusy s technologií Spatial Oracle – naplnění cvičné tabulky údaji o plochách Oracle – pohled obsahující Spatial metadata Oracle – výpočet plochy geometrických útvarů Oracle – výpočet vzdálenosti mezi geometrickými útvary Oracle – zjištění průniku ploch Oracle – grafický ekvivalent operace XOR Oracle – komplexní příklad pro využití technologie Spatial Oracle – vytvoření tabulky s cvičnými údaji pro operace s geografickými objekty Oracle – naplnění tabulky cvičnými údaji pro operace s geografickými objekty Oracle – vytvoření metadat Oracle – vytvoření Spatial indexů Oracle – určování vzdáleností v geografických souřadnicích Oracle – optimální zásobování
803 804
Kombinace databáze a souborového úložiště Údaje v databázi, binární dokumenty v souboru
Ukládání binárních a multimediálních údajů
315 315 316 316 317 317 317 318 318 318 319 319 320 321 321 321 322 322 322 322 323 324 325 325 326 327 327 327 327 328 329 330 330 331 331 331
333 333 333
Obsah
805 806 807 808 809 810 811 812 813 814 815 816 817 818
Ukládání dokumentů do datového typu BLOB SQL Server – uložení dokumentu do datového typu VARBINARY(MAX) SQL Server – uložení dokumentu v jazyce C# SQL Server – výběr dokumentu z datového typu BLOB SQL Server – ukládání dokumentů ze souborů do databáze Oracle – uložení dokumentu do datového typu BFILE SQL Server – datový typ FILESTREAM SQL Server – povolení používání datového typu FILESTREAM SQL Server – vytvoření nové databáze využívající datový typ FILESTREAM SQL Server – vytvoření tabulky využívající datový typ FILESTREAM SQL Server – naplnění tabulky využívající datový typ FILESTREAM SQL Server – přístup k údajům datového typu FILESTREAM SQL Server – zjištění cesty k souborům datového typu FILESTREAM SQL Server – úprava údajů datového typu FILESTREAM
819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841
Správa přístupu Nevěřte nikdy nikomu Ani jednoduché, ani složité heslo není dobré Kdo přistupuje k databázovému serveru a databázi Administrátorské připojení Schémata jako skupiny vlastnických práv Vlastnictví objektů Není schéma jako schéma Autentizace Autorizace Vnější a vnitřní bezpečnost Správa relací (session management) Víceúrovňová bezpečnost (multi-level labeled security) Bezpečnost z pohledu jazyka SQL Řízení přístupu k údajům pomocí pohledů Řízení přístupu přes zabalování objektů Autorizace s využitím rolí Co udává oprávnění SQL Server – řízení přístupových práv SQL Server – autentizace systému Windows SQL Server – vytvoření nového uživatelského účtu SQL Server – bezpečnější vytvoření nového uživatelského účtu SQL Server – vytvoření nového uživatele v databázi
Základy administrace
27
333 333 334 335 335 336 336 337 337 338 338 339 339 339
341 341 341 341 341 342 342 342 342 343 343 343 343 343 343 344 344 344 344 345 345 345 345 346
28
Obsah
842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876
SQL Server – vytvoření nového uživatele ve starších verzích SQL Server – změna hesla uživatele ve starších verzích SQL Server – odebrání uživatele ve starších verzích SQL Server – nastavení práv uživatele pro přístup k databázi SQL Server – jak na role SQL Server – standardní a aplikační databázové role SQL Server – vytvoření role SQL Server – vytvoření role ve starších verzích SQL Server – přidělení oprávnění pro roli SQL Server – přidání uživatelů do role SQL Server – výpis seznamu uživatelů SQL Server – výpis informací o rolích SQL Server – výpis informací o rolích a uživatelích v těchto rolích SQL Server – jak na schémata SQL Server – vytvoření schématu SQL Server – přístup k údajům v tabulkách schématu SQL Server – nastavení práv uživatele pro přístup k objektům databáze SQL Server – odebírání oprávnění Oracle – vytvoření nového uživatele Oracle – bezpečnější vytvoření nového uživatele Oracle – změna hesla uživatele Oracle – odebrání uživatele Oracle – přidělování oprávnění pro uživatele Oracle – odebírání oprávnění Oracle – vytvoření role Oracle – přidělování oprávnění rolím MySQL – řízení přístupových práv uživatelů MySQL – co uchovává tabulka USER MySQL – vytvoření nového uživatele MySQL – co uchovává tabulka DB MySQL – co uchovává tabulka HOST MySQL – k čemu slouží tabulky TABLES_PRIV a COLUMNS_PRIV MySQL – jak změnit heslo uživatele MySQL – jak přidělovat oprávnění MySQL – jak odebírat oprávnění
877 878
Faktory a cíle optimalizace Nejčastější problémy s výkonem
Optimalizace na úrovni přístupu a dotazování
346 346 347 347 347 347 348 348 348 348 348 349 349 349 349 349 350 350 350 350 350 351 351 351 351 352 352 352 353 353 354 354 354 354 354
355 355 355
Obsah
879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917
Úrovně ladění výkonu Co říká pravidlo 80/20 Co říká pravidlo 20/80 Definování reálných a měřitelných cílů Co způsobuje problémy s výkonem? Nadměrné dotazy Zvýšená doba odezvy Snížená propustnost Co může vést k vyčerpání zdrojů Pohled za oponu databázového serveru Oracle – k čemu slouží System Global Area Oracle – k čemu slouží Program Global Area Oracle – úspěšnost využívání vyrovnávací mezipaměti Oracle – úspěšnost využívání mezipaměti pro buffery Oracle – úspěšnost využívání paměti při řazení Oracle – jak odhalit dotazy jazyka SQL, které mají nejvyšší spotřebu zdrojů Oracle – použití nástroje SQL Tuning Advisor Proces provádění dotazu jazyka SQL Oracle – vytvoření prováděcího plánu Oracle – zobrazení prováděcího plánu Oracle – ohodnocení prováděcího plánu pro neindexovaný dotaz Oracle – ohodnocení prováděcího plánu pro indexovaný dotaz Oracle – optimalizace prováděcích plánů Oracle – pravidla pro ovlivnění optimalizace RBO Oracle – jak potlačit použití indexů Oracle – výpočet statistik pro optimalizaci CBO Oracle – zobrazení statistik pro optimalizaci CBO Oracle – vymazání statistik pro optimalizaci CBO Operátory brání použití indexů Funkce brání použití indexů Oracle – vytvoření indexu nad funkcí Oracle – operátor != brání použití indexu Pozor na převod datových typů Porovnávejte datum a čas bez použití funkcí Oracle – jak využít spojení indexů Snažte se vyhnout operátoru LIKE Jak funguje upřednostňování atributů Vliv pořadí sloupců při vytváření indexu Vliv pořadí názvů tabulek v klauzuli FROM
29
355 356 356 356 356 357 357 357 357 357 358 358 359 359 359 360 361 362 363 364 364 365 365 365 365 365 366 366 366 366 366 367 367 367 368 368 368 368 369
30
Obsah
918 919 920 921 922 923 924 925 926 927 928
Vliv pořadí podmínek v klauzuli WHERE Používejte klauzuli BETWEEN místo IN Oracle – účelové shlukování tabulek do klastrů Oracle – shlukování tabulek do klastrů snižuje redundanci Oracle – vytvoření klastru Oracle – vytvoření tabulek v klastru Oracle – vytvoření indexu klastru SQL Server – pevné prováděcí plány SQL Server – příklad scénáře pro pevný prováděcí plán SQL Server – jednorázové vnucení prováděcího plánu pomocí funkce HINT SQL Server – vytvoření prováděcího plánu pro dotaz
Optimalizace na úrovni databázových struktur 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954
Rozdělení databázové tabulky na více oddílů Kritéria pro rozdělení tabulky na oddíly SQL Server – námět pro praktické pokusy s rozdělením tabulky na oddíly SQL Server – rozdělení databáze na více souborů SQL Server – vytvoření oddílové funkce SQL Server – vytvoření oddílového schématu SQL Server – vytvoření databázové tabulky rozdělené na oddíly SQL Server – vkládání údajů do databázové tabulky rozdělené na oddíly SQL Server – výběr údajů do databázové tabulky rozdělené na oddíly SQL Server – nepřímé směrování dotazu do konkrétních oddílů SQL Server – přímé směrování dotazu do konkrétních oddílů SQL Server – jak zjistit počet záznamů v oddílech SQL Server – oddílová funkce pro zařazování podle textového atributu Oracle – možnosti rozdělení databázové tabulky na oddíly Oracle – jak na Range Partitioning Oracle – nepřímé směrování dotazu do konkrétních oddílů Oracle – jak na List Partitioning Oracle – co se stane při vložení záznamu nepatřícího do žádného oddílu Oracle – jak na Hash Partitioning SQL Server – přidělování výkonu a zdrojů prostřednictvím služby Resource Governor SQL Server – scénáře přidělování výkonu a zdrojů prostřednictvím služby Resource Governor SQL Server – princip fungování přerozdělování přes službu Resource Governor SQL Server – vytvoření a nastavení objektu Resource Pool SQL Server – přidělování kapacity pro Resource Pool SQL Server – definování zátěže SQL Server – co je to klasifikační funkce
369 369 370 370 371 371 371 372 372 373 373
375 375 375 376 376 376 377 377 378 378 378 378 379 379 379 379 380 380 380 381 381 381 382 382 383 383 383
Obsah
955 956
SQL Server – aktivování služby Resource Governor SQL Server – deaktivování služby Resource Governor
957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991
Určitě máte údaje. Máte také informace? Co je Business Intelligence Co je datový sklad Rozdíl mezi operační databází a datovým skladem Porovnání relačního a vícerozměrného databázového modelu K čemu slouží vícerozměrné databáze Vícerozměrný databázový model Řezy kostkou Co jsou to tabulky faktů Aditivní a neaditivní měřítka K čemu slouží tabulky dimenzí Co je komplexní dimenze Redundance v tabulkách dimenzí Co je to vícerozměrná OLAP kostka Schémata pro uspořádání tabulek faktů a dimenzí Co je to hvězdicové schéma Co je to schéma „sněhové vločky“ Příprava údajů pro příklady s operátory ROLLUP a CUBE Oracle – jak na operátor ROLLUP SQL Server – jak na operátor ROLLUP Jaké údaje vrátí příkaz SELECT s operátorem ROLLUP Oracle – jak na operátor CUBE SQL Server – jak na operátor CUBE Jaké údaje vrátí příkaz SELECT s operátorem CUBE Oracle – vytvoření parciální kostky pomocí operátoru CUBE SQL Server – vytvoření parciální kostky pomocí operátoru CUBE Jaké údaje vrátí příkaz SELECT pro parciální kostku vytvořenou operátorem CUBE Představují údaje v předchozím výpisu skutečně kostku? Oracle – vytvoření masky dimenzí pomocí klauzule GROUPING SQL Server – vytvoření masky dimenzí pomocí klauzule GROUPING Jaký má maska dimenzí význam Oracle – výpis přehledné kostky s využitím masky dimenzí SQL Server – výpis přehledné kostky s využitím masky dimenzí Co je to řídká kostka K čemu slouží kontingenční tabulka (Pivot Table)
Jednoduché řešení z oblasti Business Intelligence
31
383 384
385 385 385 385 386 386 386 387 387 388 388 388 389 389 390 390 390 390 391 392 392 392 393 393 393 394 394 395 395 395 395 396 396 396 396 397
32
Obsah
992 993 994 995 996 997 998
Jak převést klasickou tabulku na kontingenční Vytvoření kontingenční tabulky se souhrnnými údaji SQL Server – jak na operátory PIVOT a UNPIVOT SQL Server – příprava údajů pro příklad použití operátoru PIVOT SQL Server – příklad použití operátoru PIVOT SQL Server – příprava údajů pro příklad použití operátoru UNPIVOT SQL Server – příklad použití operátoru UNPIVOT
Vytvoření a naplnění testovacích tabulek 999 1000 1001 1002 1003 1004
Vytvoření testovacích tabulek pro Microsoft SQL Server Naplnění testovacích tabulek pro Microsoft SQL Server Vytvoření testovacích tabulek pro Oracle Naplnění testovacích tabulek pro Oracle Vytvoření testovacích tabulek pro MySQL Naplnění testovacích tabulek pro MySQL
Rejstřík
397 398 398 399 399 400 400
401 401 401 402 403 403 404
407