10.1 Ievads datubāzēs un PostgreSQL
Stundas uzdevums: Saprast, kāpēc relāciju datubāzes ir labākas par CSV/JSON failiem, instalēt PostgreSQL un izveidot pirmo tabulu.
70 min plāns: Teorija un paraugs (~10 min) · 1. uzdevums (~15 min) - izveido datubāzi un pieslēdzies · 2. uzdevums (~25 min) - uzraksti pirmo CREATE TABLE · 3. uzdevums (~20 min) - pārbaudi datu tipu ierobežojumus. Papildu uzdevumu sāc tikai tad, ja pārējie trīs ir gatavi.
Pirms sāc: uzstādi PostgreSQL un atver pgAdmin vai psql. Ja instalēšana neizdodas, pasaki skolotājam - visu stundu var izpildīt arī uz kopīgā skolas servera.
Teorija: Kas ir relāciju datubāze?
Datubāze (DB) ir strukturēta datu kopa, kuru pārvalda datubāzes pārvaldības sistēma (DBVS). PostgreSQL ir bezmaksas, atvērtā koda DBVS, ko izmanto Apple, Reddit, Spotify un tūkstošiem citu lielo uzņēmumu.
Atšķirībā no JSON/CSV, datubāze:
- Veic vaicājumus efektīvi - atrod 1 ierakstu no 1 miljona milisekundēs (indeksi).
- Nodrošina datu integritāti - laukam ir tips, var aizliegt NULL, prasīt unikālas vērtības.
- Atbalsta vairākus lietotājus vienlaicīgi - bez konfliktiem (transakcijas).
- Saglabā datu attiecības - primārās un ārējās atslēgas.
-- Pirmā tabula
CREATE TABLE speletaji (
id SERIAL PRIMARY KEY, -- auto-increment unikāls ID
vards TEXT NOT NULL,
punkti INTEGER DEFAULT 0
);
Praktiskie uzdevumi
1. uzdevums -
Izveido datubāzi un pieslēdzies
Beigās tev būs sava datubāze, kurā strādāt visu tēmu.
- Atver pgAdmin vai izpildi terminālī
psql -U postgres. - Izpildi
CREATE DATABASE spele;. - Pieslēdzies tai ar
\c spelevai izvēlies to pgAdmin sarakstā. - Izpildi
SELECT version();. - Pieraksti, kāda PostgreSQL versija tev uzstādīta.
- Pieraksti, ar kādu lietotājvārdu tu pieslēdzies.
Gatavs, kad: SELECT version(); atgriež versijas tekstu, nevis kļūdu par pieslēgumu.
2. uzdevums -
Uzraksti pirmo CREATE TABLE
Beigās datubāzē būs tabula ar pareiziem datu tipiem.
- Izveido failu
schema.sql. - Ieraksti
CREATE TABLE IF NOT EXISTS speletaji (. - Pievieno lauku
id SERIAL PRIMARY KEY. - Pievieno lauku
vards TEXT NOT NULL UNIQUE. - Pievieno laukus
punkti INTEGER DEFAULT 0unizveidots TIMESTAMP DEFAULT NOW(). - Izpildi skriptu un pārbaudi tabulu ar
\d speletaji.
Gatavs, kad: tabula speletaji eksistē un tajā ir visi četri lauki ar pareiziem tipiem.
3. uzdevums -
Pārbaudi datu tipu ierobežojumus
Beigās tu redzēsi, ka datubāze pati neļauj ievadīt sliktus datus.
- Ievadi vienu spēlētāju ar
INSERT INTO speletaji (vards) VALUES ('Anna');. - Izpildi to pašu komandu vēlreiz un izlasi kļūdu.
- Pieraksti, kurš ierobežojums to neļāva.
- Mēģini ievadīt spēlētāju bez vārda un pieraksti kļūdu.
- Mēģini ievadīt punktus kā tekstu
'daudz'un pieraksti kļūdu. - Izpildi
SELECT * FROM speletaji;un pārbaudi, cik rindu ir. - Pieraksti vienu secinājumu: ar ko datubāze šeit ir labāka par CSV failu.
Gatavs, kad: datubāze noraidīja trīs nederīgus ierakstus, un tabulā ir tikai viena derīga rinda.
Papildu uzdevums - Pievieno CHECK ierobežojumu
Ja pamatdarbs ir gatavs, neļauj ievadīt negatīvus punktus.
- Izpildi
ALTER TABLE speletaji ADD CONSTRAINT punkti_pozitivi CHECK (punkti >= 0);. - Mēģini ievadīt spēlētāju ar punktiem
-10. - Pieraksti kļūdas nosaukumu.
- Ievadi spēlētāju ar punktiem
50un pārbaudi, ka tas izdodas. - Pieraksti, kāpēc šādu pārbaudi labāk likt datubāzē, nevis Python kodā.
Gatavs, kad: negatīvi punkti tiek noraidīti pašā datubāzē, arī tad, ja Python kods to nepārbauda.
Biežākās kļūdas
- Aizmirsi paroli postgres lietotājam: Instalācijas laikā saglabā paroli pārvaldnieka rīkā (piem., Bitwarden).
- Tabulu nevar dzēst: Vispirms ar
DROP TABLE IF EXISTS speletaji CASCADE;- CASCADE noņem arī saistītos objektus. - SERIAL nepilda: Saglabā skripta failu un pārbaudi pareizrakstību (S-E-R-I-A-L).
Koda piemērs
-- Pirmais SQL skripts (schema.sql)
CREATE TABLE IF NOT EXISTS speletaji (
id SERIAL PRIMARY KEY,
vards TEXT NOT NULL UNIQUE,
punkti INTEGER DEFAULT 0,
izveidots TIMESTAMP DEFAULT NOW()
);
-- Pārbaude, ka tabula izveidota
SELECT table_name FROM information_schema.tables
WHERE table_schema = 'public';
----------
speletaji