Relacione baze
Relaciona baza podataka
Relaciona baza deli podatke u tabele povezane ključevima. Umesto jedne ogromne tabele sa dupliranim podacima, hotel_db ima gosti, sobe, rezervacije i placanja — svaka sa jasnom ulogom.
Veze između tabela grade se preko primarnih i stranih ključeva. Rezervacija referencira gost_id i soba_id umesto da kopira ime gosta i broj sobe u svaki red. U hotel_db recepcija, finansije i housekeeping rade nad istim tabelama gosti, sobe, rezervacije, placanja i zaposleni — svaka izmena mora ostati konzistentna za sve module aplikacije.
Detaljnije
Normalizacija smanjuje redundantne podatke i anomalije pri izmeni. SQL JOIN spaja tabele kada aplikacija treba kompletan prikaz — npr. gost sa svim rezervacijama. Pre produkcije u Workbench-u izvršite primer SQL-a na test podacima, proverite EXPLAIN kad tabela naraste i dokumentujte očekivani rezultat za kolegu koji održava sistem.
Ključne tačke
- Svaka tabela ima jednu ulogu. — primer iz hotel_db.
- PK jednoznačno identifikuje red. — primer iz hotel_db.
- FK povezuje tabele. — primer iz hotel_db.
- JOIN spaja podatke pri čitanju. — primer iz hotel_db.
- Model prati poslovni proces hotela. — primer iz hotel_db.
Primer u praksi
JOIN gosti i rezervacije.
SELECT g.ime, r.datum_od
FROM gosti g
JOIN rezervacije r ON r.gost_id = g.id;Česta greška
Držati sve u jednoj tabeli jer je “lakše na početku”. Tipična posledica: neusklađeni podaci između recepcije i finansija, gubitak rezervacija ili nemogućnost check-in-a u vrhu sezone — uvek backup pre DDL/DML u produkciji.
Rezime
Relacioni model je temelj hotel_db i svake ozbiljne aplikacije. Vežbajte ponovo na hotel_db dok možete objasniti svaki red rezultata i povezati ga sa poslovnim procesom hotela (check-in, naplata, izveštaj).
Napomena: Savet: držite verzionisane .sql skripte (hotel_schema.sql, seed.sql) u Git repozitorijumu — reproducibilnost je ključna kad više ljudi radi na istom hotel_db modelu.
Vežba u Workbench-u
Prepišite SQL primer iz lekcije u novi query tab, prilagodite imena tabela i pokrenite. Posmatrajte plan u EXPLAIN kad upit koristi JOIN.
