Design databáze NDBI036 2013/14 RNDr. Ondřej Zýka, ndrej.zyka@prfinit.eu
Návrh databáze Čtyři krky Shrmáždění business pžadavků Knceptuální mdel Lgický mdel Fyzický mdel Mdelvání d začátku neb rzvj stávajících systémů Nutnst začlenění klních systémů (prstředí) Vazba na lgický mdel rganizace Vazba na existující datvé mdely
Shrmáždění business pžadavků Cíle Pchpit business dménu Przumět ptřebám a pžadavkům zadavatelů a uživatelů Ověřit pchpení zadání Prstředky Interview Studium a dkumentace systémů Splupráce s experty v business blasti Infrmace rganizační struktuře a další dkumenty Data assesment Review stávajících systémů a prcesů Výstup Priritizvaný seznam pžadavků Dkument ppisující dménu (byznys slvník) Data-flw diagram
Data-flw diagram Data-flw diagram ppisuje S jakými daty se pracuje Kd data vytváří Kd a jak data zpracvává (mdifikuje) Kde jsu data ulžena Kd data pužívá Interface na úrvni dat Pužití Datvé tky na různých úrvních granularity Pdnikvé tky dat (bchdní prcesy) Tky dat na technické úrvni Ppisy ETL prcesů Ppisy integračních prcesů Ověření Všechna data jsu definvána Persistentní data jsu ulžena Každá data mají zdrj Pr každá data existuje dběratel
Data-flw diagram - příklad Decmpsitin Level 2 1.1.1 databáze/ subr CUSTOMER 1.1.2 CUSTOMER_ORDER Place Orders + [BOOK_ORDER] Bk Supplier Receive Orders + 1.1.3 Bk Shipment Invice [SHIPMENT] Bk Supplier datvá entita/ business bject funkce Prcess Invices + [PAYMENT] Bk Supplier vstup/výstup
Seznam pžadavků
Seznam pžadavků pžadavku Krátký ppis Pdrbné vysvětlení Oblast / systém Vazba na další pžadavky Zadavatel Pririta Funkční / nefunkční pžadavky
Knceptuální mdel Cíle Určit entity a jejich atributy U atributů určit jejich hdnty a vlastnsti U entit určit jejich ptenciální klíče (identifikátry) Identifikvat vazby mezi entitami Výstupy Kardinalita relace Jmén relace Ppis (rle) ER diagram Frmální věření E/R diagramu Mezi každými dvěma entitami je maximálně jedna relace. Neexistuje cyklická závislst. Entity s relací typu 1:1 zřejmě budu tvřit puze jednu entitu. Žádná entita nemá atribut, který je kandidátním klíčem jiné entity. Nepřímé relace jsu asi zbytečné.
Knceptuální mdel
Ntace Mnh standardů a ddavatelských specifik. UML ntace dle standardu UML, pužita ve všechny nástrje pdprující UML. Infrmatin Engineering standard pužívaný v mnha nástrjích. Existuje něklik verzí. Obecně, entity jsu bdélníka a relace jsu linky s různými zaknčeními. EF1X standardní ntace pr mdelvání relací a entit. Symbly značují kmbinaci vlitelnsti a kardinality entity. Barker Vytvřena Richardem Barkerem. Pužívaná zejména case nastrji Oracle. Speciální ntace pr dědičnst, vlastní ntace pr násbnst a speciální značky pr atributy. Filtered IE puze v Embarcader. Nezbrazuje cizí klíče. Entity/Relatinship Sybase specific, Entity/Relatinship je speciální verze IE ntace. Merise pužívá asciace míst relací. Crw's Feed Jedna z verzí IE ntace, tut ntaci pužívá FSLDM.
Násbnst a vlitelnst CAR Nejvíce jedn aut CAR Právě jedn aut CAR Libvlný pčet aut CAR Alespň jedn aut
Ntace entit a atributů
Ntace - příklady Allwed multiplicities N/A substituted by Nt Used Used Nt Used because nt needed
Pravidla pr čtení relací Assertin 2: "Each LINE ITEM must be part f exactly ne ORDER " Reading directin LINE ITEM Line number Quantity Price Delivery date part f 0..* 1 cmpsed f ORDER Order number Order date Assertin 2: "Each ORDER may be cmpsed f ne r mre LINE ITEMS "
Pravidla pr čtení
Vytvření lgickéh mdelu Cíle Vytvřit platfrmvě nezávislý lgický datvý mdel Pstup Převést entity na tabulky Rzhdnut, jak se bude pracvat se slžitými atributy Rzhdnut, jak se bude pracvat s atributy nabývajícími více hdnt Výběr primárníh klíče Převést binární relace (závislsti) typu 1:n na cizí klíče Vyřešit n-ární relace a relace typu n:n Rzhdnut způsbu reprezentace subtypů Nrmalizace mdelu Výstup Lgický datvý mdel
Kritéria pr výběr primárníh klíče Primární klíč: musí mít vždy definvanu hdntu (nt null), musí mít stálu hdntu (během celéh živtníh cyklu řádku), musí být c mžná nejmenší, nesmí bsahvat žádné zakódvané infrmace, musí být přístupný pr všechny uživatele. Umělý klíč Nevýhdy: přidává slupec d tabulky (s indexem), hdnty nemají význam pr uživatele Výhdy: snadná implementace rzhraní, unifrmní řešení
Vazba na bjektvé mdelvání Object-relatinal impedance mismatch Declarative vs. imperative interfaces RM data jak interface Schema bund RM Slupec k jedné tabulce, tabulka d schématu, OOM dědičnst bjektů Access rules RM relační algebra, OOM vlnější a slžitější knstrukty Relatinship between nuns and actins OOM - úzká vazba mezi bjekty a peracemi Uniqueness bservatin RM identifikace na základě klíče s jasným bsahem Nrmalizatin OOM nepužívá se nrmalizace Schema inheritance RM nepužívá se Structure vs. Behaviur OOM údržba, srzumitelnst, upravvatelnst, rzšiřitelnst, reuse, RM lgická integrita, efektivita, fault-tlerance Set vs. graph relatinships
Převd binární relace 1:N na cizí klíč
Převd závislsti 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
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 Assciative entity BOOK BOOK TITLE CATEGORY QUANTITY SOLD
Rzhdnutí reprezentaci dědičnsti Něklik pužívaných mžnstí V jedné tabulce: L-schéma Ve více tabulkách Všechny atributy Jenm vlastní atributy
První nrmální frma Tabulka je v první nrmální frmě, když každý slupec bsahuje právě jeden atmický datvý typ, který již nemá vnitřní strukturu z phledu businessu. Pr rzhdnutí primárních a cizích klíčích musí být tabulka v prvním nrmálním tvaru.
Vytvření fyzickéh mdelu Cíle Vytvřit fyzický mdel s hledem na specifika aplikace a pužitý typ databáze, pužitý hardware Pstup Tabulky (jmenné knvence) Datvé typy Vytvření prcesní matice Rzhdnutí struktuře tabulek Rzhdnutí primárním klíči (indexu) Implementace business pravidel - cnstraints Indexy, partitining, Denrmalizace, ulžení redundantních dat, spjení tabulek Fyzické ulžení tabulek Výstup Fyzický datvý mdel Implementační skripty
Tabulky (jmenné knvence) Case sensitive/case insensitive servery Omezení délky jména tabulek (Oracle 30 znaků) Omezení délky jmen slupců Omezení na jmenné prstry (tabulky, view, indexy, prcedury, ) Przumění mdelu Datvé tabulky Číselníky Lgy Uživatelské tabulky Natural jin
Datvé typy Dmain uživatelské datvé typy + lepší przumění + zajištění knzistence - nárky na údržbu Char, varchar, nvarchar, Numerické datvé typy int, tinyint, bigint, numeric(p,s), Datum rzsah, přesnst, způsb práce Timestamp je t čas neb není Binary, image, text, mem, Blean - raději "clumn_name" CHAR(1) default 'A' nt null cnstraint CKC_check_name check ("clumn_name" in ('A','Y')) Identity, Autincrement NULL, Nt null, Default value Speciální datvé typy
Prcesní matice
Rzhdnutí struktuře tabulek Cíle: Minimalizvat velikst Pužít ptimální přístupvé metdy Standardní tabulka Insert, Delete, Update, Scan, Index Index-rganized tables (Clustered index) + menší + rychlejší přístup p indexu - nárčnější insert, delete (update) Oracle nvější implementace, pdpra 7x24
Implementace business pravidel Dmain integrity - Check Na úrvni slupce Null/Nt null Default Check (frmat) Na úrvni řádku Entity integrity - primary key implementván unikátním indexem na nt null slupcích záznam v katalgu Unikátnst hdnt implementván unikátním indexem
Referenční integrita Implementace freign key Deklarativní definice Pužití triggerů Pužití ulžených prcedur Kód aplikace C se stane když Primární klíč se přidá/změní/zruší Cizí klíč se přidá/změní/zruší
Typy referenčních integrit Cnstraint Cascade update / delete Cascade Null Cascade Default Autmatic insert Bez mezení Restriktivní Insert PK Zachvání PK Zachvání PK Zachvání PK Zachvání PK Zachvání PK Zachvání PK Zachvání PK Insert FK Update PK Update FK Delete PK Puze existující hdnty PK Puze pkud nemá vazbu Jen na existující hdnty Puze pkud nemá vazbu Puze existující hdnty PK Změní i dpvídající FK Jen na existující hdnty Delete všech řádků s dpvídajícím FK Existující hdnty PK neb Null Odpvídající FK změní na Null Jen na existující hdnty PK neb Null Odpvídající FK změní na Null Existující hdnty PK neb Default Odpvídající FK změní na Default Jen na existující hdnty PK neb Default Odpvídající FK změní na Default Existující hdnty neb přidá řádek s PK Puze pkud nemá vazbu Existující hdnty neb přidá řádek s PK Puze pkud nemá vazbu Bez mezení (sirtci) Bez mezení (sirtci) Bez mezení (sirtci) Bez mezení (sirtci) Puze existující hdnty PK Není pvlen Jen na existující hdnty Není pvlen Delete FK Bez mezení Bez mezení Bez mezení Bez mezení Bez mezení Bez mezení Bez mezení
Důsledky pužití integritních mezení + zaručují knzistentní mdel - zvyšují výpčetní slžitst i v případě, kdy nedchází ke změnám (Oracle nt null) - kmplikují údržbu pvlení/zakázání věřvání integritních mezení
Denrmalizace Partitining Hrizntální Vertikální Ulžení vypčtených hdnt Eliminace nákladných jinů
Hrizntální rzdělení tabulek Přístupy puze na část tabulky Příklady: Aktivní a neaktivní plžky Histrické záznamy Mžnsti Rzdělení tabulek Přidání tabulky (duplicitní záznamy) Partitining Synchrnizace Table partitining Triggery Aplikační lgika
Rzdělení tabulky Rzdělení tabulky Part 1 Part 1 Table Part 2 View Table Part 3 Výhdy práce s menším mnžstvím dat méně prblémů se zamykáním lepší řízení indexů mžnst detailní ptimalizace Nevýhdy nutnst synchrnizace triggery, aplikační lgika Nárčnější údržba
Partitining Transparentní z phledu aplikace Rzdělení dle danéh rzsahu neb hdnt Dynamicky pdle hdnt Dynamicky vytvářen pr každý měsíc Nejčastější pužití Pdle hash klíče (určuje se puze pčet partitins) Part 1 Part 2 Part 3 Part 4 Více úrvňvý partitining Pdle času, pdle pbčky Mžnst individuálníh řízení partitin Omezený pčet partitin pdle implementace
Vertikální rzdělení tabulek Přístupy puze na některé slupce tabulky Příklady: Blby, brázky, ppisy Mžnsti Rzdělení tabulek Přidání tabulky (duplicitní záznamy) Vytvření indexu Synchrnizace Triggery Aplikační lgika
Rzdělení tabulky Rzdě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ýhdy práce s menším mnžstvím dat méně prblémů se zamykáním mžnst ptimalizace Nevýhdy nutnst synchrnizace triggery, aplikační lgika nárčnější údržba
Přidání indexů Transparentní z phledu aplikace Jeden clustrvaný index Libvlný pčet dalších indexů Autmatická údržba Pkrývající dtazy I n d e x 1 I n d e x 2 Nárky na diskvý prstr Snížení výknu pr OLTP aplikace
Ulžení vypčtených dat Přidání slupce Přidání tabulky Synchrnizace Trigerry Ulžené prcedury Aplikační lgika Nutn zavést prcedury pr údržbu a resynchrnizaci
Materializvaná view Transparentní z phledu aplikace Autmatické řízení výpčtu view Nákladné výpčty, nutnst mžnsti řízení výpčtů asynchrnně Duplicitní ulžení dat nárky na diskvý prstr
Eliminace nákladných jinů Neustálé dtahvání hdnt z číselníků Omezení datvých serverů (Sybase třicet tabulek v jednm jinu) Suptype/supertype vazba Mžnsti Redundantní data Spjení tabulek
Fyzické ulžení tabulek Cíl Distribuce zátěže na c nejvíce fyzických disků Rzlžení tabulek/indexů na disky Mžnsti datvých serverů (tablespace, segment) Mžnsti hardware (SAN, NAS, diskvé ple) Puze RA 1+0 Vazba na pčet prcesrů Mžnsti paralelníh zpracvání datvéh serveru
B-tree index příklad křen vnitřní blk indexu listvá úrveň indexu data klíč řádek blk Blk 1001 Bennet Chet 1421,1 1007 Karsen Kit 1876,4 1306 Smith Ade 1242,3 1062 Blk 1007 Bennet Chet 1421,1 1132 Fx Jhn 1317,3 1133 Hunter Len 1213,1 1127 Blk 1306 Karsen Kit 1876,4 1198 Larn Pard 1451,2 1199 Peters Mary 1856,4 1200 Blk 1132 Bennet Chet 1421,1 Burns Saly 1409,4 Claim Dave 1129,3 Dull Rb 1409,1 Blk 1133 Fx Jhn 1317,3 Greane David 1876,4 Green Mitch 1213,2 Greene Je 1409,2 Blk 1212 Larry Jhn 254 A3 Jetkins Paul 244 C3 White Susan 156 A1 Blk 1213 Hunter Len 124 A3 Green Mitch 125 B1 Smith Ade 156 A3 Blk 1421 Blk 1127 Bennet Chet 101 B2 Hunter Len 1213,1 Jetkins Paul 1212,2 Ringer Jhn 144 C1 INSERT INTO user VALUES ( Burns, Saly,128, A1 ) Blk 1409 Dull Rb 128 B1 Greene Je 142 A2 Prt Je 156 C3 Burns Saly 128 A1
Clustered index příklad křen vnitřní blk indexu listvá úrveň indexu klíč blk Blk 1001 Bennet Chet 1007 Karsen Kit 1306 Smith Ade 1062 Blk 1007 Bennet Chet 1132 Fx Jhn 1133 Hunter Len 1127 Blk 1306 Karsen Kit 1198 Larn Pard 1199 Peters Mary 1200 Blk 1132 Bennet Chet 101 B2 Burns Saly 128 A1 Claim Dave 123 A1 Blk 1133 Fx Jhn 100 A0 Greane David 111 E3 Green Mitch 125 B1 Greene Je 156 C3 Blk 1127 Hunter Len 122 A3 Jetkins Paul 124 A5 INSERT INTO user VALUES ( Burns, Saly,128, A1 )
Indexy přístupvé metdy Typy indexů B-tree Clustered/nnclustered Bitmapvé indexy Standardní index Hledání pdle indexu Scan nejnižší úrvně Dtaz pkrytý indexem Ignrvání indexu scan dat Clustered index Hledání pdle indexu Scan dat d nalezenéh řádku Scan nejnižší úrvně (scan dat)
Pužití indexů Select Pkrývající query Grup by Order by Jin Nepužívat indexy pr malé tabulky Selektivita indexů
Data ulžená p slupcích Vertica SAP Sybase IQ Oracle bitmapvé indexy
Tabulka relační ulž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 Datvé blky 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
Tabulka data ulžená p slupcí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 Datvé blky 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
Data ulžená p slupcích SELECT Cunt(*) FROM sale where clr = Green SELECT Cunt(*) FROM sale where clr in ( Green, Red )
Data ulžená p slupcích SELECT SUM(qty) FROM sale (2 * 64) + (3 * 32) + (2 * 16) + (1 * 8) + (3 * 4) + (2 * 2) + (3 * 1) = 283
Bitmapvé indexy Rychlé pr slupce s malu kardinalitu Rychlé pr perace na mál slupcích Slžitý update Zamykání a rebuild velkých blků Pmalé pr dtaz na jeden knkrétní řádek
Metdy ukládání bitmapvých indexů Samé nuly neb jedničky Blky se neukládají puze indikátr jejich existence D 20% nul neb jedniček Data se kódují jak suvislé mnžiny hdnt Mezi 20% a 80% jedniček Ukládá se skutečná mapa hdnt
Typy slupcvých indexů Mnh různých typů Více indexů na jednm slupci Bitvý index pr slupce s malu kardinalitu Bitvý index pr slupce s velku kardinalitu a malu selektivnstí Indexy pr slupce s velku kardinalitu G-Array (příbuzný B-tree) Prsté kmprimvané ulžení dat (pr textvé řetězce) Speciální indexy pr čas a datum Indexy pr jiny, prvnání a další perace
Velikst databáze (GB) Sybase IQ ulžení dat a indexů 500 450 400 350 300 250 200 150 100 50 0 Indexy Sumace Čistá data Čistá data CBRD Tradiční RDBMS Indexy jsu už data Nízké náklady na ulžení dat Rychlé zpracvání maléh mnžství dat
C si zapamatvat Jaké jsu hlavní krky při návrhu datvéh mdelu C t je knceptuální mdel a c bsahuje C je cílem sběru byznys pžadavků při vytváření knceptuálníh mdelu C je lgický mdel a c bsahuje Jaké aktivity je nutné prvést při převdu knceptuálníh datvéh mdelu na lgický datvý mdel Jaké pžadavky je ptřeba brát v úvahu při výběru primárních klíčů Jaké jsu hlavní rzdíly mezi relačním a bjektvě rientvaném mdelvání Kdy a prč se vytváří fyzický datvý mdel Které aktivity je nutné prvést při převdu lgickéh datvéh mdelu na fyzický datvý mdel C t je denrmalizace Jaké typy denrmalizace znáte Jaký je rzdíl mezi strukturu tabulky s klastrvaným a neklastrvaným indexem K čemu služí indexy a pr jaké přístupvé metdy k datům se pužívají Jak vypadají bitmapvé indexy C t je slupcvé ulžení dat (slupcvé indexy)
www.prfinit.eu Diskuse