&Tony.Bloomfield; &Tony.Bloomfield.mail;
&Jack.H.Ostroff; &Jack.H.Ostroff.mail;
2024-12-01
5.2.0

# Database

## Gebruik van relationele databases

### Inleiding

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

Hoewel de meeste relationele databasesystemen gelijktijdige toegang toestaan tot een database door meer dan één gebruiker, is dat niet mogelijk met &kmymoney;. Hoewel &kmymoney; zijn gegevens in een relationele database kan opslaan, gebruikt het in werkelijkheid de database als gewoon een ander type opslag in een bestand. Wanneer u uw bestand opent, leest het programma alle gegevens uit de database. Terwijl u werkt met uw gegevens, worden de wijzigingen alleen in de interne opslag gemaakt; ze worden niet onmiddellijk teruggeschreven naar de database. Alleen wanneer u uw gegevens opslaat schrijft &kmymoney; de inhoud terug naar de database.

Er zijn verzoeken gedaan om &kmymoney; de database te laten bijwerken voor elk wijziging in de gegevens, maar dat zou een aanzienlijke wijziging zijn in de gehele manier waarop het programma zijn interne gegevensstructuren beheert, dus is dit erg onwaarschijnlijk om in de overzichtbare toekomst te gebeurtenissen.

### Voorbereiding

Voor toegang tot de database gebruikt &kmymoney; de SQL-module geleverd door &Qt; Software als onderdeel van hun &Qt; programmeringssysteem. Deze module ondersteunt veel databasesystemen via een verzameling stuurprogramma's. &Qt; heeft stuurprogramma's voor een groot aantal open-source en bedrijfseigen relationele database systemen, inclusief MySQL, PostgresSQL en SQLCipher. De module ondersteunt ook de 'zwaardere', meer industriële, systemen zoals Oracle en IBM DB2.

Eerdere versies van &kmymoney; ondersteunden SQLite. Dit is vervangen door ondersteuning voor SQLCipher, wat een alleenstaande afsplitsing is van de SQLite databasebibliotheek die 256 bits AES versleuteling en andere beveiligingsfuncties biedt. Het SQLCipher-stuurprogramma zal bestaande SQLite bestanden lezen. Zie de onderstaande sectie over SQLCipher voor meer details.

Met de uitzondering van SQLCipher 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; kan 'uw' machine zowel client als server zijn. 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 &Linux;-distributies zullen stuurprogrammamodulen voor de meer populaire databases leveren. Kijk anders op de &Qt; software website en zoek naar SQL drivers.

SQLCipher en 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.

### 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 of backups maken. Beschrijven van deze taken ligt buiten de scope van dit handleiding, 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

&kmymoney; bevat SQL-code 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 de 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 een van de kanalen in de lijst in de sectie op Hulp krijgen. 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 daarna menu-item Bestand Als database opslaan Selecteer SQL uit het afrolveld Te gebruiken type opslag voor uw gegevens en klik op OK. Dit zal de volgende dialoog tonen:

een database aanmaken
een database aanmaken

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

Deze afrollijst 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/SQLCipher)

SQLCipher 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 SQLCipher databases zijn de velden Databasenaam, Hostnaam, Gebruikersnaam niet relevant. Het SQLCipher-bestand moet de toepasselijke lees-/schrijfrechten bezitten van het onderliggende bestandssysteem om de toepasselijke toegang in te schakelen voor de huidige aangemelde gebruiker.

De makers van SQLCipher hebben versie 4.0 in november, 2018 vrijgegeven. Er zijn echter veel &kmymoney; gebruikers, speciaal diegenen die niet vaak opwaarderen of die LTS (Long Term Support) &Linux; distributies gebruiken, kunnen nog steeds een database gebruiken die is gemaakt met versie 3 van SQLCipher. Op enig moment, gewoonlijk na een opwaardering van &kmymoney; of hun distributie, komen ze tegen dat ze niet in staat zijn om hun database te openen, met een fout die niet speciaal informatief of nuttig is. Wat in dit geval vereist is is het opwaarderen van de database zelf van versie 3 naar versie 4. Instructies hiervoor zijn te vinden op de website van SQLCipher.

#### 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 van de database-server.

#### 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 menu-item Bestand Database openen. Dit zal een dialoog openen lijkend op de bovenstaande.

Als u uw database hebt geopend door eerst een bestand te openen en daarna Bestand Opslaan en SQL kiezen, 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, kies menu-item Bestand Opslaan als..., kies XML als het type opslag, en 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. 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 voor hem. 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` of `kmmPrices.toId`
Koersen | `kmmCurrencies.ISOCode` | `kmmPrices.fromId` of `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 typisch getoond.

Sommige velden zoals een type rekening verschijnen zowel als een numerieke code als in een veld met achtervoegsel '`String`' 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 het menu-item Hulpmiddelen Database SQL genereren. Dit geeft de volgende dialoog:

sql genereren om een database aan te maken
sql genereren om een database aan te maken

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.