\section{Databáze}
Databáze slouží k bezpečnému uchovávání a vyhledávání dat. Protože vytváříme systém, který bude používaný ve finančním sektoru, nechceme volit databáze, jež jsou obskurní, mají špatnou kompatibilitu s aplikačními rámci, špatně se s nimi pracuje, mají špatnou rychlost a nebo jsou zastaralé, tedy nezabezpečené. Kvůli této podmínce budeme vyhledávat pouze databáze neboli DBMS splňující všechna tato kritéria. Abychom si ušetřili čas, vybereme nejpoužívanější DMBS, rozebereme si, v čem se liší a na jaké věci se používají. Díky tomuto rozdělení využijeme ten nejvhodnější DBMS pro BillSaver v kapitolách  \ref{section:TechnickeAspekty} a \ref{subsection:architecture}.

Podle DBMS žebříčku od společnosti Solid IT 10 nejpopulárnějších DMBS systémů využívá jeden z těchto DBMS principů: relační, dokumentové, key-value a Search engine. \cite{dbRanking2021}

Tyto čtyři DBMS se dají rozdělit do dvou hlavních skupin: SQL a NO-SQL databáze. Do SQL DBMS se řadí pouze relační databáze a do no-sql se řadí zbytek, tedy dokumentové, key-value a Search engine databáze.

\begin{figure}[h]
    \centering 
    \includegraphics[width=17cm]{images/DBRanking.png}
    \caption{Skóre jednotlivých DBMS \cite{dbRanking2021}} 
    \label{fig:dbRanking}
\end{figure}

\subsection{Relační databáze}
Relační databáze jsou jedním z nejpopulárnějších přístupů ke skladování aplikačních dat. Můžeme to vidět i na grafu \ref{fig:dbRanking}, kde za posledních 9 let byly 3 nejpopulárnější DBMS právě relační.

Kvůli popularitě si relační DBMS udržují nejrozšířenější znalosti ve vývojářské komunitě. Podpora těchto systémů je také velice rozsáhlá a kvůli jejich rozšířenosti ve většině bankovních sektorů můžeme předpokládat, že mají velice robustní zabezpečení. \cite{ComparativeStudySqlAndNoSql}

Relační databáze disponují čtyřmi základními operacemi CRUD neboli: vytvořit (create), číst (read), editovat (update), smazat (delete). Tyto operace využívají programovací jazyk SQL neboli Structured Query Language.

Nevýhodou celého systému je nutnost definování celé datové struktury před provedením jakékoliv operace.To je může dělat in flexibilní pro účely, kde máme hodně různorodých dat a nebo kde se data můžou často měnit.

\subsection{Dokumentové databáze}\label{subsection:documentDatabases}
Dokumentové databáze se skládají z takzvaných dokumentů. Jeden tento dokument reprezentuje jeden záznam v databázi. Data se ukládají v podobě JSON textu, nevyžadují tak před-vytvoření datového schématu. Kvůli tomu mohou být data v průběhu doplňovaná a upravovaná bez ohledu na ostatní záznamy. 

Hlavní výhoda, a to možnost upravovat datové schéma bez ohledu na jiné záznamy, je však i její velká nevýhoda. Uživatel se nemůže spolehnout na data, která bude vyhledávat. Na rozdíl od relačních databází ne všechny dokumentové databáze podporují ACID vlastnosti transakcí. ACID je zkratka, skládající se ze slov: atomicita (atomicity), konzistence (consistency), izolovanost (isolation), trvalost (durability). Zkráceně to znamená, že v případě selhání vložení jednoho záznamu by se neměly vložit ani ostatní záznamy, které jsou ve stejné transakci. \cite{dbRanking2021}

\subsection{Key-value databaze}
Tento typ databáze ukládá svá data jako seznam klíčů a hodnot k těmto klíčům. Není tak možné vyhledávat jednotlivé záznamy na základě jejich vlastností. Celé vyhledávání se děje přes hlavní klíč, což vede k velice rychlému a efektivnímu vyhledávání.

Nevýhodou tohoto přístupu je, jak již bylo zmíněno, nemožnost vyhledávání podle jiných vlastností než podle hlavního klíče.

\subsection{Search engine databáze}
Search engine databáze je nadstavba různých NO-SQL databází a její vnitřní implementace záleží na jednotlivých produktech, které implementují tento DBMS. 

Typicky nabízí komplexní vyhledávací metody, vyhledávání v textu a distributivnost pro rozsáhlé množství dat.

Jejich nevýhodami jsou typicky nepodporované ACID vlastnosti a vysoká náročnost na výkon kvůli jejich rozsáhlé indexaci záznamu.