create table Region
( idRegion int not null primary key,
  kraj varchar(64) not null
  );
   
create table Adresa
( idAdresa int not null primary key,
  mesto varchar(64) not null,
  ulice varchar(128) not null,
  idRegion int references Region( idRegion )
  );
  
create table Obchodnik
( idObchodnik int not null primary key,
  idManager int references Obchodnik( idObchodnik ),
  jmenoObchodnika varchar(64) not null,
  idAdresa int references Adresa( idAdresa ),
  idRegion int references Region( idRegion ),
  provize double precision, 
  vekObchodnika int 
  );
CREATE UNIQUE INDEX jmenoObchodnik_idx ON Obchodnik(jmenoObchodnika);

create table Zakaznik
( idZakaznik int not null primary key,
  jmenoZakaznika varchar(64) not null,
  idAdresa int references Adresa( idAdresa ),
  bonita int,
  idObchodnik int references Obchodnik( idObchodnik ),
  vekZakaznika int
  );
CREATE UNIQUE INDEX jmenoZakaznik_idx ON Zakaznik(jmenoZakaznika);

create table ZboziKategorie
( idZboziKategorie int not null primary key,
  popisKategorie varchar(128) not null
);

create table ZboziKatalog
( idZboziKatalog int not null primary key,
  popisxml xml  null,
  popisjson jsonb  null
 );
CREATE INDEX popisjson_idxgin ON ZboziKatalog USING GIN (popisjson);
 
create table Objednavka
( idObjednavka int not null primary key,
  datum date not null,
  idZakaznik int not null references Zakaznik( idZakaznik ),
  idObchodnik int not null references Obchodnik( idObchodnik)
 );
 
create table ObjednavkaPolozka
( idObjednavkaPolozka int not null primary key,
  idObjednavka int not null references Objednavka( idObjednavka ),
  idZboziKatalog int not null references ZboziKatalog( idZboziKatalog ),
  mnozstviKus int,
  cenaKus double precision
 );

insert into Region values( 6001, 'Statutární město Praha' );
insert into Region values( 6002, 'Jižní čechy' );
insert into Region values( 6003, 'Statutární město Brno' );
insert into Region values( 6004, 'Západní čechy - plzeňsko' );
insert into Region values( 6005, 'Východní čechy - pardubicko' );
insert into Region values( 6006, 'Západní čechy - karlovarsko' );
insert into Region values( 6007, 'Jižní morava' );
insert into Region values( 6008, 'Východní slovensko' );
insert into Region values( 6009, 'Bratislava' );
insert into Region values( 6010, 'Západní slovensko' );

insert into Adresa values( 4001, 'Praha', 'Kavkova 324', 6001 );
insert into Adresa values( 4002, 'České Budějovice', 'Eduarda Wintra 3', 6002 );
insert into Adresa values( 4003, 'Brno', 'Fialova 12', 6003 );
insert into Adresa values( 4004, 'Plzeň', 'Americká 2', 6004 );
insert into Adresa values( 4005, 'Bratislava', 'Kolárova 3', 6009 );
insert into Adresa values( 4006, 'Karlovy Vary', 'Ostrovská 34', 6006 );
insert into Adresa values( 4007, 'Jáchymov', 'Joachima Šlika 1243', 6006 );
insert into Adresa values( 4008, 'Košice', 'Hviezdoslavova 3', 6008 );
insert into Adresa values( 4009, 'Znojmo', 'Vratislavova', 6007 );
insert into Adresa values( 4010, 'Nitra', 'Biskupská', 6010 );
insert into Adresa values( 4011, 'Prešov', 'Východní 3', 6008 );
insert into Adresa values( 4012, 'Praha', 'Sokolovská 324', 6001 );

insert into Obchodnik values( 1002, null, 'Novák', 4001,6001, 0.20, 36 );
insert into Obchodnik values( 1001, 1002, 'Charvát', 4001, 6001, 0.10, 41 );
insert into Obchodnik values( 1003, 1002, 'Ryšavý', 4003, 6003, 0.10, 18 );
insert into Obchodnik values( 1004, 1002, 'Pilný', 4004, 6004, 0.10, null );
insert into Obchodnik values( 1005, null, 'Horvát', 4005, 6009, 0.15, null );
insert into Obchodnik values( 1006, 1002, 'Ujen', 4006, 6006, 0.20, 51 );
insert into Obchodnik values( 1007, 1006, 'Nhac', 4007, 6006, 0.10, null );
insert into Obchodnik values( 1008, 1005, 'Ferencz', 4008, 6008, 0.16, null );
insert into Obchodnik values( 1009, 1002, 'Brutus', 4012, 6004, 0.16, null );

insert into Zakaznik values( 2001, 'Matušičová', 4004, 10, 1001, null );
insert into Zakaznik values( 2002, 'Valouch', 4009, 20, 1003, 21 );
insert into Zakaznik values( 2003, 'Šímová', 4001, 25, 1002, 40 );
insert into Zakaznik values( 2004, 'Prudká', 4001, 30, 1002, 46 );
insert into Zakaznik values( 2005, 'Úsměvný', 4004, null, 1004, null );
insert into Zakaznik values( 2006, 'Minh', 4006, 30, 1006, null );
insert into Zakaznik values( 2007, 'Huong', 4007, 35, 1007, null );
insert into Zakaznik values( 2008, 'Dlouhykrok', 4010, 90, 1005, 53 );
insert into Zakaznik values( 2009, 'Bystrozraký', 4011, 10, null, 67 );
insert into Zakaznik values( 2010, 'Adamcová', 4001, 10, null, null);
insert into Zakaznik values( 2011, 'Adamec', 4001, 15, null, null);
insert into Zakaznik values( 2012, 'Šenekl', 4003, 15, 1003, 20);
insert into Zakaznik values( 2013, 'Ryšavý ml.', 4003, 5, 1003, 16);

insert into ZboziKategorie values( 6001, 'sportovni zboží' );
insert into ZboziKategorie values( 6002, 'sportovní zboží - outdoor - zima' );
insert into ZboziKategorie values( 6003, 'sportovni zboží - outdoor - leto' );
insert into ZboziKategorie values( 6004, 'sportovni zboží - indoor' );
insert into ZboziKategorie values( 6005, 'sportovni zboží - doplňky' );

insert into ZboziKatalog values( 5001, null, null );
insert into ZboziKatalog values( 5002, null, null );
insert into ZboziKatalog values( 5003, null, null );
insert into ZboziKatalog values( 5004, null, null );
insert into ZboziKatalog values( 5005, null, null );
insert into ZboziKatalog values( 5006, null, null );
insert into ZboziKatalog values( 5007, null, null );
insert into ZboziKatalog values( 5008, null, null );
insert into ZboziKatalog values( 5009, null, null );
insert into ZboziKatalog values( 5010, null, null );
insert into ZboziKatalog values( 5011, null, null );
insert into ZboziKatalog values( 5012, null, null );
insert into ZboziKatalog values( 5013, null, null );
insert into ZboziKatalog values( 5014, null, null );
insert into ZboziKatalog values( 5015, null, null );
insert into ZboziKatalog values( 5016, null, null );
insert into ZboziKatalog values( 5101, null, null );
insert into ZboziKatalog values( 5102, null, null );
insert into ZboziKatalog values( 5103, null, null );
insert into ZboziKatalog values( 5104, null, null );
insert into ZboziKatalog values( 5105, null, null );

insert into Objednavka values( 3001,  to_date('3/10/2006','dd/mm/yyyy'), 2007, 1007 );
insert into Objednavka values( 3002,  to_date('3/10/2006','dd/mm/yyyy'), 2007, 1002 );
insert into Objednavka values( 3003,  to_date('3/10/2006','dd/mm/yyyy'), 2001, 1001 );
insert into Objednavka values( 3004,  to_date('3/10/2008','dd/mm/yyyy'), 2006, 1006 );
insert into Objednavka values( 3005,  to_date('3/10/2006','dd/mm/yyyy'), 2003, 1002 );
insert into Objednavka values( 3006,  to_date('3/10/2006','dd/mm/yyyy'), 2007, 1007 );
insert into Objednavka values( 3007,  to_date('4/10/2006','dd/mm/yyyy'), 2004, 1002 );
insert into Objednavka values( 3008,  to_date('5/10/2006','dd/mm/yyyy'), 2006, 1002 );
insert into Objednavka values( 3009,  to_date('4/10/2006','dd/mm/yyyy'), 2006, 1006 );
insert into Objednavka values( 3010,  to_date('6/10/2006','dd/mm/yyyy'), 2004, 1001 );
insert into Objednavka values( 3011,  to_date('6/10/2006','dd/mm/yyyy'), 2006, 1002 );
insert into Objednavka values( 3020,  to_date('4/10/2008','dd/mm/yyyy'), 2001, 1006 );
insert into Objednavka values( 3021,  to_date('4/10/2008','dd/mm/yyyy'), 2007, 1006 );
insert into Objednavka values( 3022,  to_date('4/10/2008','dd/mm/yyyy'), 2006, 1006 );
insert into Objednavka values( 3023,  to_date('6/10/2008','dd/mm/yyyy'), 2004, 1006 );
insert into Objednavka values( 3024,  to_date('6/10/2008','dd/mm/yyyy'), 2006, 1006 );
insert into Objednavka values( 3025,  to_date('6/10/2008','dd/mm/yyyy'), 2006, 1006 );
insert into Objednavka values( 3026,  to_date('7/10/2008','dd/mm/yyyy'), 2007, 1007 );
insert into Objednavka values( 3027,  to_date('3/10/2008','dd/mm/yyyy'), 2007, 1007 );
insert into Objednavka values( 3028,  to_date('3/10/2008','dd/mm/yyyy'), 2007, 1007 );
insert into Objednavka values( 3029,  to_date('3/10/2008','dd/mm/yyyy'), 2007, 1007 );

insert into ObjednavkaPolozka values( 600101, 3001, 5001, 1, 490.00 );
insert into ObjednavkaPolozka values( 600102, 3001, 5010, 1, 2390.00 );
insert into ObjednavkaPolozka values( 600103, 3001, 5014, 1, 79.00 );
insert into ObjednavkaPolozka values( 600201, 3002, 5002, 2, 95000.00 );
insert into ObjednavkaPolozka values( 600202, 3002, 5104, 2, 5200.00 );
insert into ObjednavkaPolozka values( 600301, 3003, 5003, 76, 1000.00  );
insert into ObjednavkaPolozka values( 600401, 3004, 5003, 76, 1000.00 );
insert into ObjednavkaPolozka values( 600501, 3005, 5005, 480, 1050.00 );
insert into ObjednavkaPolozka values( 600601, 3006, 5006, 110, 1230.00  );
insert into ObjednavkaPolozka values( 600701, 3007, 5007, 700, 10.00 );
insert into ObjednavkaPolozka values( 600801, 3008, 5008, 10, 6700.00 );
insert into ObjednavkaPolozka values( 600901, 3009, 5009, 10, 12000.00 );
insert into ObjednavkaPolozka values( 601001, 3010, 5010, 1, 7400.00  );
insert into ObjednavkaPolozka values( 601101, 3011, 5004, 1, 100000.00 );
insert into ObjednavkaPolozka values( 602001, 3020, 5003, 1, 1000.00 );
insert into ObjednavkaPolozka values( 602101, 3021, 5003, 1, 1025.00 );
insert into ObjednavkaPolozka values( 602201, 3022, 5003, 1, 1000.00 );
insert into ObjednavkaPolozka values( 602301, 3023, 5003, 1, 1035.00 );
insert into ObjednavkaPolozka values( 602401, 3024, 5003, 1, 1005.00  );
insert into ObjednavkaPolozka values( 602501, 3025, 5003, 1, 1000.00 );
insert into ObjednavkaPolozka values( 602601, 3026, 5010, 1, 7600.00 );
insert into ObjednavkaPolozka values( 602701, 3027, 5010, 1, 7800.00 );
insert into ObjednavkaPolozka values( 602801, 3028, 5010, 3, 7800.00 );
insert into ObjednavkaPolozka values( 602901, 3029, 5010, 4, 7800.00 );

update zboziKatalog set popisxml = '<zbozi idZboziKategorie="6002"><part_number>RUK-1-1-1</part_number><jmeno>zimní rukavice Elvis</jmeno><cena>490</cena><mena>Kč</mena><zaruka>12</zaruka><dostupnost>na objednávku do 3 dnů</dostupnost><velikosti></velikosti><popis>vlněné zimní rukavice prstové</popis><barvy></barvy><materialy><material>vlna</material></materialy><vaha></vaha></zbozi>' where idZboziKatalog=5001;
 update zboziKatalog set popisxml = '<zbozi idZboziKategorie="6003"><part_number>KOLO-29</part_number><jmeno>Horské kolo Specialized Rockhopper 29 </jmeno><cena>14867</cena><mena>Kč</mena><zaruka>24</zaruka><dostupnost>skladem</dostupnost><velikosti><velikost>XL</velikost><velikost>L</velikost></velikosti><popis>
			Specialized Rockhopper 29 v černo-bílém provedení, jako sportovně-rekreační a nejdostupnější varianta tohoto modelu na 29“ velkých kolech je postavena na hliníkovém rámu, jenž nabídne ...
		</popis><barvy><barva>černá</barva><barva>bílá</barva><barva>červená</barva></barvy><materialy></materialy><vaha></vaha></zbozi>' where idZboziKatalog=5002;
 update zboziKatalog set popisxml = '<zbozi idZboziKategorie="6003"><part_number>BRUSLE-F21</part_number><jmeno>Inline brusle Tempish F21 Green </jmeno><cena>879</cena><mena>Kč</mena><zaruka>24</zaruka><dostupnost>skladem</dostupnost><velikosti><velikost>42</velikost><velikost>43</velikost></velikosti><popis>
			Dětské roztahovací brusle Tempish F21 Green pro rekreační bruslení jsou vyrobeny z pevného plastového skeletu s vestavěnou botičkou, která má dokonalý systém odvětrávání. Plastový podvozek je osazen kolečky o průměru 70 mm a ložisky ABEC 5. Bota je velmi pevná díky stahování tkaničkami, přezkou a suchým zipem. Brusle jsou velmi pohodlné a mají jednoduchý tlačítkový systém umožňující roztažení skeletu až o 4 velikosti!
		</popis><barvy></barvy><materialy></materialy><vaha></vaha></zbozi>' where idZboziKatalog=5003;
 update zboziKatalog set popisxml = '<zbozi idZboziKategorie="6004"><part_number>KOMPET-2013</part_number><jmeno>Vybavení tělocvičny </jmeno><cena>110000</cena><mena>Kč</mena><zaruka>24</zaruka><dostupnost>na objednávku</dostupnost><velikosti></velikosti><popis>Základní vybavení tělocvičny nábytkem, žíněnkami, sportovním náčiním</popis><barvy></barvy><materialy></materialy><vaha></vaha></zbozi>' where idZboziKatalog=5004;
 update zboziKatalog set popisxml = '<zbozi idZboziKategorie="6003"><part_number>MIC-1</part_number><jmeno>adidas Tango Rosario Football </jmeno><cena>449</cena><mena>Kč</mena><zaruka>24</zaruka><dostupnost>skladem</dostupnost><velikosti></velikosti><popis>Velmi dobrý tréninkový míč. Materiál odolný proti opotřebení, vodoodpudivý. Uzavřené švy. Velmi dobrá stabilita tvaru. Vhodný pro všechny povrchy.  </popis><barvy><barva>černá</barva><barva>bílá</barva></barvy><materialy></materialy><vaha></vaha></zbozi>' where idZboziKatalog=5005;
 update zboziKatalog set popisxml = '<zbozi idZboziKategorie="6003"><part_number>MIC-2</part_number><jmeno>Gala BV5581S Pro-Line volejbalový míč č. 5</jmeno><cena>449</cena><mena>Kč</mena><zaruka>24</zaruka><dostupnost>skladem</dostupnost><velikosti></velikosti><popis>Speciální povrchová úprava „dimple“ s dezénem golfového míčku moderní 10-ti panelový design (registrovaný průmyslový vzor EU) výborné letové vlastnosti míče, dobrá viditelnost a rozlišitelnost při hře míč je homologován FIVB, a proto splňuje nejnáročnější požadavky na hru </popis><barvy><barva>modrá</barva><barva>bílá</barva><barva>červená</barva></barvy><materialy></materialy><vaha></vaha></zbozi>' where idZboziKatalog=5006;
 update zboziKatalog set popisxml = '<zbozi idZboziKategorie="6003"><part_number>DIAB-112</part_number><jmeno>Diabolky Gamo Lethal 4,5</jmeno><cena>166</cena><mena>Kč</mena><zaruka>24</zaruka><dostupnost>skladem</dostupnost><velikosti><velikost>500 kusů</velikost><velikost>1000 kusů</velikost></velikosti><popis>Výroba Sellier Bellot</popis><barvy></barvy><materialy></materialy><vaha></vaha></zbozi>' where idZboziKatalog=5007;
 update zboziKatalog set popisxml = '<zbozi idZboziKategorie="6003"><part_number>STAN-2</part_number><jmeno>Stan Husky Felen 2-3 - červený (2-3 osoby)</jmeno><cena>5630</cena><mena>Kč</mena><zaruka>24</zaruka><dostupnost>skladem</dostupnost><velikosti></velikosti><popis>Felen 2-3 je novinka v produkci Husky a nahrazuje starý model Flare. Použili jsme velmi úspěšnou konstrukci stanu Felen 3-4, protože nabízí velmi prostornou předsíňku a vyzkoušený systém fixace nosné konstrukce, která kombinuje textilní tunýlky a uchycení pomocí přezek. ... </popis><barvy><barva>tmavě zelený</barva><barva>béžový</barva></barvy><materialy></materialy><vaha></vaha></zbozi>' where idZboziKatalog=5008;
 update zboziKatalog set popisxml = '<zbozi idZboziKategorie="6004"><part_number>PING-100</part_number><jmeno>Venkovní pingpongový stůl inSPORTline OUTDOOR 100</jmeno><cena>10590</cena><mena>Kč</mena><zaruka>12</zaruka><dostupnost>skladem</dostupnost><velikosti></velikosti><popis> Pingpongový stůl na stolní tenis inSPORTline Outdoor 100 je absolutně odolný vůči povětrnostním vlivům. </popis><barvy><barva>modrá</barva></barvy><materialy></materialy><vaha>85 kg </vaha></zbozi>' where idZboziKatalog=5009;
 update zboziKatalog set popisxml = '<zbozi idZboziKategorie="6002"><part_number>BEZKY-0519</part_number><jmeno>Cruiser NIS</jmeno><cena>7500</cena><mena>Kč</mena><zaruka>24</zaruka><dostupnost>skladem</dostupnost><velikosti><velikost>175</velikost><velikost>180</velikost><velikost>185</velikost></velikosti><popis>
			Robustní, ale zároveň velmi lehké univerzální lyže. 
			Jsou velmi stabilní ve stopě i mimo ni. 
			Hodí se opravdu do každého terénu. Mají dřevěné konstrukční jádro se vzduchovými kanálky.
		</popis><barvy></barvy><materialy></materialy><vaha></vaha></zbozi>' where idZboziKatalog=5010;
 update zboziKatalog set popisxml = '<zbozi idZboziKategorie="6002"><part_number>part5011</part_number><jmeno>větrovka Klimatex</jmeno><cena>2500</cena><mena>Kč</mena><zaruka>24</zaruka><dostupnost>skladem</dostupnost><velikosti><velikost>XL</velikost><velikost>L</velikost><velikost>M</velikost></velikosti><popis></popis><barvy><barva>modrá</barva><barva>žlutá</barva></barvy><materialy></materialy><vaha></vaha></zbozi>' where idZboziKatalog=5011;
 update zboziKatalog set popisxml = '<zbozi idZboziKategorie="6002"><part_number>part5012</part_number><jmeno>větrovka Pumax</jmeno><cena>1900</cena><mena>Kč</mena><zaruka>24</zaruka><dostupnost>skladem</dostupnost><velikosti><velikost>XXL</velikost><velikost>L</velikost><velikost>M</velikost></velikosti><popis></popis><barvy><barva>modrá</barva><barva>červená</barva></barvy><materialy></materialy><vaha></vaha></zbozi>' where idZboziKatalog=5012;
 update zboziKatalog set popisxml = '<zbozi idZboziKategorie="6002"><part_number>part5013</part_number><jmeno>větrovka Adidas</jmeno><cena>1249</cena><mena>Kč</mena><zaruka>24</zaruka><dostupnost>skladem</dostupnost><velikosti><velikost>L</velikost><velikost>M</velikost></velikosti><popis></popis><barvy><barva>zeelená</barva><barva>bílá</barva></barvy><materialy></materialy><vaha></vaha></zbozi>' where idZboziKatalog=5013;
 update zboziKatalog set popisxml = '<zbozi idZboziKategorie="6002"><part_number>part5014</part_number><jmeno>ponožky</jmeno><cena>1</cena><mena>Kč</mena><zaruka>24</zaruka><dostupnost>skladem</dostupnost><velikosti><velikost>39</velikost><velikost>40</velikost><velikost>41</velikost></velikosti><popis></popis><barvy><barva>modrá</barva><barva>černá</barva><barva>červená</barva><barva>zelené-pruhované</barva><barva>křilavě červné</barva></barvy><materialy></materialy><vaha></vaha></zbozi>' where idZboziKatalog=5014;
 update zboziKatalog set popisxml = '<zbozi idZboziKategorie="6002"><part_number>part5015</part_number><jmeno>tričko pracovní</jmeno><cena>99</cena><mena>Kč</mena><zaruka>24</zaruka><dostupnost>skladem</dostupnost><velikosti><velikost>XL</velikost><velikost>L</velikost><velikost>M</velikost></velikosti><popis></popis><barvy><barva>s potiskem</barva><barva>bez potisku</barva></barvy><materialy></materialy><vaha></vaha></zbozi>' where idZboziKatalog=5015;
 update zboziKatalog set popisxml = '<zbozi idZboziKategorie="6002"><part_number>part5016</part_number><jmeno>pracovní kalhoty s laclem</jmeno><cena>999</cena><mena>Kč</mena><zaruka>24</zaruka><dostupnost>na objednávku</dostupnost><velikosti><velikost>XL</velikost><velikost>L</velikost><velikost>M</velikost></velikosti><popis></popis><barvy><barva>modré</barva><barva>černé</barva></barvy><materialy></materialy><vaha></vaha></zbozi>' where idZboziKatalog=5016;
 update zboziKatalog set popisxml = '<zbozi idZboziKategorie="6002"><part_number>part5101</part_number><jmeno>stopky</jmeno><cena>99</cena><mena>EUR</mena><zaruka>12</zaruka><dostupnost></dostupnost><velikosti></velikosti><popis></popis><barvy></barvy><materialy></materialy><vaha></vaha></zbozi>' where idZboziKatalog=5101;
 update zboziKatalog set popisxml = '<zbozi idZboziKategorie="6002"><part_number>part5102</part_number><jmeno>portovní náramek M2</jmeno><cena>29</cena><mena>EUR</mena><zaruka>12</zaruka><dostupnost></dostupnost><velikosti></velikosti><popis></popis><barvy></barvy><materialy></materialy><vaha></vaha></zbozi>' where idZboziKatalog=5102;
 update zboziKatalog set popisxml = '<zbozi idZboziKategorie="6002"><part_number>part5103</part_number><jmeno>vodotěsné hodinky</jmeno><cena>49</cena><mena>EUR</mena><zaruka>12</zaruka><dostupnost></dostupnost><velikosti></velikosti><popis></popis><barvy></barvy><materialy></materialy><vaha></vaha></zbozi>' where idZboziKatalog=5103;
 update zboziKatalog set popisxml = '<zbozi idZboziKategorie="6002"><part_number>part5104</part_number><jmeno>Garmin pro běžce</jmeno><cena>199</cena><mena>EUR</mena><zaruka>12</zaruka><dostupnost></dostupnost><velikosti></velikosti><popis></popis><barvy></barvy><materialy></materialy><vaha></vaha></zbozi>' where idZboziKatalog=5104;
 update zboziKatalog set popisxml = '<zbozi idZboziKategorie="6002"><part_number>part5105</part_number><jmeno>Garmin pro plavce</jmeno><cena>199</cena><mena>EUR</mena><zaruka>12</zaruka><dostupnost></dostupnost><velikosti></velikosti><popis></popis><barvy></barvy><materialy></materialy><vaha></vaha></zbozi>' where idZboziKatalog=5105;
