&Tony.Bloomfield; &Tony.Bloomfield.mail;
2010-07-25
4.5

# Databas

## Använda relationsdatabaser

### Inledning

Från utgåva 1.0, tillåter &kappname; att du lagrar data i en relationsdatabas. En av fördelarna med att använda detta industristandardformat är att det låter dig visa data med något av de grafiska gränssnitten som OpenOffice.org, kanske med något format som &kappname; för närvarande inte tillhandahåller. Dessutom bör en viss kunskap om SQL (Structured Query Language, det språk som används i hela världen för att komma åt relationsdatabaser) göra det möjligt att enklare exportera data till ett externt program, till exempel ett budgetprogram.

### Förberedelse

För att komma åt databasen använder &kappname; SQL-modulen som levereras av &Qt; Software som en del av deras &Qt; programmeringssystem. Modulen stöder ett antal olika databassystem via en samling drivrutiner. Bland de populärare systemen med öppen källkod, där drivrutiner finns tillgängliga är MySQL, SQLite (bara version 3 och senare) och PostgreSQL. Modulen stöder också "tyngre", mer industrialiserade, system såsom Oracle och IBM DB2.

Med undantag av SQLite, använder systemen en klient/server-modell, där 'klientprogramvaran' finns på 'din' dator, medan servern befinner sig på samma dator som själva databasen, vilket kan vara någon annanstans på ett nätverk. I det normala scenariot för ett hemekonomiprogram som &kappname;, är det naturligtvis så att din dator fungerar både som klient och server. Din första uppgift är därför att installera klientprogramvaran, och troligtvis också serverprogramvaran, när du har bestämt dig för vilket databassystem du vill använda.

Förutom själva databasprogramvaran, måste du också installera motsvarande &Qt;-drivrutin. Drivrutiner för de populärare databaserna ingår i de flesta distributioner. Kontrollera annars på webbsidan för &Qt; software och sök efter 'SQL drivers'.

SQLite arbetar inte med en klient/server-modell. Varje databas finns i en vanlig fil, lokal eller på en annan dator, som kan kommas åt via de normala metoderna som det underliggande operativsystemet tillhandahåller. I detta fall, finns det därför bara ett programvarupaket och drivrutinen att installera. Dessutom gäller kanske inte en del av informationen som följer SQLite, i synnerhet den som är relaterad till administration.

### Administration

Att hålla ordning på databaser är lite komplexare än att hantera vanliga filer. Varje system har olika metoder för att utföra de nödvändiga administrativa uppgifterna som att skapa databaser, tilldela rättigheter till diverse användare, skapa säkerhetskopior, etc. Att beskriva dessa är utanför den här handbokens omfattning, men alla produkter som stöds tillhandahåller fullständig referensdokumentation, och en snabb sökning på webben ger pekare till många handledningar i ämnet.

#### Skapa databasen

Kod har inkluderats som skapar en initial databas för att lagra data om det inte finns någon. Dock rekommenderas du starkt att skapa en databas i förväg, eftersom de flesta produkter erbjuder ett antal alternativ som kan vara relevanta. Ett som kan vara särskilt viktigt för vissa, är att ange teckenuppsättning (t.ex. UTF-8) som används för textfält.

Vid denna tidpunkt måste du också ange rättigheter för diverse användare att utföra olika åtgärder med databasen. I de flesta system, blir användaren som skapar databasen automatiskt tilldelad fullständiga rättigheter, men det är ett område där man bör rådfråga dokumentationen.

Vid den första användningen av databasen, och då och då vid andra tillfällen när databasens layout ändras, behöver du rättigheter (också kallat behörighet) att skapa och ändra tabeller och vyer (se nästa stycke). Det kan finnas olika namn på rättigheter/behörighet i olika system, men något som liknar CREATE (skapa) och ALTER (ändra) bör vara vanligt. Vid normal användning måste du kunna läsa och skriva poster. Det definieras i allmänhet i SQL som rättigheterna SELECT (välja), INSERT (infoga), UPDATE (uppdatera) och DELETE (ta bort).

#### Skapa tabeller

När du först använder det, kommer &kappname; försöka skapa nödvändiga tabellstrukturer. För att uppnå maximal kompatibilitet mellan diverse databastyper, används bara en delmängd av vanliga datatyper. Det kan hur som helst uppstå situationer där en viss typ inte stöds, och i detta fall finns möjligheten att generera nödvändig SQL-kod för att skapa tabellerna. Koden kan därefter ändras efter behov, och användas för att skapa tabellerna utanför &kappname;. Skulle du hamna i den situationen, kan hjälp oftast erhållas från &devlist;. Se Skapa en databas för hand för mer information.

### Skapa en databas

Öppna eller importera en befintlig datafil, eller skapa en ny, med användning av &kappname;. Välj därefter Spara som databas i menyn Arkiv. Det visar följande dialogruta:

Fyll i lämpliga fält för typen av databas du har valt (som vanligt är nödvändiga fält markerade) och klicka på Ok för att skapa databasen.

#### Databastyp

Rutan listar alla &Qt; SQL-drivrutiner installerade på systemet. Välj drivrutin för din databastyp. Om den du vill ha inte finns i listan, måste du installera lämplig drivrutin. Se dokumentationen för din distribution, eller besök webbsidan för &Qt; software och sök efter 'SQL drivers'.

#### Fil (bara SQLite)

SQLite har en databas per fil, ange alltså därför filnamnet där du vill skapa databasen. För att bläddra i filsystemet, klicka på ikonen till höger om filnamnet. För SQLite databaser är fälten Värddatornamn, Användarnamn och Lösenord inte relevanta. SQLite-filen måste ha lämpliga läs- och skrivrättigheter inställda av det underliggande filsystemet för att aktivera lämplig åtkomst för användaren som för närvarande är inloggad.

#### Databasnamn (övriga)

Standardnamnet på databasen är KMyMoney, men du kan välja något annat namn om du vill. För vissa typer av databas, kanske &kappname; inte klarar av att skapa databasen, så den måste skapas i förväg genom att använda lämplig administrationsprocedur. &kappname; klarar dock oftast av att skapa alla tabellstrukturer när det behövs. Om inte, kan du skapa dem själv. Se Skapa en databas för hand för mer information.

#### Värddatornamn

För vanliga användare, är standardnamnet localhost, vilket är datorn som för närvarande används, riktigt. För nätverksdatabaser, ska den anslutna värddatorns namn anges.

#### Användarnamn och lösenord

Kontrollera inställda rättigheter för databasen, eller kontakta administratören av databasen, för riktiga värden att använda här. Användarnamnet måste ha möjlighet att välja, ta bort, infoga och uppdatera poster. Om användarnamnet är samma som inloggningsnamnet behövs i allmänhet inte något lösenord.

### Komma åt data

#### Tabellkonstruktion

För att komma åt data i &kappname;, använd alternativet Öppna databas i menyn Arkiv. Det visar en dialogruta som liknar den ovanstående.

För att komma åt data på andra format, måste du känna till en del om hur den lagras i relationsdatabaser. Det allra enklaste sättet att få en känsla för det är att öppna databasen i ett gränssnitt som OpenOffice.org. Det tillhandahåller en lista med de olika tabellerna som utgör databasen, och gör det möjligt för dig att se layouten för var och en av dem.

För att hämta ut data, t.ex. till ett kalkylark eller extern fil, är det nästan utan undantag nödvändigt att välja länkad data från en eller flera tabeller. Det görs genom att 'förena' tabellerna, genom att använda ett fält som är gemensamt för båda. Du hittar mycket mer information om hur man gör det i handledningarna på nätet som nämndes ovan. Följande tabell listar fälten som används för att definiera dessa relationer mellan tabeller.

Relation | Matchar | Med
--- | --- | ---
Institutioner och konton | kmmInstitutions.id | kmmAccounts.institutionId
Överliggande konton och delkonton | kmmAccounts.id | kmmAccounts.parentId
Transaktioner och delningar (se anmärkning 1) | kmmTransactions.id | kmmSplits.transactionId
Konton och delningar | kmmAccounts.id | kmmSplits.accountId
Betalare och delningar | kmmPayees.id | kmmSplits.payeeId
Schemaläggningar och transaktioner | kmmSchedules.id | kmmTransactions.id
Transaktioner och valutor | kmmTransactions.currencyId | kmmCurrencies.ISOCode
Konton och värdepapper (se anmärkning 2) | kmmAccounts.currencyId | kmmSecurities.id
Värdepapper och kurser | kmmSecurities.id | kmmPrices.fromId or kmmPrices.toId
Valutakurser | kmmCurrencies.ISOCode | kmmPrices.fromId or kmmPrices.toId

Anmärkningar:

1 – txType = “N” för normala transaktioner, “S” för schemalagda transaktioner

2 – om kmmAccounts.isStockAccount = “Y”

#### Fältformat

Flera av datafälten lagras med ett internt format, vilket kanske inte är omedelbart användbart för externa program. I dessa fall, har informationen duplicerats med både internt och externt format.

Valutabelopp och aktievärden visas både på bråkform, och på formen som syns i fönstren med ett fältnamn som slutar med 'Formatted' (formaterat).

På liknande sätt, anges fält som kontotyp både som en numerisk kod, och på programmets form och språk i ett fält som slutar med 'String' (sträng)

#### Uppdatera data

Att ha data på ett industristandardformat ger möjlighet att ändra det utanför programmet &kappname;. GÖR INTE DET, om du inte verkligen vet vad du gör, och försäkra dig alltid om att först skapa en säkerhetskopia av data. Om du gör fel, kanske &kappname; inte kan komma åt data, och du kan till och med bli av med det helt och hållet. Du har fått en varning.

#### Lagrade förfrågningar

De flesta databassystem låter dig lagra ofta använda förfrågningar och procedurer, och i vissa fall kan de lagras som tabeller i själva databasen. Som du kanske gissat från det ovanstående, börjar alla tabeller som &kappname; använder med 'kmm', med små bokstäver. Den standarden kommer att upprätthållas, och bara tabeller som börjar med dessa bokstäver kommer att uppdateras. Under förutsättning att du undviker dessa när du namnger förfrågningar, etc., bör du sålunda inte uppleva några problem.

### Skapa en databas för hand

Det här avsnittet beskriver mer avancerad användning av databaser, och kan hoppas över av vanliga användare.

#### När det bör användas

Det kan finnas tillfällen då &kappname; inte klarar av att skapa databasen automatiskt, eller skapar den utan vissa alternativ som krävs av användaren. Exempelvis kanske inte databassystemet som används är fullständigt anpassat för vanlig användning av SQL, eller stöd kan ha lagts till för nya system som inte har utprovats fullständigt i &kappname;.

Innan funktionen används, bör du försöka att skapa själva databasposten själv (dvs. med satsen CREATE DATABASE). Under förutsättning att databasen finns, kan &kappname; mycket väl klara av att skapa tabeller, etc. med den normala proceduren för att spara i en databas, som beskrivs ovan.

#### Skapa SQL-koden

Om detta misslyckas, är det möjligt att generera de grundläggande SQL-kommandon som behövs för att skapa de olika tabellerna, vyerna eller indexen som krävs av programmet. Välj Generera SQL för databas i menyn Verktyg. Det visar följande dialogruta:

När typ av databas väljes, visas lämplig SQL i textrutan SQL för att skapa databas. Den kan redigeras av användaren, eller sparas i en textfil genom att klicka på Spara SQL. I det senare fallet, måste databasen skapas med de administrativa funktionerna som tillhandahålls av databassystemet.

Om du vill att &kappname; ska skapa databasen efter att du har redigerat texten i dialogrutan, måste fylla i övriga fält i dialogrutan, som beskrivs under Skapa en databas ovan, och klicka på Skapa tabeller. Observera att utom för fallet med SQLite, måste du antingen inkludera en lämplig CREATE DATABASE-sats som första kommando, eller tidigare ha utfört ett sådant kommando utanför &kappname;.

#### Varning

Du måste vara mycket försiktig när du redigerar definitionerna av någon av de grundläggande tabellerna eller vyerna (de med namn som börjar med 'kmm'). Vissa ändringar, som att öka längden på ett heltalsfält, kan ge liten påverkan, men du får inte ta bort eller ändra följden av några fält, annars kanske &kappname; vägrar fungera, eller förstör data.

Även om prestanda kan förbättras genom att lägga till eller ta bort index, bör du också vara medveten om att motsatsen kan inträffa. Viss kunskap om de interna funktionerna i &kappname; kan hjälpa till att få bästa prestanda under dessa omständigheter.

### Kryptering

Kryptering av data i databasen stöds för närvarande inte.