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.
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.
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.
- Označite primarne i strane ključeve.
- Dodajte jedinstvena i obavezna polja.
- Odlučite kako se ponaša brisanje autora koji ima članke.
Za provjeru i nastavak