# Database

## Gebruik van relationele databases

### Inleiding

Vanaf uitgave 1.0 biedt &kmymoney; u het bewaren van uw gegevens in een relationele database. Een van de voordelen van het gebruiken van dit industriestandaardformaat is dat het u biedt om uw gegevens te bekijken in een van de grafische front-ends zoals OpenOffice.org of LibreOffice, misschien in een formaat dat &kmymoney; nu niet levert. Een beetje kennis van SQL (Structured Query Language, the taal wereldwijd gebruikt om toegang te hebben tot relationele databases) zou u in staat stellen gemakkelijker gegevens te exporteren naar een extern programma, bijvoorbeeld, een toepassing voor budgettering.

### Voorbereiding

Voor toegang tot de database gebruikt &kmymoney; de SQL-module geleverd door &Qt; Software als onderdeel van hun &Qt; programmeringssysteem. Deze module ondersteunt een aantal verschillende databasesystemen via een verzameling stuurprogramma's. Onder de meer populaire open-source systemen waarvoor stuurprogramma's beschikbaar zijn zijn MySQL, SQLite (alleen versie 3 en hoger) en PostgreSQL. De module ondersteunt ook de 'zwaardere', meer industriële, systemen zoals Oracle en IBM DB2.

Met de uitzondering van SQLite gebruiken deze systemen een client/server-model, waar de 'client' software in 'uw' machine zit, terwijl de server aanwezig is op dezelfde machine als de database zelf, wat elders in een netwerk kan zijn. Natuurlijk, in the normaal scenario voor een persoonlijke financiële toepassing zoals &kmymoney; is 'uw' machine zowel client als server. Uw eerste taak is daarom te beslissen welk databasesysteem u wilt gaan gebruiken, om de client te installeren en meest waarschijnlijke serversoftware.

Naast de databasesoftware zelf moet u ook de overeenkomstige &Qt; stuurprogrammamodule installeren. De meeste distributies zullen stuurprogrammamodulen voor de meer populaire databases leveren. Kijk anders op de &Qt; software website en zoek naar 'SQL drivers'

SQLite werkt niet met een client/server-model; elke database zit in een gewoon bestand, lokaal of op afstand, met toegang met de normale methoden geboden door het onderliggende besturingssysteem. In dit geval is er daarom slechts één softwarepakket en het stuurprogramma te installeren. Ook zal iets van de volgende informatie, speciaal gerelateerd aan administratie, niet van toepassing zijn op SQLite.

### Administratie

Zorgen voor databases is iets complexer dan werken met reguliere bestanden. Elk systeem heeft verschillende methoden voor uitvoeren van de noodzakelijke administratieve taken, zoals databases aanmaken, rechten toekennen aan verschillende gebruikers, backups maken, &etc; Beschrijven van deze taken ligt buiten de scope van dit handboek, maar alle ondersteunde producten bieden uitgebreide referentiedocumentatie en een snelle zoektocht op het web zal u naar vele inleidingen over het onderwerp leiden.

#### Een database aanmaken

Code is beschikbaar om een initiële database aan te maken om uw gegevens vast te leggen als zoiets nog niet bestaat. Het is echter sterk aanbevolen dat u vooraf een database aanmaakt, omdat de meeste producten een aantal opties leveren die relevant kunnen zijn. Een die speciaal belangrijk voor sommigen zou kunnen zijn is het bepalen van de tekenset (⪚, UTF-8) om te gebruiken voor tekstvelden.

Op dit moment zal het ook nodig zijn om rechten voor verschillende gebruikers toe te kennen om verschillende bewerkingen op de database uit te kunnen voeren. In de meeste systemen zal de gebruiker die de database aanmaakt automatisch alle rechten krijgen toegekend, maar dit is een gebied waarin de documentatie geraadpleegd zou moeten worden.

Voor uw eerste gebruik van de database en af en toe op andere tijden wanneer de indeling van de database wijzigt, zult u rechten nodig hebben (ook privileges genoemd) om tabellen en views te wijzigen of aan te maken (zie de volgende paragraaf). Er kunnen verschillende namen voor de rechten/privileges in verschillende systemen zijn, maar zoiets als CREATE en ALTER zouden algemeen moeten zijn. Voor normaal gebruik zult u in staat moeten zijn om records te lezen en te schrijven; deze zijn normaal gedefinieerd in SQL als SELECT, INSERT, UPDATE en DELETE rechten.

#### Tabellen aanmaken

Bij uw eerste gebruik zal &kmymoney; proberen om de noodzakelijke tabelstructuren aan te maken. Om maximale compatibiliteit tussen verschillende typen databases te verkrijgen, zal alleen een subset van gemeenschappelijke typen gegevens worden gebruikt. Er kunnen toch situaties zijn waar een speciaal type is niet wordt ondersteund en in dat geval, zijn er voorzieningen gemaakt om de noodzakelijke SQL-code te genereren om tabellen aan te maken. Deze code kan dan naar behoefte gewijzigd worden en gebruikt om de tabellen buiten &kmymoney; aan te maken. Als u zich in deze situatie bevindt, kan gewoonlijk hulp verkregen worden op de &devlist;. Zie Handmatig aanmaken van een database voor meer informatie.

### Een database aanmaken

&kmymoney; gebruiken, open of importeer een bestaand gegevensbestand of maak een nieuwe. Selecteer dan Opslaan als database uit het menu Bestand. Dit zal de volgende dialoog tonen:

Completeer de toepasselijke velden in het type database dat u hebt geselecteerd (zoals gebruikelijk zijn verplichte velden geaccentueerd) en druk op OK om de database aan te maken.

#### Type database

Dit vak geeft een lijst met alle &Qt; SQL-stuurprogramma's geïnstalleerd op uw systeem. Selecteer het stuurprogramma voor uw type database. Als degene die u wilt niet in de lijst staat, dan moet u het toepasselijke stuurprogramma installeren. Zie de documentatie van uw distributie of bezoek de &Qt; softwarewebsite en zoek naar 'SQL drivers'.

#### Bestand (alleen SQLite)

SQLite heeft één database per bestand voer dus de bestandsnaam in waarin u de database wilt aanmaken. Om in het bestandssysteem te bladeren, druk op het pictogram rechts van de bestandsnaam. Voor SQLite databases zijn de velden Hostnaam, Gebruikersnaam en Wachtwoord niet relevant. Het SQLite-bestand moet de toepasselijke lees-/schrijfrechten bezitten van het onderliggende bestandssysteem om de toepasselijke toegang in te schakelen voor de huidige aangemelde gebruiker.

#### Databasenaam (anderen)

De standaard databasenaam is KMyMoney, maar u kunt een andere naam kiezen als u dat wilt. Voor sommige typen databases kan &kmymoney; niet in staat zijn om de database aan te maken, deze moet dus vooraf aangemaakt worden met de toepasselijke administratieve procedure. &kmymoney; zal gewoonlijk in staat zijn om alle tabelstructuren waar nodig aan te maken. Zo niet, dan kunt u ze zelf aanmaken. Zie Handmatig aanmaken van de database voor meer informatie.

#### Hostnaam

Voor de gemiddelde gebruiker is de standaardnaam localhost, wat de machine is waarop u nu werkt, juist. Voor databases via het netwerk, voer de verbonden hostnaam in.

#### Gebruikersnaam en wachtwoord

Controleer de ingestelde rechtenset op uw database of neem contact op met de beheerder van de database voor de juiste hier te gebruiken waarden. De gebruikersnaam moet in staat zijn om records te selecteren, in te voegen, bij te werken en te verwijderen. Als de gebruikersnaam hetzelfde is als de naam waarmee u zich aanmeldt, dan is een wachtwoord normaal niet vereist.

### Toegang tot uw gegevens

#### Tabelontwerp

Om toegang te hebben tot uw gegevens in &kmymoney;, gebruik het item Database openen in het menu Bestand. Dit zal een dialoog openen lijkend op de bovenstaande.

Als u uw database hebt geopend door eerst een bestand te openen en daarna Als database opslaan, zoals bovenstaand beschreven, dan worden alle volgende wijzigingen in uw gegevens alleen in de database opgeslagen en niet in het bestand. Dit betekent dat u het bestand als een reservebestand of momentopname van uw gegevens op een specifieke tijd kunt gebruiken. Om een nieuwe reservekopie te maken zoals deze, open uw database, doe bestand Opslaan als..., geef een toepasselijke bestandsnaam. Denk er aan om uw database opnieuw te openen, zodat &kmymoney; niet doorgaat om het bestand te gebruiken.

Om toegang tot uw gegevens te krijgen in andere formaten zult u een beetje meer moeten weten over hoe deze in een relationele databases worden bewaard. De aller gemakkelijkste manier om hiervoor gevoel te krijgen is om de database te openen in een front-end zoals OpenOffice.org of LibreOffice.org. Dit levert een lijst met de verschillende tabellen op die samen de database vormen en stelt u in staat om de indeling van elk van hen te zien.

Om ⪚, gegevens op te halen naar een rekenblad of extern bestand is het bijna altijd nodig om gekoppelde gegevens uit meer dan één tabel te halen. Dit wordt gedaan door 'joining' van de tabellen door een veld te gebruiken dat gemeenschappelijk is in elk. U kunt heel wat meer informatie over hoe dit te doen uit de online database inleidingen hierboven genoemd. De volgende tabel geeft een lijst met de velden gebruikt om deze inter-tabel relaties te definiëren.

Relatie | Komt overeen | Met
Banken en rekeningen | kmmInstitutions.id | kmmAccounts.institutionId
Rekeningen moeder/dochter | kmmAccounts.id | kmmAccounts.parentId
Transactioes en splitsingen (zie Note 1) | kmmTransactions.id | kmmSplits.transactionId
Rekeningen en splitsingen | kmmAccounts.id | kmmSplits.accountId
Begunstigden en splitsingen | kmmPayees.id | kmmSplits.payeeId
Periodieken en transacties | kmmSchedules.id | kmmTransactions.id
Transacties en valuta | kmmTransactions.currencyId | kmmCurrencies.ISOCode
Rekeningen en waardepapieren (zie Note 2) | kmmAccounts.currencyId | kmmSecurities.id
Waardepapieren en prijzen | kmmSecurities.id | kmmPrices.fromId or kmmPrices.toId
Koersen | kmmCurrencies.ISOCode | kmmPrices.fromId or kmmPrices.toId

Notities:

1 – txType = “N” voor normale transacties, “S” voor periodieke transacties

2 – if kmmAccounts.isStockAccount = “Y”

#### Veld-indelingen

Verschillende gegevensvelden bevatten een intern formaat die niet onmiddellijk bruikbaar zijn in externe programma's. In deze gevallen, is de informatie gedupliceerd in zowel interne als externe formaten.

Geldhoeveelheden en waarden van aandelen worden getoond zowel in teller/noemer formaat als met een veldnaam met achtervoegsel 'Formatted', in de vorm zoals op uw scherm getoond.

Sommige velden zoals een type rekening verschijnen zowel als een numerieke code als in een veld met achtervoegsel 'Tekenreeks' in de vorm en taal van de toepassing.

#### Uw gegevens bijwerken

Gegevens in een industriestandaardformaat hebben geeft u de mogelijkheid om het buiten de toepassing &kmymoney; te wijzigen. DOE DAT NIET tenzij u echt weet wat u doet en maak altijd eerst een reservekopie van uw gegevens. Als u het fout doet kan &kmymoney; mogelijk niet in staat om toegang tot uw gegevens te hebben en u zou zelfs kunnen eindigen met alles verliezen. U bent gewaarschuwd!

#### Opgeslagen zoekopdrachten

De meeste databasesystemen stellen u in staat om algemeen gebruikte queries en procedures op te slaan en, in sommige gevallen, kunnen deze behouden worden als tabellen of andere objecten binnen uw database zelf. Zoals u uit het bovenstaande geraden kunt hebben, beginnen alle door &kmymoney; gebruikte tabellen met de kleine letters 'kmm'. Deze standaard zal worden gehandhaafd en alleen tabellen die met deze letters beginnen zullen bijgewerkt worden. Als u deze in de naamgeving van uw queries &etc; nalaat, zou u geen problemen hoeven te ondervinden.

### Handmatig aanmaken van een database

Deze sectie dekt het meer geavanceerd gebruik van een database en kan overgeslagen worden voor de algemene gebruiker.

#### Wanneer te gebruiken

Er kunnen gevallen zijn wanneer &kmymoney; niet in staat is om de database automatisch aan te maken of het aanmaken zonder sommige opties vereist door de gebruiker. Het gebruikte databasesysteem kan bijvoorbeeld niet volledig conform het standaard SQL-gebruik zijn of ondersteuning kan geïntroduceerd worden voor nieuwe systemen die niet volledig getest zijn in &kmymoney;.

Voordat u deze faciliteit gaat gebruiken zou u zelf eens moeten proberen een item in de database aan te maken (&ie; met het statement CREATE DATABASE). Aangenomen dat de database bestaat zal &kmymoney; heel goed in staat zijn om de tabellen &etc; aan te maken in de normale opslagprocedure van de database zoals bovenstaand beschreven.

#### De SQL genereren

Als dit mislukt is het mogelijk om de basis SQL-commando's nodig voor het aanmaken van de verschillende tabellen, views en indexen vereist door de toepassing. Selecteer Database SQL genereren uit het menu Hulpmiddelen. Dit geeft de volgende dialoog:

Bij selecteren van het type database zal de van toepassing zijnde SQL in het tekstvak SQL voor aanmaken verschijnen; dit kan door de gebruiker worden bewerkt of opgeslagen in een tekstbestand door te drukken op SQL opslaan. In het laatste geval moet de database aangemaakt worden met de administratieve functies geleverd door het databasesysteem.

Als u, na bewerking van de tekst in de dialoog, wilt dat &kmymoney; de database aanmaakt, dan moet u de andere velden in de dialoog invullen, zoals bovenstaand gedetailleerd in Een database aanmaken en druk op Tabellen aanmaken. Merk op dat u, behalve in het geval van SQLite, ofwel een toepasselijk statement CREATE DATABASE als het eerste commando moet invoegen of eerder zo'n commando extern van &kmymoney; hebt uitgevoerd

#### Waarschuwing

U moet erg voorzichtig zijn bij bewerken van de definities van elk van de basis tabellen of views (die met namen beginnend met 'kmm'). Sommige wijzigingen, zoals de lengte van een integer-veld, kan weinig gevolgen hebben, maar u zou niets moeten verwijderen of de volgorde van een veld veranderen, of &kmymoney; zou niet meer kunnen functioneren of gegevens verminken.

Terwijl toevoegen of verwijderen van indexen prestaties zouden kunnen verbeteren, zou u er ook voor moeten oppassen dat het tegenovergestelde kan gebeuren. Enige kennis van de interne werking van &kmymoney; zou kunnen helpen om de best mogelijke prestaties in deze omstandigheden te krijgen.

### Versleuteling

Versleuteling van gegevens in uw database wordt op dit moment niet ondersteund.