Hoofdstuk 22. Database

Tony Bloomfield

Jack H. Ostroff

herziening 5.2.0 (2024-12-01)

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.

Opmerking

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.

Opmerking

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 (bijv., 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 BestandAls 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

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 BestandDatabase openen. Dit zal een dialoog openen lijkend op de bovenstaande.

Opmerking

Als u uw database hebt geopend door eerst een bestand te openen en daarna BestandOpslaan 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 BestandOpslaan 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 bijv., 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

Opmerking

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 (bijv. 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 HulpmiddelenDatabase SQL genereren. Dit geeft de volgende dialoog:

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.