<?> PHP NOVA invictum.hr
Izdanje 2026.
Poglavlje 26

Relacijske baze i SQL

Modeliramo podatke kao tablice i veze te razumijemo zašto dobra ograničenja baze čuvaju pravila i kada aplikacija pogriješi.

24 min čitanja Srednje razina PHP 8.5 ciljna verzija

Nakon ovog poglavlja

Što ćete znati napraviti

  • Prepoznati redak, stupac, primarni i strani ključ.
  • Modelirati veze jedan-prema-više i više-prema-više.
  • Odabrati osnovne tipove i ograničenja bez dupliciranja podataka.

Strukturirana pohrana

Identitet i ograničenja

Tablica opisuje jednu vrstu zapisa, redak jedan primjerak, a stupac jednu osobinu. Primarni ključ stabilno identificira redak. NOT NULL, UNIQUE, CHECK i strani ključevi omogućuju bazi da odbije nevaljano stanje.

Nazivi tablica i stupaca trebaju biti dosljedni. Ne spremamo zarezima odvojen popis identifikatora u jedan stupac jer ga je teško povezivati, provjeravati i indeksirati.

Tablica korisnika
CREATE TABLE users (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    email VARCHAR(254) NOT NULL UNIQUE,
    password_hash VARCHAR(255) NOT NULL,
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

Podaci surađuju

Strani ključ opisuje odnos

U vezi jedan-prema-više strani ključ stoji na strani „više“: svaki članak pripada jednom autoru, a autor ima više članaka. Vezu više-prema-više ostvaruje spojna tablica, primjerice article_tag.

Pravilo brisanja biramo svjesno. CASCADE može biti praktičan za ovisne tehničke zapise, ali opasan za poslovne podatke. RESTRICT sprječava brisanje dok ovisnost postoji.

Veza članka i autora
CREATE TABLE articles (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    author_id BIGINT UNSIGNED NOT NULL,
    title VARCHAR(200) NOT NULL,
    body TEXT NOT NULL,
    CONSTRAINT articles_author_fk
        FOREIGN KEY (author_id) REFERENCES users(id)
        ON DELETE RESTRICT
);

Bez nepotrebnog ponavljanja

Model prvo, ubrzanje prema mjerenju

Normalizacija odvaja činjenice koje bi se inače ponavljale i razilazile. Ipak, cilj nije akademska savršenost nego dosljedan model koji podržava upite i pravila.

Indeks ubrzava čitanje po stupcima koji se filtriraju, spajaju ili sortiraju, ali usporava zapis i zauzima prostor. Dodajemo ga prema stvarnim upitima i planu izvršavanja, ne svakom stupcu.

Primijenite naučeno

Vježba: Model baze znanja

Nacrtajte tablice za korisnike, članke, kategorije i oznake.

  1. Označite primarne i strane ključeve.
  2. Dodajte jedinstvena i obavezna polja.
  3. Odlučite kako se ponaša brisanje autora koji ima članke.

Za provjeru i nastavak

Službeni izvori