Aug 222010
 

Flattr this!

Jag håller nu på och bearbeta en egen databas som jag länge har väntat med. Hittills har jag använt Calc till uppgiften men känner att nu går det inte längre. Det är jobbigt att sortera och göra sökningar och sorterar man på felaktigt sätt och inte får med alla inblandade kolumner så är databasen förstörd.

Min Calc-tabell är baserad på släktforskning och då ett bouppteckningsregister. Det handlar med annat ord om inventarier som den avlidna har lämnat efter sig. Detta görs för nästan alla döda människor i Sverige. Nu för tiden är det mer sällan det händer. Fördelen ur släktforskningssyfte är att man både får reda på när personen i fråga har dött och dessutom vem makan/maken samt barnen är och var dom bor. Har i nuläget 3600 poster som ska föras över till Base. Åren det gäller är från 1748 och framåt, främst i Öckerö socken som är en samling öar utanför Bohuslän. Calc-tabellen är ett register till bouppteckningar som är skrivna i Write. Samtliga är utskrivna på papper.

Nåväl, detta var lite om historien. Nu till kolumnerna jag använder i Calc:

Första kolumnen är Död och den tänkte jag utveckla så den innehåller månad och dag i framtiden. Dessutom vill jag ha källan till dödsdatumet. Detta kompletterar jag med i Base eftersom det inte finns någon data än så länge. Källan ska vara dödboken som finns i kyrkböckerna på samma sätt som bouppteckningarna. En av anledningarna till att jag väljer en annan källa än bouppteckningarna själv till dödsdatumet är att dom äldsta bouppteckningarna inte alltid har dödsdatumet skrivet eftersom dom inte var så noga på den tiden. Sen följs den av Förnamn, efternamn, plats vid dödsfallet (socken, ort, plats). Här är det tre platser som specificerar var den döda dog. Sen har vi kolumnen BoupptID där jag satt upp ordningen från nummer 1, 2, 3 osv. i den ordningen bouppteckningen kommer in i en pärm. Det blir alltså en unik siffra här och jag väljer då att sätta nyckel på BoupptID.

Sen kommer vi till de färglagda kolumnerna som innehåller källan, dvs. där man hittar originalet till bouppteckningen. Där har vi kolumnerna HR som står för häradsrätt, vilken bok bouppteckningen står i och bouppteckningsnumret. Man kan se att jag har grön och blå färg. Finns även lila färg. Anledningen är att en bouppteckning kan ha flera källor. När bouppteckningen gjordes en gång i tiden så glömde dom ibland att skriva upp något markområde eller så kan en släkting 100 år senare begära att bouppteckningen ska kompletteras för att arv ska gå rätt till. Det mesta jag har sett hittills är att en person kan ha bouppteckning plus två tillägg, alltså tre olika källor. Rent hypotetiskt kan det finnas obegränsat många källor och det är detta som är det stora problemet eftersom Calc inte klarar av en-till-många-relationer och därför är en databas ett måste.

Skissen jag gjort upp över hur databasen kommer att se ut är denna:

Det handlar alltså om sju tabeller där tblBouppt är huvudtabellen. Notera att jag satt tbl och fld framför alla tabeller och fältnamn. Bra om man använder en standard så det blir lätt att arbeta med databasen vid senare tillfälle. tbl står för table och fld för field. Ju mer komplex en databas, desto större anledning med att göra namnen så snygga möjligt för att slippa merarbete. Egentligen ska man ha engelska namn på alla tabeller och fältnamn för att slippa åäö men för att göra exemplet mer lättförståeligt så kör jag på svenska.

Om vi kollar på huvudtabellen så ser vi att fldSockenID, fldOrtID och fldPlatsID är kopplade till var sin tabell. Detta underlättar för vi får en en-till-många-relation där varje ort får ett nummer. Vi minimerar antalet skrivna tecken iom. att varje ort bara behöver skrivas in en gång, exempelvis kan Öckerö symbolisera 1 och vi får en siffra istället för sex bokstäver. Dessutom kan man har varit slarvig och stavat fel till något socken men genom att korrigera detta i tblSocken så ändras felskrivningen i hela databasen.

Öckerö används i c:a 99% av fallen och därför var en egen tabell som heter tblSocken oundviklig. tblOrt behövs också eftersom Öckerö socken domineras av Hönö, Öckerö (ö), Fotö osv. Dessutom återkommer platsnamnen också. Blir tre extra tabeller.

På vänster sida om huvudtabellen ser vi relationen en-till-många på samma sätt som jag demonstrerat här. Källtabellen (tblKälla) kopplas samman med bouppteckningstabellen (tblBouppt) via tblBoupptKälla. Alltså hamnar all viktig data i tabellen tblBoupptKälla där man kan ha flera källor till en och samma person.

I den sista tabellen som heter tblHR samlar vi alla häradsrätter. Här är också återupprepningar. I mitt fall handlar det om maximalt 10 olika härader till 3600 personer och därför lägger vi dessa i en egen tabell.

Detta exemplet kommer jag att realisera för egen del och dessutom kommer jag att blogga om samtliga saker jag gör. Problemet jag försöker ta itu med är fldBok som ingår i tblKälla. Detta fält innehåller data i stil med FII:1, FII:2 osv. När jag sorterar denna kolumn så blir det fel ordning eftersom det sorteras i bokstavsordning. Jag vill ha sortering efter siffrorna och är nära lösningen nu men det får bli i en senare blogg. 🙂

Maj 152010
 

Flattr this!

Nu har vi kommit till punkten då Base knäcker Calc när det gäller databaser.

Vår uppgift är fortfarande att jobba med en filmdatabas. Eftersom det kan bli lite störningar med att ha inknappade data i en tabell så väljer jag att göra en helt ny databas.

Vi vill ha ett till fält i databasen som heter Genre. Kan lika gärna vara skådespelare. Problemet är att en film kan ha flera genrer och en film brukar ha fler än en skådespelare. 😉

Skulle vi nu göra en tabell med fältnamnet Genre så går det bara att knappa in en genrer i varje ruta och därför fungerar det inte.

Så här går vi till väga:

Skapa dessa tabeller på samma sätt som vi gjorde här:

Tabell 1:

Tabell 2 (Här ska alla genrer såsom action, skräck m.m. skrivas in):

Glöm inte i tabell 1 och 2 att sätta autovärde till ja vid FilmID och GenreID.

Tabell 3 (denna tabell ska lagra kopplingen mellan filmer och dess genrer):

Notera i denna tabell att vi har två nycklar. Dessa nycklar är inte primära utan ”främmande” nycklar, dvs. dom är inte unika. FilmID ska exempelvis kunna ha samma nummer i flera poster.

För att skapa främmande nycklar, i detta fallet två fält så markera FilmID genom att trycka där nyckeln visas på bilden. Håll sen in ctrl-knappen på tangentbordet och markera sen där den andra nyckeln visas till vänster om GenreID. Nu när både FilmID och GenreID är markerade så högerklicka där nyckeln visas och välj ”Primärnyckel” så visas nycklarna på samma sätt som på bilden ovan.

Markera sen en av nycklarna och högerklicka så ser ni att ”primärnyckel” inte är ibockad, alltså är det ingen primär nyckel utan främmande nyckel.

Nu har vi dessa tabeller:

Nästa steg är att skapa kopplingar mellan dessa tabeller. Gå upp i menyn Verktyg och välj Relationer. Välj att lägga till samtliga tabeller. Dessa hamnar nu som små rutor där man kan flytta på dom hur man vill.

Vi ska nu fokusera oss på FilmGenre.

Markera FilmID i tabellen FilmGenre och dra den till FilmID i Filmtabellen.

Markera GenreID i tabellen FilmGenre och dra den till GenreID i Genretabellen och resultatet blir detta:

Här kan vi se att det står 1 på ena sidan av strecket och ”n” på andra, detta betyder ”en till många”-relation. Skulle vi istället dra från Filmtabellen till FilmGenre så blir resultatet ”en till en”-relation.

Exempel på hur detta fungerar.

Filmen Dödligt Vapen är en actionkomedi och så här kommer det att se ut:

Filmtabellen innehåller en film som heter Dödligt Vapen och som har FilmID 0.

Genretabellen innehåller Action som har GenreID 0 och Komedi som har GenreID 1.

FilmGenre kommer härmed att visa detta:

För att preparera inför del 2 av guiden så skriv in lite data i genre-tabellen.

Nu har vi gjort en relationsdatabas och i del 2 kommer jag att visa hur vi gör ett formulär så det blir smidigt att knappa in uppgifterna.

Skapa formulär till vår relationsdatabas (del 2 av 2)

Maj 022010
 

Flattr this!

OpenOffice Base är inte installerat från start i Ubuntu utan man går lätt in i Synaptic och installerar denna. Sök efter openoffice.org-base eller genom att skriva följande i en terminal:

sudo apt-get install openoffice.org-base

När programmet väl är installerat så ligger det under Program/Kontor.

Innan vi gör en tabell så kan det vara bra att veta hur en tabell fungerar. En tabell innehåller ”Fält” och ”Poster”. Denna skiss ger en bra bild över hur detta ser ut:

En post kan med annat ord vara en film, mailadress m.m. med medföljande attribut. En post går alltid horisontellt och ett fält går alltid vertikalt.

Vid uppstart av Base får man upp frågan om man vill öppna eller skapa en ny databas. Välj skapa en ny och tryck nästa. Vid nästa fråga så välj att databasen ska registreras, alltså bara tryck på Slutför och välj en plats att spara databasen på.

Denna bild kommer nu upp och det är här man jobbar ifrån.

Till vänster har vi Tabeller, Sökningar, Formulär och Rapporter. Med ”Sökningar” jobbar man med SQL-frågor mot databasen, ”Formulär” för att göra en fräckare design på inknappandet istället för att bara skriva in allting direkt i databasen. ”Rapporter” gör så man kan få utskrift av databasen i pappersform (Även här kan man designa hur man vill ha utskriften. Finns färdiga mallar att använda om man nu inte vill göra en egen snygg variant).

Det är den första som vi koncentrerar oss på i nuläget som heter Tabeller.

När tabeller är markerad så finns dessa alternativ att välja mellan:

Här tycker jag helt klart att ”skapa tabell i designvy” är enklast att jobba med. Guider i all ära men just i detta fallet är designvyn bäst.

Nu kommer det roliga att knappa in olika ”fältnamn”. Här gäller det att vara noggrann och tänka innan vad man vill ha med i databasen. Som exempel väljer jag att göra en databas som handlar om filmer.

Så här ser designvyn ut:

Rent spontant vill jag ha fältnamnen:

ID (måste finnas), Namn, Regissör, År, Beskrivning

ID talar om att posten är unik (i en databas får inte två poster se likadana ut och därför har man en räknare som räknar upp från 0,1,2 osv.) Så här ser det ut när fältnamnen är inknappade:

I vänstra kolumnen knappar man in fältnamnen (namn, beskrivning osv) och i den andra kolumnen (Fälttyp) väljs vad det är för typ av fält och här har vi en hel del att välja mellan. Som standard väljs ”Text [VarChar]” och då kan man skriva vad som helst när man väl knappar in data. Vill man begränsa detta så sätter man exempelvis datum eller tid om det handlar om dessa.

Det som är extra intressant här är att jag satt fältnamnet ID till Integer. Detta beror på att det är ett fält där jag inte vill att man ska kunna skriva i. Notera att jag satt Autovärde till ”Ja” för att uppräkning ska ske automatiskt och dessutom har en trevlig nyckel poppat upp till vänster om ID som tydligt visar att detta är en nyckel som gör varje post unik. En tabell i en databas får aldrig ha två poster som ser likadana ut, därför är detta viktigt. Personligen tycker jag det är snyggast att börja med att knappa in ID men det är inte nödvändigt eftersom man kan möblera om fälten hur man vill när man väl har gjort ett formulär.

När alla fältnamnen är inmatade så kan man stänga tabellen och får då upp frågan vad man vill spara tabellen som. Välj ett namn som är logiskt och är specifik för just denna tabell. Jag väljer ”Filmer”.

Nu kommer man till förstasidan igen med Tabeller, Sökningar osv. Där markeras Tabeller igen och som ni ser så har det tillkommit en tabell:

Dubbelklicka på denna tabell och testa sen att knappa in lite data. Notera nu att fältet ID inte går att skriva i utan det står auto. Det är bara att trycka tab för att komma till nästa fält i posten. Alla data sparas automatiskt så fort det knappas in.