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ě.

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_idhra_idpridano

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

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

1/6