Tabulka přání
Vítejte u závěrečného projektu! Pixel Shop chce novou funkci: seznam přání. Zákazník, kterému se hra líbí, ale nechce si ji koupit hned, si ji uloží do seznamu přání, a obchod mu později dá vědět, až hra vyjde nebo bude ve slevě. V této lekci postavíte databázovou část této funkce sami: navrhnete a vytvoříte tabulku, naplníte ji a pak odpovíte na otázky obchodu o ní i o jeho tržbách. Budete potřebovat kousek ode všeho, co jste se v kurzu naučili.
Celý projekt je jeden soubor, který postupně roste. Každé cvičení začíná řešením toho předchozího a vy do něj přidáváte. Pamatujte, že každé spuštění začíná s čerstvou kopií databáze obchodu: tabulka, kterou vytvoříte, při dalším spuštění neexistuje, pokud ji váš soubor nevytvoří znovu. Proto zůstává CREATE TABLE (a později i INSERT) na začátku souboru a provede se pokaždé, když kliknete na Spustit.
Každá dobrá tabulka začíná otázkou: co říká jeden její řádek? Tady je to „tento zákazník chce tuto hru, a to od tohoto dne“. Tabulka tedy potřebuje tři sloupce: ID zákazníka, ID hry a datum, kdy hru do seznamu přidal. Zákazník si může přát mnoho her a stejnou hru si může přát mnoho zákazníků. Je to vztah mnoho k mnoha, stejně jako polozky mezi objednávkami a hrami nebo recenze mezi hrami a zákazníky.
Taková tabulka nepotřebuje vlastní id. Jejím primárním klíčem je dvojice obou ID, tedy složený primární klíč. Kromě toho, že jednoznačně určuje každý řádek, zajistí také, že tatáž hra nebude v seznamu jednoho zákazníka dvakrát.
Zbytek je jako ve vlastních tabulkách obchodu: ID jsou INTEGER, datum je TEXT ve tvaru 'RRRR-MM-DD', každý sloupec musí mít hodnotu (NOT NULL), ID ukazují na existující řádky (REFERENCES) a tabulka je STRICT, aby SQLite kontrolovalo typy. Pro připomenutí, takhle vypadá tabulka postavená stejně: štítky her, kde hra může mít mnoho štítků a štítek mnoho her:
CREATE TABLE stitky_her (
hra_id INTEGER NOT NULL REFERENCES hry (id),
stitek TEXT NOT NULL,
PRIMARY KEY (hra_id, stitek)
) STRICT;Složený primární klíč se píše za poslední sloupec, na samostatný řádek, a jeho sloupce do závorek. Typická chyba: napsat PRIMARY KEY za každý z obou sloupců. To jsou dva primární klíče a SQLite skončí chybou table "seznam_prani" has more than one primary key (tabulka má víc než jeden primární klíč).
Jakmile tabulka existuje, SELECT * FROM seznam_prani; ji ukáže. Zatím nemá žádné řádky, takže výsledek je jen řádek s názvy sloupců. Tak si rychle ověříte, že máte sloupce správně.
Jak psát:
Pokyny
Pod komentářem -- 1. Tabulka přání vytvořte tabulku seznam_prani se třemi sloupci v tomto pořadí: zakaznik_id a hra_id typu INTEGER a pridano typu TEXT. Pod ni přidejte dotaz SELECT * FROM seznam_prani; a klikněte na Spustit. Výsledek nemá žádné řádky, jen sloupce:
| zakaznik_id | hra_id | pridano |
|---|
Každý sloupec musí mít vždy hodnotu a SQLite má kontrolovat typy: dejte všem třem sloupcům NOT NULL a tabulku udělejte STRICT.
A klíče: primárním klíčem je dvojice zakaznik_id a hra_id, sloupec zakaznik_id odkazuje na zakaznici (id) a hra_id na hry (id).
Začněte programovat zdarma
1/6