IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
14fuk
Člen
Avatar
14fuk:21.11.2019 6:38

Ahoj, mam jednoduchou databázi na objednaní zboží. Potřeboval bych poradit. Když vložím do tabulky objednavka hodnoty napr. (1, 1, 2, 3), tak nevím, jak nastavit vazbu, aby se mi po vložení tohoto záznamu, v tabulce zboží odečetl počet kusů u zboží, které si zákazník objednal.

create database Objednavka

create table klient (
                        id_klient int,
                        jmeno varchar(50),
                        prijmeni varchar(50),
                        email varchar(100),
                        primary key (id_klient)
                        );

create table zbozi (
                        id_zbozi int,
                        nazev varchar(100),
                        pocet int
                        primary key (id_zbozi)
                 );

create table obejdnavka (
                        id_objednavka int,
                        id_klient int,
                        id_zbozi int,
                        pocet int,
                        primary key (id_objednavka),
                        foreign key (id_zbozi) references zbozi (id_zbozi) ,
                        foreign key (id_klient) references klient (id_klient)
                        );

Zkusil jsem: .

Chci docílit: .

 
Odpovědět
21.11.2019 6:38
Avatar
Fleury#93
Člen
Avatar
Fleury#93:21.11.2019 7:18

Tento problém žádnou vazbou nevyřešíš. Můžeš si to vyřešit na úrovni dotazů z programovacího jazyka. Tzn. insert do objednavek a pote update u zbozi, pozor je třeba to udělat jako transakci ať se to chová atomicky a nemůže dojít při nějaké chybě k např. k tomu, že se update už neprovede a dojde k narušení integrity data.

Lepším řešení je použití tzv. Triggerů. Jsou to událostní spuštěné SQL (zjednodušeně) dotazy pro řešení právě takových úkolů. Napíšeš trigger, který se spustí po přidání nového záznamu do objednávek, který upraví stav zboží.

Tutoriál na triggery nalezněš i tady na síti: https://www.itnetwork.cz/…-trigger-dml. Nicméně pozor mezi různými databázemi bývají rozdíly - co funguje pro MSSQL nemusí fungovat např. pro PostgreSQL.

Editováno 21.11.2019 7:18
 
Nahoru Odpovědět
21.11.2019 7:18
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.