<?xml version="1.0" encoding="UTF-8"?>
<chapter id="details.database">
<chapterinfo>
  <authorgroup>
    <author
>&Tony.Bloomfield; &Tony.Bloomfield.mail;</author>
  </authorgroup>
  <date
>2011-07-21</date>
  <releaseinfo
>4.6</releaseinfo>
</chapterinfo>

<title
>Base de données</title>

<sect1 id="details.database.usage">
<title
>Utilisation des bases de données </title>

<sect2>
<title
>Introduction</title>
<para
>Depuis la version 1.0, &kappname; vous permet de conserver vos données dans une base de données relationnelle. Un des avantages à utiliser ce format standard de l'industrie, c'est que cela vous permet d'afficher vos données en utilisant une interface graphique telle que OpenOffice.org<trademark class="copyright"
></trademark
> ou LibreOffice<trademark class="copyright"
></trademark
>, peut-être dans un format que &kappname; ne prend pas en charge. Aussi, une connaissance élémentaire de SQL (<foreignphrase
>Structured Query Language</foreignphrase
>) vous serait-elle d'une grande utilité pour être à l'aise dans l'exportation de données vers un programme externe, comme par exemple, une application de budgétisation. </para>
<para/>
</sect2>

<sect2
><title
>Préparation</title>

<para
>Pour accéder à la base de données, &kappname; utilise le module SQL fourni par le logiciel &Qt; en tant que partie du système de programmation &Qt;. Ce module est compatible avec un grand nombre de systèmes de base de données grâce à une collection de pilotes. Parmi les systèmes Open Source les plus populaires pour lesquels des pilotes sont disponibles, on trouve MySQL<trademark class="registered"
></trademark
>, SQLite (version 3 et suivantes seulement), ainsi que PostgreSQL. </para>

<para
>À l'exception de SQLite, ces systèmes utilisent un modèle client /serveur, pour lequel le logiciel client est sur votre machine, tandis que le serveur se trouve sur la même machine que la base de données elle-même, n'importe où dans le monde. Bien-sûr, dans le scenario normal d'une application de gestion de finances personnelles telle que &kappname;, le client et le serveur se trouvent tous deux sur votre machine. En conséquence, votre première tâche, après avoir décidé quel système de base de données vous allez utiliser, est d'installer le logiciel client, et le plus probablement, le logiciel serveur. </para>

<para
>En plus du logiciel de base de données lui-même, vous devez installer le module pilote &Qt;. La plupart des distributions comprennent les modules pilotes pour les bases de données les plus populaires. Sinon, allez sur le <ulink url="http://qt.nokia.com"
>site web de &Qt;</ulink
> et cherchez les pilotes SQL (<foreignphrase
>SQL drivers</foreignphrase
>). </para>

<note>
  <para
>SQLite ne fonctionne pas selon un modèle client /serveur ; chacune des bases de données est contenue dans un fichier standard, localement ou à distance, auquel on accède par les méthodes habituelles du système d'exploitation sous-jacent. Dans ce cas, il suffit d'installer un seul paquetage logiciel et le pilote. De plus, certaines des informations qui suivent, en particulier celles concernant l'administration, peuvent ne pas s'appliquer à SQLite. </para>
</note>
</sect2>

<sect2>
<title
>Administration</title>

<para
>Gérer une base de donnée est un peu plus complexe que de se servir de fichiers standards. Chaque système possède ses méthodes propres pour accomplir des tâches administratives telles que créer une base de données, octroyer des autorisations à différents utilisateurs, effectuer des sauvegardes, &etc;. La description de ces tâches sort du cadre de ce manuel, mais tous les produits compatibles fournissent des documentations de référence exhaustives et de nombreux tutoriels peuvent être trouvés sur le Web. </para>

<sect3>
<title
>Création d'une base de données</title>

<para
>Un programme a été inclus pour créer une base de données initiale, si elle n'existe pas déjà, pour contenir vos données. Néanmoins, il est fortement recommandé que vous créiez préalablement une base de données, parce que la plupart des produits offrent des options qui lui sont relatives. Une, qui peut être particulièrement importante, est le choix d'un jeu de caractères (&pex;, UTF-8) à utiliser pour le texte des champs. </para>

<para
>À ce moment, vous devez aussi déclarer, pour des utilisateurs variés, les autorisations à faire telle et telle opération sur la base de données. Dans la plupart des systèmes, l'utilisateur qui crée la base de données se voit attribuer toutes les autorisations, mais il s'agit d'un domaine pour lequel la documentation doit être consultée. </para>

<para
>Pour votre première utilisation de la base de données, et à l'occasion d'un changement de structure de la base, vous aurez besoin d'une autorisation (aussi appelée « privilège ») pour créer et modifier des tables et des vues (voir le paragraphe suivant). Les noms des autorisations /privilèges peuvent changer d'un système à l'autre, mais des choses comme CREATE et ALTER sont des lieux communs. Pour une utilisation normale, vous devez avoir le droit d'écrire et de lire des enregistrements ; les autorisations correspondantes sont normalement définies dans SQL par SELECT, INSERT, UPDATE et DELETE. </para>
</sect3>

<sect3>
<title
>Création de tables</title>

<para
>Lors de votre première utilisation, &kappname; essaye de créer les structures des tables nécessaires. Pour garantir la compatibilité maximale avec différents systèmes de base de données, seul un jeu limité de type de données est utilisé. Il peut néanmoins y avoir des cas où un type particulier n'est pas compatible, et pour ce cas de figure, des fonctionnalités ont été prévues qui permettent de générer le code SQL nécessaire à la création des tables. Ce code peut ensuite être modifié si nécessaire et utilisé pour créer les tables en dehors de &kappname;. Si vous vous retrouvez dans une telle situation, une aide peut être obtenue de &devlist;. Reportez-vous à <link linkend="details.database.generatesql"
>Création manuelle d'une base de données</link
> pour plus d'information. </para>
</sect3>
</sect2>

<sect2 id="details.database.selectdatabase">
<title
>Création d'une base de données</title>

<para
>Au démarrage, &kappname; ouvre ou importe un fichier de données existant, ou en crée un nouveau. Ensuite, sélectionnez <guimenuitem
>Enregistrer comme base de données</guimenuitem
> dans le menu <guimenu
>Fichier</guimenu
>. La boîte de dialogue suivante vous est alors proposée :  </para>

<screenshot>
  <mediaobject>
  <imageobject>
  <imagedata fileref="select_database.png" format="PNG"/>
  </imageobject>
  </mediaobject>
</screenshot>

<para
>Complétez les champs appropriés au type de base de données que vous avez choisi (comme d'habitude, les champs obligatoires sont en surbrillance) et cliquez sur le bouton <guibutton
>Ok</guibutton
> pour créer la base de données.  </para>

<sect3>
<title
>Type de base de données</title>

<para
>Cette boîte présente tous les pilotes SQL &Qt; installés sur votre système. Sélectionnez le pilote correspondant au type de votre base de données. Si celui que vous désirez n'est pas dans la liste, vous devez installer le pilote approprié. Reportez-vous à la documentation de votre distribution, ou visitez le <ulink url="http://qt.nokia.com/title-fr?set_language=fr&amp;cl=fr" type=""
>site des logiciels &Qt;</ulink
> et cherchez <foreignphrase
>SQL drivers</foreignphrase
>.  </para>
</sect3>

<sect3>
<title
>Fichier (SQLite seulement)</title>
<para
>SQLite associe un fichier à une base de données, aussi devez-vous saisir le nom du fichier avec lequel vous voulez associer cette base de données. Pour parcourir le système de fichiers, cliquez sur l'icône à droite du nom de fichier. Pour les bases de données SQLite, les champs <guilabel
>Nom d'hôte</guilabel
>, <guilabel
>Nom d'utilisateur</guilabel
> et <guilabel
>Mot de passe</guilabel
> ne sont pas utilisés. L'utilisateur courant doit avoir les droits d'accès en écriture /lecture contrôlés par le système sous-jacent sur ce fichier.  </para>
</sect3>

<sect3>
<title
>Nom de base de données (autres)</title>
<para
>Le nom par défaut de la base de données est KMyMoney; mais vous pouvez en choisir un autre si vous le souhaitez. Pour certains types de base de données, &kappname; peut ne pas être capable de créer une base de données ; celle-ci doit alors être créée en ayant recours à la procédure administrative adéquate. Néanmoins, &kappname; devrait ordinairement savoir créer toutes les structures de table partout où c'est nécessaire. Sinon, vous pouvez les créer vous-même. Reportez-vous à la section <link linkend="details.database.generatesql"
>Création manuelle d'une base de données</link
> pour plus d'informations. </para>
</sect3>

<sect3
><title
>Nom d'hôte</title>
<para
>Pour l'utilisateur lambda, le nom par défaut <quote
>localhost</quote
>, qui représente la machine locale, est correct. Pour des bases de données en réseau, saisissez le nom de l'hôte auquel vous êtes connecté. </para>

</sect3>

<sect3>
<title
>Nom d'utilisateur et mot de passe</title>
<para
>Vérifiez les droits d'accès établis sur votre base de données, ou contactez l'administrateur de la base, pour connaître les valeurs à utiliser. Le nom d'utilisateur doit avoir le droit de sélectionner, insérer, mettre à jour et supprimer des enregistrements. Si le nom d'utilisateur est identique à votre nom d'utilisateur du système, un mot de passe n'est normalement pas demandé. </para>
</sect3>
</sect2>

<sect2>
<title
>Accès à vos données </title>

<sect3>
<title
>Conception d'une table</title>

<para
>Pour accéder à vos données dans &kappname; utilisez l'entrée <guimenuitem
>Ouvrir une base de données</guimenuitem
> dans le menu <guimenu
>Fichier</guimenu
>. Ceci provoque l'ouverture d'une boîte de dialogue similaire à celle vue précédemment. </para>

<note>
<para
>Si vous avez créé votre base de données en ouvrant d'abord un fichier, et en ayant fait ensuite <guimenuitem
>Enregistrer comme base de données</guimenuitem
>, comme décrit ci-dessus, alors tout changement ultérieur de vos données n'est enregistré que dans la base de données, pas dans le fichier. Ceci veut dire que vous pouvez utiliser le fichier comme une sauvegarde ou comme un instantané de vos données à un instant donné particulier. Pour faire une telle sauvegarde, ouvrez votre base de données, et faites <menuchoice
><guimenu
>Fichier</guimenu
><guimenuitem
>Enregistrer sous...</guimenuitem
></menuchoice
>, en donnant un nom de fichier approprié. Rappelez vous d'ouvrir à nouveau votre base de données, de telle manière que &kappname; ne continue pas à utiliser le fichier. </para>
</note>

<para
>Pour accéder à vos données dans d'autres formats, vous devez connaître comment elles sont organisées dans une base de données relationnelle. La meilleure manière de se faire une idée de cela consiste à ouvrir la base de données avec une interface utilisateur telle que OpenOffice.org. Ceci vous affiche une liste des tables constituant la base de données et vous permet d'accéder à la structure de chacune d'elles. </para>

<para
>Pour extraire des données, &pex;, dans une feuille de calcul séparée ou un fichier externe, il est presque toujours nécessaire de sélectionner des données liées par plus d'une table. Ceci est effectué en « joignant » les tables, par le biais d'un champ commun à chacune d'elles. Vous pouvez obtenir beaucoup plus d'information sur la manière d'effectuer cette opération dans les tutoriels en ligne mentionnés plus haut. La table suivante présente les champs utilisés pour définir cette relation entre tables. </para>

<informaltable>
  <tgroup cols="3">
    <thead>
      <row>
        <entry valign="top">
          <para
>Relation</para>
        </entry>
        <entry valign="top">
          <para
>Correspond</para>
        </entry>
        <entry valign="top">
          <para
>Avec</para>
        </entry>
      </row>
    </thead>
    <tbody>
      <row>
        <entry valign="top">
          <para
>Établissements et Comptes</para>
        </entry>
        <entry valign="top">
          <para
>kmmInstitutions.id</para>
        </entry>
        <entry valign="top">
          <para
>kmmInstitutions.id</para>
        </entry>
      </row>
      <row>
        <entry valign="top">
          <para
>Comptes parent / enfant</para>
        </entry>
        <entry valign="top">
          <para
>kmmAccounts.id</para>
        </entry>
        <entry valign="top">
          <para
>kmmAccounts.parentId</para>
        </entry>
      </row>
      <row>
        <entry valign="top">
          <para
>Opérations et répartitions (voir note 1)</para>
        </entry>
        <entry valign="top">
          <para
>kmmTransactions.id</para>
        </entry>
        <entry valign="top">
          <para
>kmmSplits.transactionId</para>
        </entry>
      </row>
      <row>
        <entry valign="top">
          <para
>Comptes et répartitions</para>
        </entry>
        <entry valign="top">
          <para
>kmmAccounts.id</para>
        </entry>
        <entry valign="top">
          <para
>kmmSplits.accountId</para>
        </entry>
      </row>
      <row>
        <entry valign="top">
          <para
>Bénéficiaires et répartitions</para>
        </entry>
        <entry valign="top">
          <para
>kmmPayees.id</para>
        </entry>
        <entry valign="top">
          <para
>kmmSplits.payeeId</para>
        </entry>
      </row>
      <row>
        <entry valign="top">
          <para
>Opérations récurrentes et transactions</para>
        </entry>
        <entry valign="top">
          <para
>kmmSchedules.id</para>
        </entry>
        <entry valign="top">
          <para
>kmmTransactions.id</para>
        </entry>
      </row>
      <row>
        <entry valign="top">
          <para
>Opérations et devises</para>
        </entry>
        <entry valign="top">
          <para
>kmmTransactions.currencyId</para>
        </entry>
        <entry valign="top">
          <para
>kmmCurrencies.ISOCode</para>
        </entry>
      </row>
      <row>
        <entry valign="top">
          <para
>Comptes et titres (voir note 2)</para>
        </entry>
        <entry valign="top">
          <para
>kmmAccounts.currencyId</para>
        </entry>
        <entry valign="top">
          <para
>kmmSecurities.id</para>
        </entry>
      </row>
      <row>
        <entry valign="top">
          <para
>Titres et cours</para>
        </entry>
        <entry valign="top">
          <para
>kmmSecurities.id</para>
        </entry>
        <entry valign="top">
          <para
>kmmPrices.fromId ou kmmPrices.toId</para>
        </entry>
      </row>
      <row>
        <entry valign="top">
          <para
>Cours des devises</para>
        </entry>
        <entry valign="top">
          <para
>kmmCurrencies.ISOCode</para>
        </entry>
        <entry valign="top">
          <para
>kmmPrices.fromId ou kmmPrices.toId</para>
        </entry>
      </row>
    </tbody>
  </tgroup>
</informaltable>

<para
>Remarques :  </para>

<para
>1 &#x2013; txType = &#x201C;N&#x201D; pour les opérations normales, &#x201C;S&#x201D; pour les opérations récurrentes (<foreignphrase
>scheduled</foreignphrase
>) </para>

<para
>2 &#x2013; si kmmAccounts.isStockAccount = &#x201C;Y&#x201D; </para>
</sect3>

<sect3>
<title
>Format des champs</title>

<para
>Plusieurs des champs de données sont gérés sous un format qui peut ne pas être directement compatible avec les programmes externes. Dans ces cas de figure, les informations sont dupliquées dans les deux formats interne et externe. </para>

<para
>Les montants monétaires et la valeur des actions sont présentés à la fois sous forme numérateur /dénominateur et avec un nom de champ suffixé par « Formatted », comme présenté sur votre écran. </para>
  
<para
>De manière similaire, quelques champs, tels que « type de compte » apparaissent à la fois comme un code numérique et comme une chaîne de caractères suffixée à la manière et dans le langage de l'application. </para>
</sect3>

<sect3>
<title
>Mise à jour de vos données</title>

<para
>Le fait de disposer des données dans un format standard de l'industrie vous permet de les modifier en dehors de l'application &kappname;. NE LE FAITES PAS tant que vous ne savez pas exactement ce que vous faites, et faites toujours une sauvegarde préalable de vos données. Si vous faisiez une erreur, &kappname; pourrait très bien ne plus avoir accès à vos données et vous pourriez tout perdre. Vous êtes averti !  </para>
</sect3>

<sect3>
<title
>Requêtes mémorisées</title>

<para
>La plupart des systèmes de base de données vous permettent d'enregistrer des requêtes d'usage courant et dans certains cas, celles-ci peuvent être conservées comme les tables ou autres objets au sein de votre base de données. Comme vous avez pu le deviner à partir de ce qui a été dit plus haut, tous les noms de table de &kappname; commencent par les lettres minuscules « kmm ». Ce principe de base sera appliqué et seulement les tables dont les noms débutent par ces trois lettres seront mises à jour. Ainsi, à condition que vous évitiez de faire comme ça dans le nommage de vos requêtes, &etc;, vous ne devriez pas rencontrer de problème. </para>
</sect3>
</sect2>

<sect2 id="details.database.generatesql">
<title
>Création manuelle d'une base de données</title>
<note>
  <para
>Cette section traite d'un usage avancé des bases de données et peut être sautée par l'utilisateur classique. </para>
</note>

<sect3>
<title
>Quand utiliser</title>
<para
>Il peut y avoir des situations où &kappname; est incapable de créer une base de données automatiquement, ou qu'il la crée sans certaines options demandées par l'utilisateur. Par exemple, le système de bases de données peut n'être pas tout à fait conforme au standard d'utilisation de SQL, ou encore, une prise en charge de nouveaux systèmes qui n'ont pas encore été testés complètement dans &kappname; peut apparaître. </para>
<para
>Avant d'utiliser ces nouvelles fonctionnalités, vous devriez essayer de créer seulement la base de données elle-même (&cad; avec l'instruction CREATE DATABASE). À supposer que la base de données existe, &kappname; peut très bien être capable de créer les tables, &etc; avec la procédure d'enregistrement décrite plus haut. </para>
</sect3>

<sect3>
<title
>Génération de la requête SQL</title>
<para
>Si ceci échoue, il est possible de générer les commandes SQL de base nécessaires à la création des diverses tables, vues et index requis par l'application. Sélectionnez <guimenuitem
>Générer le SQL de la base de données</guimenuitem
> depuis le menu <guimenu
>Outils</guimenu
>. Ceci affiche la boîte de dialogue suivante :  </para>
<screenshot>
  <mediaobject>
  <imageobject>
  <imagedata fileref="generate_sql.png" format="PNG"/>
  </imageobject>
  </mediaobject>
</screenshot>

<para
>En choisissant le type de base de données, la requête SQL appropriée apparaît dans la zone de saisie de texte <guilabel
>code SQL pour la création</guilabel
> ; ce code peut être modifié par l'utilisateur, ou enregistré dans un fichier de texte en cliquant sur le bouton <guibutton
>Enregistrer la SQL</guibutton
>. Dans le dernier cas, la base de données doit être créée en utilisant les fonctions d'administration du système de bases de données. </para>
<para
>Si après avoir édité le texte dans la boîte de dialogue, vous souhaitez que &kappname; crée la base de données, vous devez remplir les autres champs de la boîte de dialogue, comme détaillé à la section <link linkend="details.database.selectdatabase"
>Création d'une base de données</link
> plus haut, et cliquer sur le bouton <guibutton
>Créer des tables</guibutton
>. Notez que, sauf dans le cas de SQLite, vous devrez soit inclure une instruction CREATE DATABASE valable comme première commande, soit avoir préalablement adressé une telle commande depuis l'extérieur à &kappname;  </para>
</sect3>

<sect3>
<title
>Avertissement</title>
<para
>Vous devriez être très vigilant en éditant les définitions d'une quelconque table ou vue de base (celles dont le nom commence par « kmm » ). Quelques changements, tels qu'allonger la longueur d'un champ d'entier, peut avoir un impact limité, mais vous ne devriez pas retirer ou changer la séquence d'un champ, sous peine de voir &kappname; refuser de fonctionner ou corrompre vos données. </para>
<para
>Alors qu'ajouter ou retirer des index peut accroître la performance, vous devriez aussi être conscient que cela peut avoir l'effet inverse. Une connaissance du fonctionnement interne de &kappname; peut aider à obtenir la meilleure performance dans ces circonstances. </para>
</sect3>

</sect2>

<sect2>
<title
>Chiffrement</title>

<para
>Le chiffrement des données dans votre base de données n'est pas actuellement possible.  </para>
</sect2>
</sect1>
</chapter>
