Stundas uzdevums: Projektēt vairākas saistītas tabulas, izmantojot primārās un ārējās atslēgas.
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ļā.
Datubāze ir tikai tik laba, cik labi tā ir projektēta. Galvenie principi:
id SERIAL).-- Spēlētāji un viņu spēles (1 → daudzi)
CREATE TABLE speletaji (
id SERIAL PRIMARY KEY,
vards TEXT NOT NULL UNIQUE
);
CREATE TABLE speles (
id SERIAL PRIMARY KEY,
speletajs_id INTEGER NOT NULL REFERENCES speletaji(id) ON DELETE CASCADE,
punkti INTEGER NOT NULL,
spelets TIMESTAMP DEFAULT NOW()
);
ON DELETE CASCADE - ja izdzēš spēlētāju, automātiski tiek izdzēstas arī viņa spēles.
Š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.3 Tabulu projektēšana un saites; detalizētu izpratni veidosi nākamajos uzdevumos.
Kopējamais piemērs vai sagatave: izmanto šo bloku kā starta punktu, nevis kā gala risinājumu.
-- Spēlētāji un viņu spēles (1 → daudzi)
CREATE TABLE speletaji (
id SERIAL PRIMARY KEY,
vards TEXT NOT NULL UNIQUE
);
CREATE TABLE speles (
id SERIAL PRIMARY KEY,
speletajs_id INTEGER NOT NULL REFERENCES speletaji(id) ON DELETE CASCADE,
punkti INTEGER NOT NULL,
spelets TIMESTAMP DEFAULT NOW()
);
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.
CREATE TABLE speletaji (
id SERIAL PRIMARY KEY,
vards TEXT NOT NULL UNIQUE
);
CREATE TABLE speles (
id SERIAL PRIMARY KEY,
speletajs_id INTEGER NOT NULL REFERENCES speletaji(id) ON DELETE CASCADE,
punkti INTEGER NOT NULL CHECK (punkti >= 0),
spelets TIMESTAMP DEFAULT NOW()
);
INSERT INTO speletaji (vards) VALUES ('Anna'), ('Jānis');
INSERT INTO speles (speletajs_id, punkti) VALUES (1, 120), (1, 85), (2, 200);