Blame programming-guidelines/cs/databases.page

Packit 1470ea
Packit 1470ea
<page xmlns="http://projectmallard.org/1.0/" xmlns:its="http://www.w3.org/2005/11/its" xmlns:xi="http://www.w3.org/2003/XInclude" type="topic" id="databases" xml:lang="cs">
Packit 1470ea
Packit 1470ea
  <info>
Packit 1470ea
    <link type="guide" xref="index#specific-how-tos"/>
Packit 1470ea
Packit 1470ea
    <credit type="author copyright">
Packit 1470ea
      <name>Philip Withnall</name>
Packit 1470ea
      <email its:translate="no">philip.withnall@collabora.co.uk</email>
Packit 1470ea
      <years>2015</years>
Packit 1470ea
    </credit>
Packit 1470ea
Packit 1470ea
    <include xmlns="http://www.w3.org/2001/XInclude" href="cc-by-sa-3-0.xml"/>
Packit 1470ea
Packit 1470ea
    <desc>Úložiště pro jednoduché trvalé objekty</desc>
Packit 1470ea
  </info>
Packit 1470ea
Packit 1470ea
  <title>Databáze</title>
Packit 1470ea
Packit 1470ea
  <synopsis>
Packit 1470ea
    <title>Shrnutí</title>
Packit 1470ea
Packit 1470ea
    <list>
Packit 1470ea
      <item>

Databáze používejte ve vhodných případech, tzn. ne pro nastavení (k tomu slouží GSettings). (<link xref="#when-to-use-databases"/>)

</item>
Packit 1470ea
      <item>

Volte mezi GOM a GVDB podle toho, jestli je zapotřebí indexování. (<link xref="#when-to-use-databases"/>)

</item>
Packit 1470ea
      <item>

Popřemýšlejte o zásadách úklidu databáze, než zařadíte používání GOM. (<link xref="#when-to-use-databases"/>)

</item>
Packit 1470ea
      <item>

Zranitelnosti v podobě injektáže SQL se vyhněte pomocí předpřipravených dotazů. (<link xref="#sql-injection"/>)

</item>
Packit 1470ea
    </list>
Packit 1470ea
  </synopsis>
Packit 1470ea
Packit 1470ea
  <section id="when-to-use-databases">
Packit 1470ea
    <title>Kdy používat databáze</title>
Packit 1470ea
Packit 1470ea
    

Data nastavení by měla být uložena v <link href="https://developer.gnome.org/gio/stable/GSettings.html">GSettings</link>. Platí, že data, která musí být trvalá a ovlivňují chování aplikace, jsou data nastavení. Pokud se jedná o záležitost, na kterou se vztahují zásady určené správcem systému (jako třeba nastavení proxy nebo zamykání), jde o data nastavení. Jestliže to ale obsahuje uživatelem vytvořený obsah, nejedná se o data nastavení a nemělo by to být uloženo v GSettings.

Packit 1470ea
Packit 1470ea
    

Pro situace, kdy jsou data vysoce strukturovaná, je pro uchování rozumným řešením databáze. V GNOME jsou doporučovány dvě hlavní databáze: GOM a GVDB. GOM ve skutečnosti obaluje SQLite a tudíž implementuje indexaci polí a dotazy ve stylu SQL. GVDB je mnohem jednodušší úložiště objektů, které podporuje rychlou serializaci slovníku objektů na disk.

Packit 1470ea
Packit 1470ea
    

GOM by s měl použít, když jsou zapotřebí pokročilé funkce, především indexování. V ostatních případech by mělo být použito GVDB.

Packit 1470ea
Packit 1470ea
    

Dříve, než se rozhodnete použít GOM (a tím pádem SQLite), musíte zvážit zásady úklidu databáze (vacuum) a jestli vaše použití bude dobře spolupracovat s úklidovým systémem SQLite. Úklid je v podstatě výraz používaný u SQLite (respektive u databází obecně) pro defragmentaci databáze — pokud databáze není řádně defragmentovaná, degraduje to výkon a značně narůstá její velikost. Více informací se dočtete v <link href="http://blogs.gnome.org/jnelson/2015/01/06/sqlite-vacuum-and-auto_vacuum/">tomto článku</link> na dané téma. Popřemýšlejte o něm, než zvolíte použití GOM.

Packit 1470ea
Packit 1470ea
    

GNOME má ještě další databázovou knihovnu: GNOME Data Access (GDA). Je zaměřená na abstraktní přístup k různým typům relačních databází, pro použití například v programech pro administrační práci s databázemi nebo v kancelářských programech. Naopak není vhodná pro ukládání <link href="https://developer.gnome.org/gio/stable/GSettings.html">uživatelských nastavení</link>.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="gom">
Packit 1470ea
    <title>Používání GOM</title>
Packit 1470ea
Packit 1470ea
    

Výuka použití GOM přesahuje rámec tohoto dokumentu, ale <link href="https://developer.gnome.org/gom/">je k dispozici referenční příručka</link>.

Packit 1470ea
Packit 1470ea
    <section id="sql-injection">
Packit 1470ea
      <title>Injektáž SQL</title>
Packit 1470ea
Packit 1470ea
      

GOM neumožňuje přístup k nízkoúrovňovému dotazovacímu API databáze SQLite. Když jej používáte, musíte místo přímého sestavení řetězce s SQL, a jeho následného předání ke zpracování, dotazy sestavovat pomocí <link href="https://www.sqlite.org/c3ref/stmt.html">předpřipravených výrazů</link> SQLite a API pro <link href="https://www.sqlite.org/c3ref/bind_blob.html">napojení hodnot</link>. Přímé sestavování řetězců zvyšuje pravděpodobnost útoků typu <link href="http://en.wikipedia.org/wiki/SQL_injection">injektování SQL</link>, pomocí kterých může útočník získat přístup k libovolným uživatelským datům v databázi.

Packit 1470ea
    </section>
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="gvdb">
Packit 1470ea
    <title>Používání GVDB</title>
Packit 1470ea
Packit 1470ea
    

GVDB má jednoduché API, které zrcadlí běžné hašovací tabulky. V současnosti je GVDB odstupné jen jako knihovna pro postup „kopírovat a vložit“. Stáhněte si nejnovější kopii kódu z <link href="https://git.gnome.org/browse/gvdb">gitu GVDB</link> a nakopírujte ji do svého projektu. Je licencována pod LGPLv2.1+.

Packit 1470ea
Packit 1470ea
    

Úplná výuka GVDB překračuje rozsah tohoto dokumentu.

Packit 1470ea
  </section>
Packit 1470ea
</page>