Stundas uzdevums: Apvienot visas tēmas prasmes - projektēt, izveidot un Python kodā lietot pilnvērtīgu datubāzi spēļu rezultātu glabāšanai un statistikai.
70 min darba sadalījums: 1. uzdevums (~20 min) - atjauno teorijas piemēru vai minimālo prototipu; 2. uzdevums (~25 min) - pielieto to galvenajā uzdevumā; 3. uzdevums (~25 min) - pārbaudi rezultātu, izlabo kļūdas un tikai beigās pieraksti vienu secinājumu. Papildus/4. līmeņa uzdevums ir paredzēts tikai tad, ja pamatdarbs ir pabeigts.
Pirms sāc: izmanto iepriekš apgūto un šīs lapas teorijas/koda piemērus. Ja vajadzīga jauna komanda vai rīks, vispirms atrodi tās paraugu teorijas sadaļā.
Tavs uzdevums ir izveidot pilnvērtīgu "Highscore datubāzi" - Python lietotnes, kas:
Datu modelis (3 tabulas):
speletaji (id, vards, izveidots)
speles_veidi (id, nosaukums)
rezultati (id, speletajs_id, speles_veids_id, punkti, spelets)
Šis ir īss iesildīšanās uzdevums. Nokopē sagatavi, ielīmē to pareizajā koda vietā un palaid. Šeit pietiek droši izmēģināt tēmu 10.6 Noslēguma projekts: Highscore datubāze; detalizētu izpratni veidosi nākamajos uzdevumos.
Kopējamais piemērs vai sagatave: izmanto šo bloku kā starta punktu, nevis kā gala risinājumu.
speletaji (id, vards, izveidots)
speles_veidi (id, nosaukums)
rezultati (id, speletajs_id, speles_veids_id, punkti, spelets)
queries.sql failā vai datubāzes klienta vaicājuma logā.Pievieno šīs stundas datu paņēmienu kā nelielu, strādājošu projekta daļu.
speletaji, rezultati vai ielade_topu().Pārbaudi, vai datu algoritms darbojas paredzami.
Ja pamatdarbs ir pabeigts, paplašini projektu ar vienu nelielu datu uzlabojumu.
INSERT ... ON CONFLICT (vards) DO NOTHING strādātu, laukam jābūt UNIQUE.conn.commit().-- Pilna shēma + 1 testa rezultāts
CREATE TABLE speletaji (
id SERIAL PRIMARY KEY,
vards TEXT NOT NULL UNIQUE
);
CREATE TABLE speles_veidi (
id SERIAL PRIMARY KEY,
nosaukums TEXT NOT NULL UNIQUE
);
CREATE TABLE rezultati (
id SERIAL PRIMARY KEY,
speletajs_id INTEGER REFERENCES speletaji(id) ON DELETE CASCADE,
speles_veids_id INTEGER REFERENCES speles_veidi(id),
punkti INTEGER NOT NULL CHECK (punkti >= 0),
spelets TIMESTAMP DEFAULT NOW()
);
INSERT INTO speletaji (vards) VALUES ('Anna');
INSERT INTO speles_veidi (nosaukums) VALUES ('Skaitļu minētājs');
INSERT INTO rezultati (speletajs_id, speles_veids_id, punkti) VALUES (1, 1, 95);
SELECT s.vards, sv.nosaukums, r.punkti
FROM rezultati r
JOIN speletaji s ON s.id = r.speletajs_id
JOIN speles_veidi sv ON sv.id = r.speles_veids_id;