# Base de données

## Utilisation des bases de données

### Introduction

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 ou LibreOffice, peut-être dans un format que &kappname; ne prend pas en charge. Aussi, une connaissance élémentaire de SQL (Structured Query Language) 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.

### Préparation

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, SQLite (version 3 et suivantes seulement), ainsi que PostgreSQL.

À 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.

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 site web de &Qt; et cherchez les pilotes SQL (SQL drivers).

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.

### Administration

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.

#### Création d'une base de données

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.

À 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.

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.

#### Création de tables

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 à Création manuelle d'une base de données pour plus d'information.

### Création d'une base de données

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

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 Ok pour créer la base de données.

#### Type de base de données

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 site des logiciels &Qt; et cherchez SQL drivers.

#### Fichier (SQLite seulement)

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 Nom d'hôte, Nom d'utilisateur et Mot de passe 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.

#### Nom de base de données (autres)

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 Création manuelle d'une base de données pour plus d'informations.

#### Nom d'hôte

Pour l'utilisateur lambda, le nom par défaut localhost, 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é.

#### Nom d'utilisateur et mot de passe

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é.

### Accès à vos données

#### Conception d'une table

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

Si vous avez créé votre base de données en ouvrant d'abord un fichier, et en ayant fait ensuite Enregistrer comme base de données, 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 Fichier Enregistrer sous..., 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.

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.

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.

Relation | Correspond | Avec
Établissements et Comptes | kmmInstitutions.id | kmmInstitutions.id
Comptes parent / enfant | kmmAccounts.id | kmmAccounts.parentId
Opérations et répartitions (voir note 1) | kmmTransactions.id | kmmSplits.transactionId
Comptes et répartitions | kmmAccounts.id | kmmSplits.accountId
Bénéficiaires et répartitions | kmmPayees.id | kmmSplits.payeeId
Opérations récurrentes et transactions | kmmSchedules.id | kmmTransactions.id
Opérations et devises | kmmTransactions.currencyId | kmmCurrencies.ISOCode
Comptes et titres (voir note 2) | kmmAccounts.currencyId | kmmSecurities.id
Titres et cours | kmmSecurities.id | kmmPrices.fromId ou kmmPrices.toId
Cours des devises | kmmCurrencies.ISOCode | kmmPrices.fromId ou kmmPrices.toId

Remarques :

1 – txType = “N” pour les opérations normales, “S” pour les opérations récurrentes (scheduled)

2 – si kmmAccounts.isStockAccount = “Y”

#### Format des champs

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.

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.

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.

#### Mise à jour de vos données

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 !

#### Requêtes mémorisées

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.

### Création manuelle d'une base de données

Cette section traite d'un usage avancé des bases de données et peut être sautée par l'utilisateur classique.

#### Quand utiliser

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.

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.

#### Génération de la requête SQL

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 Générer le SQL de la base de données depuis le menu Outils. Ceci affiche la boîte de dialogue suivante :

En choisissant le type de base de données, la requête SQL appropriée apparaît dans la zone de saisie de texte code SQL pour la création ; ce code peut être modifié par l'utilisateur, ou enregistré dans un fichier de texte en cliquant sur le bouton Enregistrer la SQL. 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.

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 Création d'une base de données plus haut, et cliquer sur le bouton Créer des tables. 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;

#### Avertissement

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.

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.

### Chiffrement

Le chiffrement des données dans votre base de données n'est pas actuellement possible.