Како се прави база података: кораци, врсте и избор система

Израда базе података
Базе података физички не видимо, али готово свака апликација зависи од неке
База података је организован скуп података који програм може брзо да претражи, измени и сачува. Иза готово сваке апликације, од онлине продавнице до књиговодственог програма, стоји нека база. Овде је објашњено како се база прави корак по корак, које врсте постоје, који систем изабрати и како се подаци чувају од губитка.

Добра база се не види: све ради брзо и нико о њој не размишља. Лоша база се види сваког дана. Програм се споро отвара, исти купац постоји три пута под мало другачијим именом, а извештај на крају месеца се не слаже са стањем у магацину. Разлика готово увек настаје на почетку, при пројектовању.

Шта је база података?

База података је колекција података организованих за брзо претраживање и приступ. Заједно са системом за администрацију, организовање и чување тих података чини систем базе података. (О базама података са Википедије (wikipedia.org))

Треба разликовати две ствари: саму базу, то јест ваше податке, и систем за управљање базом података (на енглеском DBMS), програм који те податке чува и опслужује. MySQL, PostgreSQL и Microsoft SQL Server су такви системи, а у једном систему може бити много база.

Најраспрострањеније су релационе базе. Оне личе на скуп повезаних Excel табела: табела купаца, табела производа, табела поруџбина. Разлика је у томе што база има правила. На пример, неће дозволити да се упише поруџбина за купца који не постоји, нити да два купца имају исти ПИБ.

Како се прави база података?

Писање табела је тек средина посла. Цео поступак изгледа овако:

  1. Анализа потреба. Које податке чувамо, ко их уноси, који извештаји требају, колико ће података и корисника бити за пет година. Ово је најважнији корак и најчешће се прескаче.
  2. Модел података. Одређују се појмови о којима се чувају подаци (купци, производи, поруџбине) и везе између њих: један купац има више поруџбина, једна поруџбина има више производа. Све се нацрта на дијаграму (ER дијаграм), јер је грешке лакше видети на слици него у коду.
  3. Табеле, колоне и типови података. За сваку колону се бира тип: број, текст, датум. За новац се користи децимални тип, а не тип са покретним зарезом, јер он прави грешке у заокруживању.
  4. Кључеви и правила. Сваки ред добија јединствени идентификатор (примарни кључ), везе између табела се чувају страним кључевима, а одређује се и шта је обавезно и шта мора бити јединствено.
  5. Нормализација. Сваки податак се чува на једном месту. Адреса купца стоји у табели купаца, а не понавља се у свакој поруџбини. Када се промени, мења се на једном месту и нема неслагања.
  6. Индекси. За колоне по којима се најчешће претражује праве се индекси, као индекс појмова на крају књиге. Претрага је са њима вишеструко бржа, али превише индекса успорава упис, па се бирају пажљиво.
  7. Права приступа. Сваки корисник и сваки програм види и мења само оно што му треба. Апликација никада не треба да ради са администраторским налогом.
  8. Тестирање са правим количинама података. База која лети са 100 редова може да стане са милион. Зато се пре пуштања у рад пуни пробним подацима реалне величине.
  9. Резервне копије и одржавање, о којима пише испод.

Овако изгледају две повезане табеле у језику 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 не дозвољава два купца са истим ПИБ-ом, а REFERENCES не дозвољава поруџбину за купца који не постоји. Више о самом језику прочитајте у опису језика SQL на листи најпопуларнијих програмских језика.

Где се база физички налази?

База се чува у фајловима на диску сервера. У Microsoft SQL Server-у свака база има најмање две датотеке: датотеку са подацима и дневник трансакција (лог). У лог се уписује свака измена пре него што стигне у датотеку са подацима. Зато је лог кључан за опоравак: уз њега се база после пада сервера враћа у исправно стање. Када је база у режиму full recovery, уз резервне копије лога може се вратити и на тачан тренутак, на пример на минут пре него што је неко грешком обрисао податке.

Из праксе, за распоред на дискове важе два правила:

  • Датотека са подацима треба да буде на више дискова који раде као један (RAID), са могућношћу обнове ако један диск откаже. Ту је сигурност важнија од брзине.
  • Лог се уписује стално и редом, па му треба брз диск, најбоље одвојен од података. И он мора бити заштићен, јер без њега нема опоравка на одређени тренутак.

Које врсте база података постоје?

Базе се разликују по томе како чувају податке. Хијерархијске и мрежне базе су претходници релационих и данас се ретко срећу ван старих система. Ово су врсте које се користе данас:

ВрстаКако чува податкеПримериКада се користи
Релациона (SQL)Табеле повезане кључевимаMySQL, MariaDB, PostgreSQL, SQL Сервер, OracleПословни програми, продавнице, сајтови, већина апликација
УграђенаРелациона база у једном фајлу, без сервераSQLiteМобилне апликације, десктоп програми, мањи алати
Документ (NoSQL)Документи у JSON обликуMongoDBПодаци променљиве структуре, каталози, садржај
Кључ-вредностПарови кључ и вредност, најчешће у меморијиRedisКеш, сесије, бројачи, редови чекања
ГрафЧворови и везе између њихNeo4jДруштвене мреже, препоруке, мреже повезаних података

За већину пословних апликација и сајтова релациона база је прави избор. NoSQL базе решавају посебне проблеме и најчешће допуњују релациону базу, а не замењују је.

Који систем за базу података изабрати?

Данас је у употреби велики број система за управљање базама података. Ово су они које ћете најчешће срести:

MySQL је најпознатија релациона база отвореног кода, данас у власништву Oracle-а. Позната је по брзини, поузданости и једноставности. Постоји на скоро сваком хостинг пакету и на њој ради WordPress, па је природан избор за сајт на обичном хостингу. Званични сајт: MySQL (mysql.com).

MariaDB је настала 2009. као огранак (fork) MySQL-а, када је Oracle најавио преузимање фирме Сун, тадашњег власника MySQL-а. Покренуо ју је Мајкл Виденијус, један од аутора MySQL-а, са циљем да остане потпуно отворена и вођена заједницом. Компатибилна је са MySQL-ом, па је многи хостинг пакети користе уместо њега. Занимљиво је да су обе базе добиле имена по ауторовим ћеркама, My и Марији. Званични сајт: MariaDB (mariadb.org).

PostgreSQL је моћна објектно-релациона база отвореног кода, позната по доследном поштовању SQL стандарда и могућности проширења. Добро ради са JSON подацима, а уз додатак PostGIS и са географским подацима. Избор је за сложене апликације и анализу података када желите бесплатан систем без компромиса. Званични сајт: PostgreSQL (postgresql.org).

Microsoft SQL Server је Microsoft-ова релациона база, добро повезана са .NET-ом, Windows-ом и Microsoft-овим алатима за извештаје и анализу. Нуди скалабилност и сигурност за пословне апликације, а постоји и бесплатно издање Express, са ограничењем величине базе. Ако радите са SQL Server-ом, корисно је знати и како се тражи текст у процедурама, функцијама и тригерима. Званични сајт: Microsoft SQL Server (microsoft.com).

SQLite нема сервер: цела база је један фајл који апликација отвара директно. Налази се у сваком телефону и у веб прегледачима, па је по речима аутора најраспрострањенија база на свету. Избор је за мобилне и десктоп апликације и мање алате, али не и за сајт са много истовремених уписа. Званични сајт: SQLite (sqlite.org).

MongoDB је најпознатија документ база. Податке чува као JSON документе, па различити записи могу имати различита поља. Погодна је за податке чија се структура често мења, али за пословне податке са много веза релациона база је обично бољи избор. Званични сајт: MongoDB (mongodb.com).

Како се чувају резервне копије?

Да би се подаци сачували у случају пада система, грешке или напада хакера, праве се резервне копије базе. Копирање се подешава да ради аутоматски, у одређеним интервалима. Када се користи Microsoft SQL Server и када је база у режиму full recovery, потребно је правити и резервне копије лог датотеке, на пример на сваких 15 минута, иначе лог расте без краја.

Добро правило је 3-2-1: три копије података, на две различите врсте медија, од којих је једна на другој локацији. Резервне копије никада не треба држати само на истом диску као базу. Против уцењивачког софтвера (ransomware), који шифрује све до чега дође, помаже копија до које се са сервера не може доћи.

И најважније: повремено пробајте да вратите базу из копије. Копија коју нико није пробао да врати није поуздана копија, него нада.

Одржавање и ажурирање базе података

База није готова када се направи. Како података има све више, упити који су били брзи постају спори, па база тражи редовно одржавање:

  • праћење спорих упита и њихово убрзавање, најчешће додавањем или изменом индекса;
  • одржавање индекса и статистика, на основу којих систем бира како да изврши упит;
  • безбедносна ажурирања система за управљање базом;
  • праћење простора на диску и архивирање старих података који се више не користе свакодневно;
  • провера права приступа, нарочито када људи оду из фирме.

Шта одређује сложеност пројекта базе података?

Обим посла око израде базе података веома варира. Главни чиниоци су сложеност модела података, количина података која се обрађује, број истовремених корисника, као и посебни захтеви за сигурност и перформансе. Мала база коју користи једна десктоп апликација и репликовани систем који опслужује хиљаде истовремених упита две су сасвим различите ствари, иако се обе зову базом података.

Треба вам база података која ради брзо и поуздано?

Пројектујем нове базе података, убрзавам постојеће и преносим податке из старих система у нове.