% $Id: implementacestruktura.tex,v 1.1 2007/01/18 22:20:30 jarda Exp $

\subsection{Úvod}

V databázi benchmarků se nachází celkem 9 tabulek. 7 z nich je použito pro uložení
vlastních dat a 2 slouží pro zabezpečení přístupu.

\begin{figure}[h]
\includegraphics[width=150mm]{DB_structure}
\caption{Struktura databáze}
\label{fig:struktura}
\end{figure}

\subsection{Tabulky pro zabezpečení přístupu}

{\odstavec

Pro uložení permanentních záznamů o jednotlivých uživatelích a jejich právech slouží
tabulka bDBUser (zkratka z benchmark DB User), která obsahuje přístupové jméno
uživatele, jeho heslo, ID a určuje, zda má uživatel právo k editaci dat a uživatelů.

Tabulka sessionUser slouží k přiřazení uživatele k jeho relaci.
}

\subsection{Tabulky pro uložení dat o benchmarcích}

{\odstavec
Tyto tabulky lze rozdělit do tří typů: tabulky ``číselníkové'', které umožňují kategorizaci
benchmarků, tabulku instance benchmarku, která přímo koresponduje s nějakým benchmarkovým
souborem a tabulky spojovací, které konkretizují vlastnosti a možnosti vložených dat.

Tabulka benchmarkSet obsahuje jednotlivé sady benchmarků.

Tabulka format obsahuje podporované formáty.

Tabulka benchmark slouží jako úložiště ``tříd'' benchmarků. Typicky v tabulce benchmark
jeden záznam představuje určitý obvod a k němu se vztahuje jedna nebo více instancí. Kromě
názvu obsahuje i obecný popis.

Tabulka attribute definuje atributy, které popisují benchmark - atributem může být například
počet hradel určitého typu nebo počet termů.

Tabulka benchmarkInstance obsahuje informace o konkrétním benchmarkovém souboru. Obsahuje
odkaz na benchmarkovou sadu, formát, ``třídu'' benchmarku, jméno uloženého souboru a popis
instance benchmarku (např. informaci o tom, že jde o optimalizovanou implementaci).

Tabulka formatAttribute říká, které atributy mohou být definovány ve kterém formátu. To
slouží jako vodítko pro ruční zadávání údajů.

Tabulka benchmarkInstanceAttribute obsahuje hodnotu atributu v dané instanci.
}

\subsection{Používané datové typy}

V databázi jsem použil pouze 2 datové typy:

\begin{itemize}

\item INTEGER pro identifikátory jednotlivých záznamů (ID),

\item CHARACTER pro datové sloupce.

\end{itemize}

Datové sloupce jsou opět dvojího typu:

\begin{itemize}

\item Běžné, které jsem omezil velikostí 100 znaků,

\item sloupce dlouhých popisů, omezené 2000 znaky.

\end{itemize}

Tyto délky jsou zvoleny tak, aby poskytly dostatečnou rezervu pro velikost užitečných
dat, ale zároveň omezily rozpínání databáze při případných nesprávných vstupech.

\subsection{Použitá omezení}

Omezení (constraints) slouží k hlídání integrity dat. V databázi jsem použil následující
omezení:

\begin{itemize}

\item UNIQUE - zaručuje jedinečnost hodnoty daného sloupce v každém řádku (například název formátu),

\item FOREIGN KEY - svazuje hodnotu sloupce s hodnotou sloupce v jiné tabulce; například sloupec
    formatId v tabulce benchmarkInstance musí obsahovat ID některého řádku z tabulky format,
    jinak daný řádek v tabulce benchmarkInstance postrádá význam.

    
\end{itemize}


% vim:enc=iso8859-2:fenc=iso8859-2:
