# Introduktion till databaser

## Vad är en databas?

Man kan definiera en databas som en samling data om ett ämne. Den är organiserad på ett sätt som gör det möjligt att enkelt bläddra bland informationen, göra ändringar eller lägga till ny data.

Titta på diagrammet för ett av de ovanstående exemplen: en enkel telefonkatalog.

Ett diagram av en databas med telefonnummer
Ett diagram av en databas med telefonnummer

Bilden ovan visar en uppsättning med två kontakter, där var och en visas på ett separat kort. Det verkar som ett sådan kort kan utgöra en enstaka rad i en tabell:

Tabellen Kontakter

Namn | Tel nr.
Anna | 699 23 43 12
Stefan | 711 19 77 21

Termer och definitioner: Ett ensamt dataobjekt som utgör en del av en större samling kan kallas en rad, eller mer professionellt en post. Samlingen kallas normalt en tabell. Dessutom är det mest naturliga namnet på tabellen det som beskriver data som den erbjuder/lagrar, vilket är Kontakter. Förutom detta, består varje rad i tabellen av kolumner som ofta också kallas fält. Det finns två kolumner (fält) i tabellen Kontakter: Namn och Tel nr..

För enkla användningar kan en enda tabell utgöra en databas. Många anser de båda ekvivalenta. Som du kommer att se, behövs det oftast mer än en tabell i riktiga databaser.

För att summera, har du redan en enkel databas med en tabell, Kontakter.

## Databaser och kalkylblad

Det är troligt att du redan har använd kalkylprogram som Kspread, OpenOffice.org Calc eller Microsoft Excel. Om du har gjort det, undrar du nog: eftersom både kalkylblad och databaser har tabeller, varför ska jag använda de senare?

Vid jämförelse av kalkylblad och databaser kan du stöta på följande saker som du senare kommer att se mer detaljerat:

- Datahänvisningsintegritet

- Dataredundans

- Dataintegritet och giltighet

- Begränsad datavisning

- Prestanda och kapacitet

- Bekväm inmatning av data

- Rapporter

- Programmering

- Flera användare

- Säkerhet

### Hur skiljer sig en databas från ett kalkylblad?

Utöka tabellen Kontakter genom att lägga till en kolumn (ett fält) Adress, så att den gradvis överskrider kapaciteteten hos en mobiltelefon. Lägg till fler telefonnummer (kontor, hem) för varje person och lägg till efternamn till namnen. För att göra det enklare antar vi följande:

- tabellen är begränsad till två personer (uppenbarligen kan det finnas hundratals eller tusentals i en riktig databas)

- att det inte finns två personer med samma för- och efternamn

Kontakttabell

För- och efternamn | Tel | Adress
Anna Johansson | 699 23 43 12 | Västerport 1, Grönköping
Stefan Andersson | 711 19 77 21 | Wadköping, Klockargränd 5
Anna Johansson | 110 98 98 00 | Västerport 1
Johansson, Anna | 312 43 42 22 | Grönköping, Västerport 1
STEFAN Andersson | 231 83 02 04 | Klockargränd 5, Wadköping

En sådan tabell kan både skapas i ett kalkylblad och i en databas. Det är förstås mycket enkelt att använda ett kalkylblad. Vilka problem stöter man på i detta stadium?

#### Datahänvisningsintegritet

Antag att du använder ett kalkylblad och måste ändra adressen för minst en person. Du har ett litet problem: du måste ofta ändra adressen på flera rader. Anna använder till exempel tre rader. Ett riktigt problem uppstår om du glömmer att ändra en av de tre raderna: adressen som hör ihop med personen blir tvetydig, på så sätt går dataintegriteten förlorad.

Förutom det finns det inget enkelt sätt att ta bort en vald person från tabellen, eftersom du måste komma ihåg att ta bort alla rader som hör ihop med honom eller henne.

#### Dataredundans

Det hör direkt ihop med föregående problem. I fälten För- och efternamn samt Adress skrivs samma data in många gånger. Det är typiskt i kalkylblad, och ett ineffektivt sätt att lagra data eftersom databasen växer i onödan, och kräver på så sätt mer datorresurser (större datastorlek och långsammare åtkomst).

Hur kan du lösa problemen med en databas? Du kan dela information i mindre bitar genom att skapa ytterligare en tabell Personer med bara två kolumner: För- och efternamn samt Adress:

Tabellen Personer

För- och efternamn | Adress
Anna Johansson | Västerport 1, Grönköping
Stefan Andersson | Klockargränd 5, Wadköping

Varje rad i tabellen Personer motsvarar en enda person. Tabellen Kontakter är från och med nu i en relation till tabellen Personer.

#### Dataintegritet och giltighet

Observera sättet som data skrivs in i fälten För- och efternamn samt Adress. De som skriver in data kan göra misstag, eller ibland till och med vara vårdslösa. I vår exempeldata har vi både olika ordning när för- och efternamn skrivs in (Anna Johansson och Johansson, Anna, Stefan och STEFAN) och ännu fler sätt att skriva in samma adress. Du kan säkert tänka dig många andra varianter.

Ovanstående problem visar att vid sökning efter telefonnumret till en person vars adress till exempel är "Västerport 1, Grönköping" får du inte ett fullständigt resultat. Du får bara en rad istället för tre. Dessutom hittar du heller inte alla telefonnummer vid sökning efter värdet "Anna Johansson" i fältet För- och efternamn, eftersom "Johansson, Anna" inte stämmer med "Anna Johansson".

Hur kan man lösa problemen genom att använda en databas? Det går att göra genom att ändra konstruktion av tabellen Personer för att:

1. Dela upp data i fältet För- och efternamn i två separata fält: Förnamn och Efternamn.

2. Dela upp data i fältet Adress i tre separata fält: Gatuadress, Gatunummer och Postort.

3. Garantera att data är riktig: genom att försäkra dig om att inga fält är tomma, t.ex. måste alltid gatunummer skrivas in.

En ändrad tabell ser ut ungefär så här:

Persontabell

Namn | Efternamn | Gatuadress | Gatunummer | Postort
Anna | Johansson | Västerport | 1 | Grönköping
Stefan | Andersson | Klockargränd | 5 | Wadköping
Villkor
nödvändigt fält | nödvändigt fält | nödvändigt fält | nödvändigt fält | nödvändigt fält

På grund av att villkoret nödvändigt fält introducerades kan vi vara säkra på att inskriven data är fullständig. I fallet med andra tabeller kan man förstås fortsätta att utesluta vissa fält när data skrivs in.

#### Begränsad datavisning

Kalkylblad visar alla rader och kolumner i tabellen, vilket är besvärligt i fallet med mycket stora datamängder. Du kan förstås filtrera och sortera rader i kalkylblad, men du måste vara extra försiktig när du gör det. Användare av kalkylblad löper risk att glömma att datavyn har filtrerats, vilket kan orsaka misstag. När du beräknar summor, kanske du tror att du har 100 rader med data, medan det i själva verket finns ytterligare 20 dolda rader.

Om du vill arbeta med en liten delmängd av data, t.ex. för att skicka den till andra för redigering, kan du kopiera och klistra in i ett annat kalkylblad och efter redigering klistra in ändrad data tillbaka i huvudkalkylbladet. Sådan "manuell" redigering kan orsaka dataförlust eller felaktiga beräkningar.

För att begränsa datavyn erbjuder databasprogram förfrågningar, formulär och rapporter.

Ett mycket praktiskt sätt att begränsa är följande utökade version av tabellen Personer som tidigare beskrivits:

Persontabell

Namn | Efternamn | Gatuadress | Gatunummer | Postort | Inkomst
Anna | Johansson | Västerport | 1 | Grönköping | 23 000
Stefan | Andersson | Klockargränd | 5 | Wadköping | 19 000

Låt oss anta att den nytillagda kolumnen Inkomst innehåller konfidentiell data. Hur kan du till exempel dela personernas kontaktinformation med arbetskollegor utan att avslöja deras inkomst? Det är möjligt om du bara delar en förfrågan och inte hela tabellen. Förfrågan kunde välja alla kolumner utom kolumnen Inkomst. I databasvärlden är en sådan förfrågan ofta känd som en vy.

#### Prestanda och kapacitet

Din dator är troligen rätt snabb, men du märker lätt att det inte hjälper med långsamma, stora kalkylblad. Deras låga effektivitet beror först av allt på avsaknaden av index som snabbar upp datasökningsprocessen (databaser erbjuder dem). Om du dessutom använder saker som systemets klippbord, kan till och med kopiering av data bli besvärlig med tiden.

Kalkylblad som innehåller stora datamängder kan ta enorm tid att öppna. Kalkylblad laddar mängder med data i datorns minne när de öppnas. Det mesta data som laddas är för tillfället troligen oanvändbar eller onödig för dig. I motsats till kalkylblad laddar databaser bara data från datorns lagringsmedia när den behövs.

I de flesta fall behöver du inte bekymra dig om hur databasen lagrar sina data. Det betyder att i motsats till kalkylblad, bryr sig inte databaser om:

- Sekvensen av rader, eftersom du kan ordna rader efter dina behov. Dessutom kan du titta på samma data i många vyer med olika ordning.

- Samma sak gäller för kolumner (fält) i tabellen.

Tillsammans med Begränsad datavisning beskriven i föregående stycke, är utgör dessa kvaliteter fördelarana med databaser.

#### Datainmatning

De senaste utgåvorna av program för att skapa kalkylblad gör det möjligt för dig att skapa datainmatningsformulär. Sådana formulär är mest användbara om data inte kan visas bekvämt i en tabellvy, t.ex. om texten upptar för många rader eller om alla kolumner inte får plats på skärmen.

I det här fallet är själva sättet som kalkylblad fungerar problematiskt. Fält för datainmatning placeras fritt inne i kalkylbladet och är oftast inte säkrade mot användarens ingripande (avsiktligt eller av misstag).

#### Rapporter

Databaser möjliggör gruppering, begränsning och summering av data i form av en rapport. Kalkylblad skrivs ofta ut i form av små tabeller utan fullständig automatisk styrning av sidbrytningar och layout av fält.

#### Programmering

Program för att skapa databaser innehåller ofta fullständiga programmeringsspråk. Nyare kalkylblad har också den möjligheten, men dock består beräkningar i att ändra kalkylbladets fält och enkel datakopiering, oberoende av relevans och integritetsregler som nämnts i föregående stycken.

Databehandling i ett kalkylblad görs ofta via ett grafiskt användargränssnitt, som kan göra databehandlingens hastighet långsammare. Databaser har möjlighet att arbeta i bakgrunden, utanför grafiska gränssnitt.

#### Flera användare

Det är svårt att föreställa sig fleranvändning av ett kalkylblad. Även om det är tekniskt möjligt i fallet med de senaste programmen, kräver det mycket disciplin, uppmärksamhet och kunskap av användarna, och det kan inte alltid garanteras.

Ett klassiskt sätt att dela data som sparats i ett kalkylblad med andra är att skicka filen i sin helhet (oftast med e-post) eller tillhandahålla en fil med ett kalkylblad i ett datornätverk. Detta sätt att arbeta är ineffektivt för större grupper: data som kan behövas ett visst ögonblick kan för närvarande vara låst av någon annan.

Å andra sidan har databaser i huvudsak konstruerats med åtkomst av flera användare från början. Till och med i de allra enklaste versionerna är det möjligt att låsa på nivån av en viss tabellrad, vilket gör det möjligt att lätt dela data.

#### Säkerhet

Att säkra ett kalkylblad eller dess olika delar med ett lösenord är bara en symbolisk aktivitet. Efter en fil med kalkylbladet har tillhandahållits i ett datornätverk, kan var och en som kan kopiera filen försöka att knäcka lösenordet. Det är ibland inte så svårt eftersom lösenordet lagras i samma fil som kalkylbladet.

Funktioner för att låsa vid redigering eller kopiering av ett kalkylblad (eller en del av det) är lika enkla att knäcka.

Databaser (utom de som lagras i en fil istället för på en server) behöver inte vara tillgängliga i en enda fil. Du kommer åt dem via ett datornätverk, oftast genom att tillhandahålla ett användarnamn och lösenord. Du får bara åtkomst till de områden (tabeller, formulär och till och med utvalda rader och kolumner) som tilldelats dig genom att ställa in lämpliga åtkomsträttigheter.

Åtkomsträttigheter kan påverka möjlighet att redigera data, eller möjlighet att bara läsa data. Om viss data inte är tillgänglig för dig, skickas det inte ens till din dator, så det finns ingen möjlighet att göra en kopia av data på ett så enkelt sätt som i fallet med filer för kalkylblad.

## Databaskonstruktion

Databaskonstruktion kräver noggrann planering. Observera att omkonstruktion av tabellen Kontakter som föreslås i avsnittet ovan kan skapa problem när tabellen är fylld med data. Det är till exempel en enkel uppgift att byta namn på ett fält, men att dela fältet Adress i två särskilda fält kräver försiktigt och långtråkigt arbete.

För att undvika sådana situationer, tänk igenom databasprojektet innan du skapar det i datorn, och innan du och andra börjar använda det. På så sätt, genom att investera en viss tid i början, sparar du troligen tid vid daglig användning.

## Vem behöver en databas?

### Bli kvar vid kalkylblad om:

- Dina behov är begränsade och data aldrig växer till stora volymer (kan du verkligen förutsäga det nu?)

- Du kan inte inhämta metodiken för databaskonstruktion. Du kan dock fundera på att lägga ut aktiviteten hos någon annan, eller använda enklare verktyg.

- Du använder komplicerade kalkylblad och saknar tid eller pengar att byta till databaser. Tänk igenom eller fråga någon om detta inte är en återvändsgränd. Räkna inte med magiska verktyg som skulle kunna ändra ditt kalkylblad (oberoende av hur bra det är gjort) till en databas.

### Fundera på att använda databaser om:

- Din samling med data expanderar varje vecka.

- Du skapar ofta nya kalkylblad, kopierar mellan dem och märker att detta arbete blir mer och mer enformigt. I detta fall betalar sig ansträngningen att byta till databaser lätt.

- Du skapar rapporter och utdrag där tabellvyn i ett kalkylblad inte är lämpligt. Då kan du fundera på att byta till användning av en databas med formulärvyer.

## Programvara för att skapa databaser

Hittills har du lärt dig de allmänna särdragen hos databaser utan att ha gått in mycket på detaljer om specifika program för att skapa dem.

De första databaserna skapades tillsammans med stordatorer på 60-talet, t.ex. IBM System/360. Det var inte persondatorernas tid, och därför krävde databaserna mycket specialiserad personal. Även om de gamla datorernas hårdvara var otillförlitlig, de var gränslöst mycket långsammare och hade mindre lagringskapacitet, fanns funktion hos databaser som förblivit den mest attraktiva: dataåtkomst av många användare via nätverk.

Under 70-talet formulerade vetenskapen teorin om relationsdatabaser (begrepp som tabell, post, kolumn (fält) och relation och många fler). Baserat på teorin skapades databaserna IBM DB2 och Oracle, som har utvecklats och använts fram till idag. Under sent 70-tal konstruerades de första persondatorerna. Deras användare kunde (gradvis) börja utnyttja många typer av program, inklusive de för databaskonstruktion.

När det gäller stora databaser i företag, har inte situationen ändrats: de kräver fortfarande kraftfulla datorer eller datoranläggningar som kallas kluster. Det är dock utanför den här handbokens område.

Inom området "åtkomliga" databaser med grafiska användargränssnitt för persondatorer kan du välja bland följande:

- DBase: ett verktyg för databasanvändning för DOS populärt under 80-talet. Filer med DBase-format används fortfarande i vissa specifika fall på grund av sin enkelhet.

- FoxPro: ett program som liknar DBase (tidigt 90-tal). Efter det togs över av Microsoft, introducerades ett grafiskt användargränssnitt och det används därför för att skapa databaser på persondatorer. Produkten säljs fortfarande, även om den verkar något föråldrad.

- Microsoft Access: ett program för databaser (konstruktion av data och grafiskt gränssnitt) med många förenklingar, och därför lämpligt för nybörjare, konstruerat under tidigt 80-tal, baserat på en 16-bitars arkitektur. Produkten erbjuds och har bred användning fram till idag, särskilt av små företag, där effektivitet och krav på flera användare inte är särskilt krävande.

- FileMaker: populärt program som liknar MS Acess i enkelhet, som fungerar på Windows och MacIntosh plattformar, erbjudet sedan 1985.

- &kexi;: ett program för flera plattformar (Unix/Linux, Windows, MacOS X) konstruerat under 2003, utvecklat enligt principen med öppen källkod, del av det globala projektet K-skrivbordsmiljön, dvs. en grafisk miljö för system med Unix/Linux. En betydelsefull bidragsgivare till &kexi;s utveckling är företaget OpenOffice Poland.