A zpět k PEPOvi
Pepa PEPRO Komponenty Advice to Ministers Policy & Planning Capability Management Advice Availability Advice Technology Awareness Technology Capability in Supplies Innovative Solutions Organizování výzkumných přírůstků [dstl] QinetiQ Industry Universities
Franta FRAPRO HTML + Javascript DLL + XAML Mashup UI Data (XML, JSON) Data (XML, JSON) Data (XML, JSON) Data Feeds
Organizace databáze [datového prostoru] Pepa Franta PEPRO PRO FRAPRO Zakaznik konflikt jmen Zakaznik
Konflikty jmen DB objektů pane řediteli, pane řediteli ty ty dva se se tam perou buh ví, v, jak to to skončí a máme m me problém teď máme me vyvíjet systém jak to to uděláme se se jmény DB objektů abychom se se nedostali do do konfliktu se se všemi databázemi na na světě 5
Konflikty jmen Ucet Prodej Nákup Sys_X Faktura Faktura Faktura Faktura Faktura v jedené databázi mám více systémů -DB modelů jméno DB objektu musí být jednoznačné jak vyřeším případný konflikt jednoznačných jmen rozdělěním katalogu [metadat] rozparcelujem to 6
Organizace databáze [datového prostoru] SŘDB databázový stroj Datový prostor Datový prostor [Databáze] Schema1 Schema2 Schema3 Schema4 Schema5 Schema6
Organizace databáze [datového prostoru] SŘDB databázový stroj Datový prostor Datový prostor [datab atabáze] [db cluster ] Schema1 datový prostor je rozdělen do částí [subdatabází] - schemat schema je pojmenovaná část datového prostoru schema je kontejner pojmenovaných DB objektů Schema4 jména DB objektů jsou [ve schematu] jednoznačná logická skupina SQL objektů samostatný jmenný prostor SQL objektů
Organizace databáze [datového prostoru] SŘDB databázový stroj Datový prostor Datový prostor [Databáze] rozdělen na 6 schemat PEPRO PRO FRAPRO TEST VYVOJ SKLAD BRNO
MySQL organizace databáze [disk. prostoru] MySQL databázový stroj Datový prostor Datový prostor prostor členěn na Database database - jmenný prostor DB objektů Database1 ase1 Database2 Database3 DB_VYVOJ DB_SKLAD DB_BRNO BRNO
Důvody pro členění do schemat DB prostor je rozdělěn do schemat Schema1 Schema2 Schema3 schema je kontejnerem jednoznačných jmen DB objektů důvody: jednu DB může užívat mnoho uživatelů [stovky] aniž by se vzájemně rušili a vytvářely konflikty jmen organizování DB objektů [tabulek, indexů,...] do logických skupin snazší údržba a řízení metadat aplikace třetích stran lze začlenit do systému bez kolizí se jmeny vlastních systémů 11
Důvody pro členění do schemat koncept schemat ==>> organizace souboru do adresářů pouze jednoúrovňové členění Schema1 Schema2 Schema3 do schemat je rozdělen pouze KATALOG metadat logické dělění katalogu [jmen objektů] nejde o fyzické dělení prostoru databáze -- diskových dat!!! pouze členění jmen DB objektů v katalogu DB 12
Create Schema (standard, PostgreSQL,...) CREATE SCHEMA JmenoSchematu; CREATE SCHEMA Provoz; Provoz ve schematu Provoz budou později vytvořeny DB objekty a komu prosím že e to to schéma patří? kdo se se v něm n m mmůže šťourat? tomu, kdo ho vytvořil tomu, kdo zadal povel a to to jáj játo to nechám m na na administrátorovi torovi 13
Create Schema (standard, PostgreSQL,...) Provoz schema - kontejner pro jména [vytvářených] DB objektů od definice - vytvoření musí existovat někdo s oprávněním činit něco s objekty ve schematu [vlastník] tvořit měnit rušit... určit onoho někoho [vlastníka schemantu] je nutné již při definici schematu 14
Create Schema (standard, PostgreSQL,...) při vytvoření schematu je určen vlastník schematu vlastník schematu má všechna práva schematu DB objektů, které jsou ve schematu vytvořeny CREATE SCHEMA JmenoSchematu AUTORIZATION Uzivatel; CREATE SCHEMA Provoz AUTORIZATION Karel; Provoz a když nezadám m Autorizaci tak takco co?????? 15
a co co když o schematu nevím??? a co takhle běžné schema??
Koncepce DB schemat vytvořili jsme tabulky Osoba Kamarad kam ty tabulky patří? ve kterém jsou schematu? Osoba rc prijmeni jmeno adresa datnar pohlavi Kamarad Jmeno RokNar Telef Jana 1986 088-111 Joe 1985 730 555 888 v běžb ěžném m schematu!!! a jak se se bběžné schema určuje uje [[přepíná]? v některých DB strojích snadno MySQL povel USE v některých toporně PostgreSQL povel SET v některých to nelze Oracle nijak
Běžné schema každý DB objekt patří do nějakého schematu oslovujeme-li objekt musíme určit ze kterého schematu je Insert Into Schema1. Kamarad (...) Values (...); Delete From Provoz. Faktura Where...; Update Pepro. Zakaznik Set...; pokud ve jménu není Schema automaticky se objekt vezme z běžného schematu Insert Into Kamarad (...) Values (...); Delete From Faktura Where...; Update Zakaznik Set...; u některých DBS lze běžné schema přepínat
Běžné schema - MySQL každé [existující] schema na které má uživatel právo užívání si může zvolit jako běžné povelem USE Create Schema Barbora; Use Barbora; Create Table Kamarad (...); Use Vendula; Create Table Kamarad (...); 1. tabulka Kamarad byla vytvořena ve schematu Barbora 2. tabulka Kamarad byla vytvořena ve schematu Vendula Update Vendula. Kamarad... Update Barbora. Kamarad... zobrazení jména běžného schematu Select Schema();
Běžné schema - Oracle schema je kolekcí logických struktur dat schema je schematem objektů každé schema vlastní jeden DB uživatel v katalogu DB - evidence všech uživatelů uživatel je někdo kdo se může připojit k Oracle DB a mít tam privilegia při i vytvořen ení uživatele se ihned vytvoří schema se stejným jménem schema vlastní jeho uživatel toto schema je pro daného uživatele běžné
Běžné schema - Oracle uživatel nemůže své [běžné] schema měnit vztah mezi uživatelem a jeho schematem 1 : 1 uživatel vlastní své schema a všechny DB objekty ve schematu uživatel bez kvalifikace oslovuje pouze své objekty objekty jiných schemat oslovuje vždy kvalifikovaně
Koncepce schemat - Oracle neexistuje vztah mezi fyzickými diskovými oblastmi a mezi schematy schemata = logické -- ne fyzické členění
a zas něco jiného výjimečně neschematického ho každé jméno má své jméno
DB jména každý DB objekt je pojmenován existují 2 druhy SQL jmen nonquoted identifier [ bez " " ] quoted identifier [ delimited ] [ "jméno" " ] 24
DB jména xxx nonquoted identifier [ bez " " ] začíná anglickým písmenem A..Z, _, $ [PostreSql $ ] A..Z, _, $, 0..9 [PostreSql $ ] nelze užít rezervované SQL slovo nelze užít českých [švédských, azbuka,...] znaků nerozlišuje se malá a velká písmena malá písmena jsou převedena na velká 25
DB jména nonquoted identifier [ bez " " ] Table Column Insert želva moje%tab... Table Tables Zelva _Fakt TABLES ZELVA _FAKT 26
DB jména xxx quoted identifier [ "jméno " ] začíná a končí " " uvnitř cokoliv mimo " [čeština... #$%^...] lze užít rezerovaná slova rozlišují se malá a velká písmena malá písmena nejsou převedena na velká nikdy to [ radši ] neužijte [ až na pár komentovaných výjimek ] toto užívání nechte DB Serveru [ má to hlavně pro sebe ] 27
DB jména MySQL [`jm quoted identifier MySQL [`jméno` ] užívá místo uvozovek zborcený apostrof `Table` `Column ` `Insert Delete From` `želva i pšstros ` `moje%tab` `@#$%^&` `Table` 28
DB jména maximální délka DB jména nejednotné u některých DB různé u různých pojmenování Oracle PostgreSQL MySQL 30 31 [ MAXLEN-1 ] 64 29
A zpět do Tabulek