Kako se pravi baza podataka: koraci, vrste i izbor sistema

Izrada baze podataka
Baze podataka fizički ne vidimo, ali gotovo svaka aplikacija zavisi od neke
Baza podataka je organizovan skup podataka koji program može brzo da pretraži, izmeni i sačuva. Iza gotovo svake aplikacije, od online prodavnice do knjigovodstvenog programa, stoji neka baza. Ovde je objašnjeno kako se baza pravi korak po korak, koje vrste postoje, koji sistem izabrati i kako se podaci čuvaju od gubitka.

Dobra baza se ne vidi: sve radi brzo i niko o njoj ne razmišlja. Loša baza se vidi svakog dana. Program se sporo otvara, isti kupac postoji tri puta pod malo drugačijim imenom, a izveštaj na kraju meseca se ne slaže sa stanjem u magacinu. Razlika gotovo uvek nastaje na početku, pri projektovanju.

Šta je baza podataka?

Baza podataka je kolekcija podataka organizovanih za brzo pretraživanje i pristup. Zajedno sa sistemom za administraciju, organizovanje i čuvanje tih podataka čini sistem baze podataka. (O bazama podataka sa Vikipedije (wikipedia.org))

Treba razlikovati dve stvari: samu bazu, to jest vaše podatke, i sistem za upravljanje bazom podataka (na engleskom DBMS), program koji te podatke čuva i opslužuje. MySQL, PostgreSQL i Microsoft SQL Server su takvi sistemi, a u jednom sistemu može biti mnogo baza.

Najrasprostranjenije su relacione baze. One liče na skup povezanih Excel tabela: tabela kupaca, tabela proizvoda, tabela porudžbina. Razlika je u tome što baza ima pravila. Na primer, neće dozvoliti da se upiše porudžbina za kupca koji ne postoji, niti da dva kupca imaju isti PIB.

Kako se pravi baza podataka?

Pisanje tabela je tek sredina posla. Ceo postupak izgleda ovako:

  1. Analiza potreba. Koje podatke čuvamo, ko ih unosi, koji izveštaji trebaju, koliko će podataka i korisnika biti za pet godina. Ovo je najvažniji korak i najčešće se preskače.
  2. Model podataka. Određuju se pojmovi o kojima se čuvaju podaci (kupci, proizvodi, porudžbine) i veze između njih: jedan kupac ima više porudžbina, jedna porudžbina ima više proizvoda. Sve se nacrta na dijagramu (ER dijagram), jer je greške lakše videti na slici nego u kodu.
  3. Tabele, kolone i tipovi podataka. Za svaku kolonu se bira tip: broj, tekst, datum. Za novac se koristi decimalni tip, a ne tip sa pokretnim zarezom, jer on pravi greške u zaokruživanju.
  4. Ključevi i pravila. Svaki red dobija jedinstveni identifikator (primarni ključ), veze između tabela se čuvaju stranim ključevima, a određuje se i šta je obavezno i šta mora biti jedinstveno.
  5. Normalizacija. Svaki podatak se čuva na jednom mestu. Adresa kupca stoji u tabeli kupaca, a ne ponavlja se u svakoj porudžbini. Kada se promeni, menja se na jednom mestu i nema neslaganja.
  6. Indeksi. Za kolone po kojima se najčešće pretražuje prave se indeksi, kao indeks pojmova na kraju knjige. Pretraga je sa njima višestruko brža, ali previše indeksa usporava upis, pa se biraju pažljivo.
  7. Prava pristupa. Svaki korisnik i svaki program vidi i menja samo ono što mu treba. Aplikacija nikada ne treba da radi sa administratorskim nalogom.
  8. Testiranje sa pravim količinama podataka. Baza koja leti sa 100 redova može da stane sa milion. Zato se pre puštanja u rad puni probnim podacima realne veličine.
  9. Rezervne kopije i održavanje, o kojima piše ispod.

Ovako izgledaju dve povezane tabele u jeziku SQL:

CREATE TABLE kupci (
    id     INT PRIMARY KEY,
    naziv  VARCHAR(100) NOT NULL,
    pib    CHAR(9) UNIQUE,
    grad   VARCHAR(50)
);

CREATE TABLE porudzbine (
    id        INT PRIMARY KEY,
    kupac_id  INT NOT NULL REFERENCES kupci(id),
    datum     DATE NOT NULL,
    iznos     DECIMAL(12, 2) NOT NULL
);

UNIQUE ne dozvoljava dva kupca sa istim PIB-om, a REFERENCES ne dozvoljava porudžbinu za kupca koji ne postoji. Više o samom jeziku pročitajte u opisu jezika SQL na listi najpopularnijih programskih jezika.

Gde se baza fizički nalazi?

Baza se čuva u fajlovima na disku servera. U Microsoft SQL Serveru svaka baza ima najmanje dve datoteke: datoteku sa podacima i dnevnik transakcija (log). U log se upisuje svaka izmena pre nego što stigne u datoteku sa podacima. Zato je log ključan za oporavak: uz njega se baza posle pada servera vraća u ispravno stanje. Kada je baza u režimu full recovery, uz rezervne kopije loga može se vratiti i na tačan trenutak, na primer na minut pre nego što je neko greškom obrisao podatke.

Iz prakse, za raspored na diskove važe dva pravila:

  • Datoteka sa podacima treba da bude na više diskova koji rade kao jedan (RAID), sa mogućnošću obnove ako jedan disk otkaže. Tu je sigurnost važnija od brzine.
  • Log se upisuje stalno i redom, pa mu treba brz disk, najbolje odvojen od podataka. I on mora biti zaštićen, jer bez njega nema oporavka na određeni trenutak.

Koje vrste baza podataka postoje?

Baze se razlikuju po tome kako čuvaju podatke. Hijerarhijske i mrežne baze su prethodnici relacionih i danas se retko sreću van starih sistema. Ovo su vrste koje se koriste danas:

VrstaKako čuva podatkePrimeriKada se koristi
Relaciona (SQL)Tabele povezane ključevimaMySQL, MariaDB, PostgreSQL, SQL Server, OraclePoslovni programi, prodavnice, sajtovi, većina aplikacija
UgrađenaRelaciona baza u jednom fajlu, bez serveraSQLiteMobilne aplikacije, desktop programi, manji alati
Dokument (NoSQL)Dokumenti u JSON oblikuMongoDBPodaci promenljive strukture, katalozi, sadržaj
Ključ-vrednostParovi ključ i vrednost, najčešće u memorijiRedisKeš, sesije, brojači, redovi čekanja
GrafČvorovi i veze između njihNeo4jDruštvene mreže, preporuke, mreže povezanih podataka

Za većinu poslovnih aplikacija i sajtova relaciona baza je pravi izbor. NoSQL baze rešavaju posebne probleme i najčešće dopunjuju relacionu bazu, a ne zamenjuju je.

Koji sistem za bazu podataka izabrati?

Danas je u upotrebi veliki broj sistema za upravljanje bazama podataka. Ovo su oni koje ćete najčešće sresti:

MySQL je najpoznatija relaciona baza otvorenog koda, danas u vlasništvu Oracle-a. Poznata je po brzini, pouzdanosti i jednostavnosti. Postoji na skoro svakom hosting paketu i na njoj radi WordPress, pa je prirodan izbor za sajt na običnom hostingu. Zvanični sajt: MySQL (mysql.com).

MariaDB je nastala 2009. kao ogranak (fork) MySQL-a, kada je Oracle najavio preuzimanje firme Sun, tadašnjeg vlasnika MySQL-a. Pokrenuo ju je Michael Widenius, jedan od autora MySQL-a, sa ciljem da ostane potpuno otvorena i vođena zajednicom. Kompatibilna je sa MySQL-om, pa je mnogi hosting paketi koriste umesto njega. Zanimljivo je da su obe baze dobile imena po autorovim ćerkama, My i Mariji. Zvanični sajt: MariaDB (mariadb.org).

PostgreSQL je moćna objektno-relaciona baza otvorenog koda, poznata po doslednom poštovanju SQL standarda i mogućnosti proširenja. Dobro radi sa JSON podacima, a uz dodatak PostGIS i sa geografskim podacima. Izbor je za složene aplikacije i analizu podataka kada želite besplatan sistem bez kompromisa. Zvanični sajt: PostgreSQL (postgresql.org).

Microsoft SQL Server je Microsoftova relaciona baza, dobro povezana sa .NET-om, Windowsom i Microsoftovim alatima za izveštaje i analizu. Nudi skalabilnost i sigurnost za poslovne aplikacije, a postoji i besplatno izdanje Express, sa ograničenjem veličine baze. Ako radite sa SQL Serverom, korisno je znati i kako se traži tekst u procedurama, funkcijama i trigerima. Zvanični sajt: Microsoft SQL Server (microsoft.com).

SQLite nema server: cela baza je jedan fajl koji aplikacija otvara direktno. Nalazi se u svakom telefonu i u veb pregledačima, pa je po rečima autora najrasprostranjenija baza na svetu. Izbor je za mobilne i desktop aplikacije i manje alate, ali ne i za sajt sa mnogo istovremenih upisa. Zvanični sajt: SQLite (sqlite.org).

MongoDB je najpoznatija dokument baza. Podatke čuva kao JSON dokumente, pa različiti zapisi mogu imati različita polja. Pogodna je za podatke čija se struktura često menja, ali za poslovne podatke sa mnogo veza relaciona baza je obično bolji izbor. Zvanični sajt: MongoDB (mongodb.com).

Kako se čuvaju rezervne kopije?

Da bi se podaci sačuvali u slučaju pada sistema, greške ili napada hakera, prave se rezervne kopije baze. Kopiranje se podešava da radi automatski, u određenim intervalima. Kada se koristi Microsoft SQL Server i kada je baza u režimu full recovery, potrebno je praviti i rezervne kopije log datoteke, na primer na svakih 15 minuta, inače log raste bez kraja.

Dobro pravilo je 3-2-1: tri kopije podataka, na dve različite vrste medija, od kojih je jedna na drugoj lokaciji. Rezervne kopije nikada ne treba držati samo na istom disku kao bazu. Protiv ucenjivačkog softvera (ransomware), koji šifruje sve do čega dođe, pomaže kopija do koje se sa servera ne može doći.

I najvažnije: povremeno probajte da vratite bazu iz kopije. Kopija koju niko nije probao da vrati nije pouzdana kopija, nego nada.

Održavanje i ažuriranje baze podataka

Baza nije gotova kada se napravi. Kako podataka ima sve više, upiti koji su bili brzi postaju spori, pa baza traži redovno održavanje:

  • praćenje sporih upita i njihovo ubrzavanje, najčešće dodavanjem ili izmenom indeksa;
  • održavanje indeksa i statistika, na osnovu kojih sistem bira kako da izvrši upit;
  • bezbednosna ažuriranja sistema za upravljanje bazom;
  • praćenje prostora na disku i arhiviranje starih podataka koji se više ne koriste svakodnevno;
  • provera prava pristupa, naročito kada ljudi odu iz firme.

Šta određuje složenost projekta baze podataka?

Obim posla oko izrade baze podataka veoma varira. Glavni činioci su složenost modela podataka, količina podataka koja se obrađuje, broj istovremenih korisnika, kao i posebni zahtevi za sigurnost i performanse. Mala baza koju koristi jedna desktop aplikacija i replikovani sistem koji opslužuje hiljade istovremenih upita dve su sasvim različite stvari, iako se obe zovu bazom podataka.

Treba vam baza podataka koja radi brzo i pouzdano?

Projektujem nove baze podataka, ubrzavam postojeće i prenosim podatke iz starih sistema u nove.