Design databáze RNDr. Ondřej Zýka 1
Návrh databáze Čtyři kroky Shromáždění business požadavků Konceptuální model Logický model Fyzický model Modelování od začátku nebo rozvoj stávajících systémů Nutnost začlenění okolních systémů (prostředí) Vazba na logický model organizace Vazba na existující datové modely 2 2
Shromáždění business požadavků Cíle Pochopit business doménu Porozumět potřebám a požadavkům zadavatelů a uživatelů Ověřit pochopení zadání Prostředky Interview Studium a dokumentace systémů Spolupráce s experty v business oblasti Informace o organizační struktuře a další dokumenty Data assesment Review stávajících systémů a procesů Výstup Prioritizovaný seznam požadavků Dokument popisující doménu (byznys slovník) Data-flow diagram 3 3
Data-flow diagram Data-flow diagram popisuje S jakými daty se pracuje Kdo data vytváří Kdo a jak data zpracovává (modifikuje) Kde jsou data uložena Kdo data používá Interface na úrovni dat Použití Datové toky na různých úrovních granularity Podnikové toky dat (obchodní procesy) Toky dat na technické úrovni Popisy ETL procesů Popisy integračních procesů Ověření Všechna data jsou definována Persistentní data jsou uložena Každá data mají zdroj Pro každá data existuje odběratel 4 4
Data-flow diagram - příklad Decomposition Level 2 1.1.1 databáze/ soubor CUSTOMER 1.1.2 CUSTOMER_ORDER Place Orders + [BOOK_ORDER] Book Supplier Receive Orders + 1.1.3 Book Shipment Invoice [SHIPMENT] Book Supplier datová entita/ business object funkce Process Invoices + [PAYMENT] Book Supplier vstup/výstup 5 5
Seznam požadavků 6 6
Seznam požadavků požadavku Krátký popis Podrobné vysvětlení Oblast / systém Vazba na další požadavky Zadavatel Priorita Funkční / nefunkční požadavky 7 7
Konceptuální model Cíle Určit entity a jejich atributy U atributů určit jejich hodnoty a vlastnosti U entit určit jejich potenciální klíče (identifikátory) Identifikovat vazby mezi entitami Kardinalita relace Jméno relace Popis (role) Výstupy ER diagram Formální ověření E/R diagramu Mezi každými dvěma entitami je maximálně jedna relace. Neexistuje cyklická závislost. Entity s relací typu 1:1 zřejmě budou tvořit pouze jednu entitu. Žádná entita nemá atribut, který je kandidátním klíčem jiné entity. Nepřímé relace jsou asi zbytečné. 8 8
Konceptuální model 9 9
10 10
Notace Mnoho standardů a dodavatelských specifik. UML notace dle standardu UML, použita ve všechny nástroje podporující UML. Information Engineering standard používaný v mnoha nástrojích. Existuje několik verzí. Obecně, entity jsou obdélníka a relace jsou linky s různými zakončeními. EF1X standardní notace pro modelování relací a entit. Symboly označují kombinaci volitelnosti a kardinality entity. Barker Vytvořena Richardem Barkerem. Používaná zejména case nastroji Oracle. Speciální notace pro dědičnost, vlastní notace pro násobnost a speciální značky pro atributy. Filtered IE pouze v Embarcadero. Nezobrazuje cizí klíče. Entity/Relationship Sybase specific, Entity/Relationship je speciální verze IE notace. Merise používá asociace místo relací. Crow's Feed Jedna z verzí IE notace, tuto notaci používá FSLDM. 11 11
Násobnost a volitelnost CAR Nejvíce jedno auto CAR Právě jedno auto CAR Libovolný počet aut CAR Alespoň jedno auto 12 12
Notace entit a atributů 13 13
Notace - příklady Allowed multiplicities N/A substituted by Not Used Used Not Used because not needed 14 14
Pravidla pro čtení relací Assertion 2: "Each LINE ITEM must be part of exactly one ORDER " Reading direction LINE ITEM Line number Quantity Price Delivery date part of 0..* 1 composed of ORDER Order number Order date Assertion 2: "Each ORDER may be composed of one or more LINE ITEMS " 15 15
Pravidla pro čtení 16 16
Vytvoření logického modelu Cíle Vytvořit platformově nezávislý logický datový model Postup Převést entity na tabulky Rozhodnout, jak se bude pracovat se složitými atributy Použít vhodné patterny Rozhodnout, jak se bude pracovat s atributy nabývajícími více hodnot Výběr primárních klíčů Převést binární relace (závislosti) typu 1:n na cizí klíče Vyřešit n-ární relace a relace typu n:n Rozhodnout o způsobu reprezentace subtypů Normalizace modelu Výstup Logický datový model 17 17
Kritéria pro výběr primárního klíče Primární klíč: musí mít vždy definovanou hodnotu (not null), musí mít stálou hodnotu (během celého životního cyklu řádku), musí být co možná nejmenší, nesmí obsahovat žádné zakódované informace, musí být přístupný pro všechny uživatele. Umělý klíč Nevýhody: přidává sloupec do tabulky (s indexem), hodnoty nemají význam pro uživatele Výhody: snadná implementace rozhraní, uniformní řešení 18 18
Vazba na objektové modelování Object-relational impedance mismatch Declarative vs. imperative interfaces RM data jako interface Schema bound RM Sloupec k jedné tabulce, tabulka do schématu, OOM dědičnost objektů Access rules RM relační algebra, OOM volnější a složitější konstrukty Relationship between nouns and actions OOM - úzká vazba mezi objekty a operacemi Uniqueness observation RM identifikace na základě klíče s jasným obsahem Normalization OOM nepoužívá se normalizace Schema inheritance RM nepoužívá se Structure vs. Behaviour OOM údržba, srozumitelnost, upravovatelnost, rozšiřitelnost, reuse, RM logická integrita, efektivita, fault-tolerance Set vs. graph relationships 19 19
Převod binární relace 1:N na cizí klíč 20 20
Převod závislosti na cizí klíč A U T H O R A U T H O R I D L A S T N A M E F I R S T N A M E P H O N E N U M B E R A D D R E S S A U T H O R A U T H O R I D L A S T N A M E F I R S T N A M E P H O N E N U M B E R A D D R E S S P I C T U R E P I C T U R E I D F O R M A T B Y T E S I Z E P I X E L W I D T H P I X E L H E I G H T P I C T U R E A U T H O R I D P I C T U R E I D F O R M A T B Y T E S I Z E P I X E L W I D T H P I X E L H E I G H T 21 21
Relace typu n:n AUTHOR AUTHOR LAST FIRST PHONE NUMBER ADDRESS BOOK BOOK TITLE CATEGORY QUANTITY SOLD AUTHOR AUTHOR LAST FIRST PHONE NUMBER ADDRESS AUTHOR-BOOK Associative entity BOOK BOOK TITLE CATEGORY QUANTITY SOLD 22 22
Rozhodnutí o reprezentaci dědičnosti Několik používaných možností V jedné tabulce: L-schéma Ve více tabulkách Parent pouze Společné atributy Child Všechny atributy Jenom specifické atributy 23 23
První normální forma Tabulka je v první normální formě, když každý sloupec obsahuje právě jeden atomický datový typ, který již nemá vnitřní strukturu z pohledu businessu. Business pohled je podstatný pro rozhodnutí o první normální formě. 24 24
Vytvoření fyzického modelu Cíle Vytvořit fyzický model s ohledem na specifika aplikace a použitý typ databáze, použitý hardware Postup Tabulky (jmenné konvence) Datové typy Vytvoření procesní matice Rozhodnutí o struktuře tabulek Rozhodnutí o primárním klíči (indexu) Implementace business pravidel - constraints Indexy, partitioning, Denormalizace, uložení redundantních dat, spojení tabulek Fyzické uložení tabulek Výstup Fyzický datový model Implementační skripty 25 25
Tabulky (jmenné konvence) Case sensitive/case insensitive servery Omezení délky jména tabulek (Oracle 30 znaků) Omezení délky jmen sloupců Omezení na jmenné prostory (tabulky, view, indexy, procedury, ) Porozumění modelu Datové tabulky Číselníky Logy Uživatelské tabulky Natural join 26 26
Datové typy Domain uživatelské datové typy + lepší porozumění + zajištění konzistence - nároky na údržbu Char, varchar, nvarchar, Numerické datové typy int, tinyint, bigint, numeric(p,s), Datum rozsah, přesnost, způsob práce Timestamp je to čas nebo není Binary, image, text, memo, Boolean - raději "column_name" CHAR(1) default 'A' not null constraint CKC_check_name check ("column_name" in ('A','Y')) Identity, Autoincrement NULL, Not null, Default value Speciální datové typy 27 27
Procesní matice 28 28
Rozhodnutí o struktuře tabulek Cíle: Minimalizovat velikost Použít optimální přístupové metody Standardní tabulka Insert, Delete, Update, Scan, Index Index-organized tables (Clustered index) + menší + rychlejší přístup po indexu - náročnější insert, delete (update) Oracle novější implementace, podpora 7x24 29 29
B-tree index příklad kořen vnitřní blok indexu listová úroveň indexu data klíč řádek blok Blok 1001 Bennet Chet 1421,1 1007 Karsen Kit 1876,4 1306 Smith Ade 1242,3 1062 Blok 1007 Bennet Chet 1421,1 1132 Fox John 1317,3 1133 Hunter Leon 1213,1 1127 Blok 1306 Karsen Kit 1876,4 1198 Larn Pard 1451,2 1199 Peters Mary 1856,4 1200 Blok 1132 Bennet Chet 1421,1 Burns Saly 1409,4 Claim Dave 1129,3 Dull Rob 1409,1 Blok 1133 Fox John 1317,3 Greane David 1876,4 Green Mitch 1213,2 Greene Joe 1409,2 Blok 1212 Larry John 254 A3 Jetkins Paul 244 C3 White Susan 156 A1 Blok 1213 Hunter Leon 124 A3 Green Mitch 125 B1 Smith Ade 156 A3 Blok 1421 Blok 1127 Bennet Chet 101 B2 Hunter Leon 1213,1 Jetkins Paul 1212,2 Ringer John 144 C1 INSERT INTO user VALUES ( Burns, Saly,128, A1 ) Blok 1409 Dull Rob 128 B1 Greene Joe 142 A2 Port Joe 156 C3 Burns Saly 128 A1 30 30
Clustered index příklad kořen vnitřní blok indexu listová úroveň indexu Blok 1132 klíč blok Blok 1007 Bennet Chet 101 B2 Burns Saly 128 A1 Blok 1001 Bennet Chet 1007 Karsen Kit 1306 Smith Ade 1062 Bennet Chet 1132 Fox John 1133 Hunter Leon 1127 Blok 1306 Karsen Kit 1198 Larn Pard 1199 Peters Mary 1200 Claim Dave 123 A1 Blok 1133 Fox John 100 A0 Greane David 111 E3 Green Mitch 125 B1 Greene Joe 156 C3 Blok 1127 Hunter Leon 122 A3 Jetkins Paul 124 A5 INSERT INTO user VALUES ( Burns, Saly,128, A1 ) 31 31
Implementace business pravidel Domain integrity - Check Na úrovni sloupce Null/Not null Default Check (format) Na úrovni řádku Entity integrity - primary key implementováno unikátním indexem na not null sloupcích záznam v katalogu Unikátnost hodnot implementováno unikátním indexem 32 32
Referenční integrita Implementace foreign key Deklarativní definice Použití triggerů Použití uložených procedur Kód aplikace Co se stane když Primární klíč se přidá/změní/zruší Cizí klíč se přidá/změní/zruší 33 33
Typy referenčních integrit Constraint Cascade update / delete Cascade Null Cascade Default Automatic insert Bez omezení Restriktivní Insert PK Zachování PK Zachování PK Zachování PK Zachování PK Zachování PK Zachování PK Zachování PK Insert FK Update PK Update FK Delete PK Pouze existující hodnoty PK Pouze pokud nemá vazbu Jen na existující hodnoty Pouze pokud nemá vazbu Pouze existující hodnoty PK Změní i odpovídající FK Jen na existující hodnoty Delete všech řádků s odpovídajícím FK Existující hodnoty PK nebo Null Odpovídající FK změní na Null Jen na existující hodnoty PK nebo Null Odpovídající FK změní na Null Existující hodnoty PK nebo Default Odpovídající FK změní na Default Jen na existující hodnoty PK nebo Default Odpovídající FK změní na Default Existující hodnoty nebo přidá řádek s PK Pouze pokud nemá vazbu Existující hodnoty nebo přidá řádek s PK Pouze pokud nemá vazbu Bez omezení (sirotci) Bez omezení (sirotci) Bez omezení (sirotci) Bez omezení (sirotci) Pouze existující hodnoty PK Není povoleno Jen na existující hodnoty Není povoleno Delete FK Bez omezení Bez omezení Bez omezení Bez omezení Bez omezení Bez omezení Bez omezení 34 34
Důsledky použití integritních omezení + zaručují konzistentní model - zvyšují výpočetní složitost i v případě, kdy nedochází ke změnám (Oracle not null) - komplikují údržbu povolení/zakázání ověřování integritních omezení 35 35
Denormalizace Partitioning Horizontální Vertikální Uložení vypočtených hodnot Eliminace nákladných joinů 36 36
Horizontální rozdělení tabulek Přístupy pouze na část tabulky Příklady: Aktivní a neaktivní položky Historické záznamy Možnosti Rozdělení tabulek Přidání tabulky (duplicitní záznamy) Partitioning Synchronizace Table partitioning Triggery Aplikační logika 37 37
Rozdělení tabulky Rozdělení tabulky Part 1 Part 1 Table Part 2 View Table Part 3 Výhody práce s menším množstvím dat méně problémů se zamykáním lepší řízení indexů možnost detailní optimalizace Nevýhody nutnost synchronizace triggery, aplikační logika Náročnější údržba 38 38
Partitioning Transparentní z pohledu aplikace Rozdělení dle daného rozsahu nebo hodnot Dynamicky podle hodnot Dynamicky vytvářeno pro každý měsíc Nejčastější použití Podle hash klíče (určuje se pouze počet partitions) Part 1 Part 2 Part 3 Part 4 Více úrovňový partitioning Podle času, podle pobočky Možnost individuálního řízení partition Omezený počet partition podle implementace 39 39
Vertikální rozdělení tabulek Přístupy pouze na některé sloupce tabulky Příklady: Bloby, obrázky, popisy Možnosti Rozdělení tabulek Přidání tabulky (duplicitní záznamy) Vytvoření indexu Synchronizace Triggery Aplikační logika 40 40
Rozdělení tabulky Rozdělení tabulky Table P a r t P a r t P a r t View Table P a r t 1 2 3 1 Výhody práce s menším množstvím dat méně problémů se zamykáním možnost optimalizace Nevýhody nutnost synchronizace triggery, aplikační logika náročnější údržba 41 41
Přidání indexů Transparentní z pohledu aplikace Jeden clustrovaný index Libovolný počet dalších indexů Automatická údržba Pokrývající dotazy I n d e x 1 I n d e x 2 Nároky na diskový prostor Snížení výkonu pro OLTP aplikace 42 42
Uložení vypočtených dat Přidání sloupce Přidání tabulky Synchronizace Trigerry Uložené procedury Aplikační logika Nutno zavést procedury pro údržbu a resynchronizaci 43 43
Materializovaná view Transparentní z pohledu aplikace Automatické řízení výpočtu view Nákladné výpočty, nutnost možnosti řízení výpočtů asynchronně Duplicitní uložení dat nároky na diskový prostor 44 44
Eliminace nákladných joinů Neustálé dotahování hodnot z číselníků Omezení datových serverů (Sybase třicet tabulek v jednom joinu) Suptype/supertype vazba Možnosti Redundantní data Spojení tabulek 45 45
Fyzické uložení tabulek Cíl Distribuce zátěže na co nejvíce fyzických disků Rozložení tabulek/indexů na disky Možnosti datových serverů (tablespace, segment) Možnosti hardware (SAN, NAS, diskové pole) Pouze RA 1+0 Vazba na počet procesorů Možnosti paralelního zpracování datového serveru 46 46
Indexy přístupové metody Typy indexů B-tree Clustered/nonclustered Bitmapové indexy Standardní index Hledání podle indexu Scan nejnižší úrovně Dotaz pokrytý indexem Ignorování indexu scan dat Clustered index Hledání podle indexu Scan dat od nalezeného řádku Scan nejnižší úrovně (scan dat) 47 47
Použití indexů Select Pokrývající query Group by Order by Join Nepoužívat indexy pro malé tabulky Selektivita indexů 48 48
Data uložená po sloupcích Vertica SAP Sybase IQ Oracle bitmapové indexy 49 49
Tabulka relační uložení dat DESCRIPTION QTY COLOUR PRICE PROVER WTH HEIGHT DEPTH NUMBER VARCHAR2(50 BYTE) VARCHAR2(500 BYTE) NUMBER VARCHAR2(20 BYTE) NUMBER VARCHAR2(40 BYTE) NUMBER NUMBER NUMBER Struktura tabulky DESCRIPTION QTY COLOUR PRICE PROVER WTH HEIGHT DEPTH DESCRIPTION QTY COLOUR PRICE PROVER WTH HEIGHT DEPTH DESCRIPTION QTY COLOUR PRICE PROVER WTH HEIGHT DEPTH DESCRIPTION DESCRIPTION QTY COLOUR QTY COLOUR PRICE PRICE PROVER PROVER WTH WTH HEIGHT HEIGHT DEPTH DEPTH DESCRIPTION DESCRIPTION QTY COLOUR QTY COLOUR PRICE PRICE PROVER PROVER WTH WTH HEIGHT HEIGHT DEPTH DEPTH DESCRIPTION DESCRIPTION QTY COLOUR QTY COLOUR PRICE PRICE PROVER PROVER WTH WTH HEIGHT HEIGHT DEPTH DEPTH DESCRIPTION DESCRIPTION QTY COLOUR QTY COLOUR PRICE PRICE PROVER PROVER WTH WTH HEIGHT HEIGHT DEPTH DEPTH DESCRIPTION DESCRIPTION DESCRIPTION QTY COLOUR QTY COLOUR QTY COLOUR PRICE PRICE PROVER PROVER PRICE PROVER WTH WTH WTH HEIGHT HEIGHT HEIGHT DEPTH DEPTH DEPTH DESCRIPTION DESCRIPTION QTY COLOUR QTY COLOUR PRICE PROVER PRICE PROVER WTH WTH HEIGHT HEIGHT DEPTH DEPTH DESCRIPTION DESCRIPTION QTY COLOUR QTY COLOUR PRICE PROVER PRICE PROVER WTH WTH HEIGHT HEIGHT DEPTH DEPTH DESCRIPTION DESCRIPTION QTY COLOUR QTY COLOUR PRICE PROVER PRICE PROVER WTH WTH HEIGHT HEIGHT DEPTH DEPTH DESCRIPTION QTY COLOUR PRICE PROVER WTH HEIGHT DEPTH DESCRIPTION QTY COLOUR PRICE PROVER WTH HEIGHT DEPTH DESCRIPTION QTY COLOUR PRICE PROVER WTH HEIGHT DEPTH DESCRIPTION QTY COLOUR PRICE PROVER WTH HEIGHT DEPTH DESCRIPTION QTY COLOUR PRICE PROVER WTH HEIGHT DEPTH DESCRIPTION QTY COLOUR PRICE PROVER WTH HEIGHT DEPTH DESCRIPTION QTY COLOUR PRICE PROVER WTH HEIGHT DEPTH DESCRIPTION QTY COLOUR PRICE PROVER WTH HEIGHT DEPTH DESCRIPTION QTY COLOUR PRICE PROVER WTH HEIGHT DEPTH DESCRIPTION QTY COLOUR PRICE PROVER WTH HEIGHT DEPTH DESCRIPTION QTY COLOUR PRICE PROVER WTH HEIGHT DEPTH DESCRIPTION QTY COLOUR PRICE PROVER WTH HEIGHT DEPTH Datové bloky 50 50
Tabulka data uložená po sloupcích DESCRIPTION QTY COLOUR PRICE PROVER WTH HEIGHT DEPTH NUMBER VARCHAR2(50 BYTE) VARCHAR2(500 BYTE) NUMBER VARCHAR2(20 BYTE) NUMBER VARCHAR2(40 BYTE) NUMBER NUMBER NUMBER Struktura tabulky COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR COLOUR QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY QTY Datové bloky 51 51
Data uložená po sloupcích SELECT Count(*) FROM sale where color = Green SELECT Count(*) FROM sale where color in ( Green, Red ) 52 52
Data uložená po sloupcích SELECT SUM(qty) FROM sale (2 * 64) + (3 * 32) + (2 * 16) + (1 * 8) + (3 * 4) + (2 * 2) + (3 * 1) = 283 53 53
Bitmapové indexy Rychlé pro sloupce s malou kardinalitou Rychlé pro operace na málo sloupcích Složitý update Zamykání a rebuild velkých bloků Pomalé pro dotaz na jeden konkrétní řádek 54 54
Metody ukládání bitmapových indexů Samé nuly nebo jedničky Bloky se neukládají pouze indikátor jejich existence Do 20% nul nebo jedniček Data se kódují jako souvislé množiny hodnot Mezi 20% a 80% jedniček Ukládá se skutečná mapa hodnot 55 55
Typy sloupcových indexů Mnoho různých typů Více indexů na jednom sloupci Bitový index pro sloupce s malou kardinalitou Bitový index pro sloupce s velkou kardinalitou a malou selektivností Indexy pro sloupce s velkou kardinalitou G-Array (příbuzný B-tree) Prosté komprimované uložení dat (pro textové řetězce) Speciální indexy pro čas a datum Indexy pro joiny, porovnání a další operace 56 56
Velikost databáze (GB) Sybase IQ uložení dat a indexů 500 450 400 350 300 250 200 150 100 50 0 Čistá data Indexy Sumace Čistá data CBRD Tradiční RDBMS Indexy jsou už data Nízké náklady na uložení dat Rychlé zpracování malého množství dat 57 57
Co si zapamatovat Jaké jsou hlavní kroky při návrhu datového modelu Co to je konceptuální model a co obsahuje Co je cílem sběru byznys požadavků při vytváření konceptuálního modelu Co je logický model a co obsahuje Jaké aktivity je nutné provést při převodu konceptuálního datového modelu na logický datový model Jaké požadavky je potřeba brát v úvahu při výběru primárních klíčů Jaké jsou hlavní rozdíly mezi relačním a objektově orientovaném modelování Kdy a proč se vytváří fyzický datový model Které aktivity je nutné provést při převodu logického datového modelu na fyzický datový model Co to je denormalizace Jaké typy denormalizace znáte Jaký je rozdíl mezi strukturou tabulky s klastrovaným a neklastrovaným indexem K čemu slouží indexy a pro jaké přístupové metody k datům se používají Jak vypadají bitmapové indexy Co to je sloupcové uložení dat (sloupcové indexy) 58 58
Diskuse Otázky Poznámky Komentáře Připomínky 59