BeeBase

Programmable relational database
with graphical user interface Support This Project
This page is also available in Deutsch English Français

Dokumentation

Dokumentationen nedan ingår i BeeBase-distributionen och finns även tillgänglig i PDF.


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

5. Grundläggande Koncept

Innan du börjar sätta upp dina egna databasprojekt och mata in data för dem bör du känna till vissa grundläggande koncept som BeeBase bygger på.


5.1 Projekt

Ett BeeBase-projekt består av all relevant information du behöver för att hantera din data. Detta inkluderar projektets användargränssnitt, den data du har matat in i projektet och programmen du har skrivit för projektet.

Ett projekt kan laddas från, sparas till och raderas från disken. Alla ändringar du gör i ett projekt görs endast i minnet. Du kan när som helst återgå till tillståndet för det senast sparade projektet genom att ladda om det.

BeeBase kan hantera flera projekt samtidigt. Därför är det inte nödvändigt att starta BeeBase två gånger bara för att ladda ett annat projekt.

Dessutom kan flera instanser av BeeBase komma åt samma projekt. Flera instanser kan läsa projektet, men endast en får göra ändringar. Detta bör också fungera över olika datorer i ett nätverk när projektet är placerat på en monterad nätverksenhet.


5.2 Tabeller

BeeBase hanterar data i tabeller. En tabell är organiserad i rader och kolumner, där rader kallas poster och kolumner kallas fält.

Se följande tabell för ett exempel på hur man kan strukturera en uppsättning adresser i en tabell.

 

    Namn              | Gata                | Stad
    ------------------|---------------------|------------------------
    Steffen Gutmann   | Wiesentalstr. 30    | 73312 Geislingen/Eybach
    Charles Saltzman  | University of Iowa  | Iowa City 52242
    Nicola Müller     | 21W. 59th Street    | Westmont, Illinois 60559

Det finns en speciell tabelltyp som kan innehålla exakt en post. En tabell av denna typ är ibland användbar för att kontrollera databasprojektet, t.ex. kan du placera knappar i denna tabell för att utföra olika åtgärder, eller ett skrivskyddat fält för att visa projektrelaterad information.

Anta till exempel att du har en kontodatabas där du lagrar alla dina inkomster och utgifter. En exakt-en-tabell kan nu ha ett skrivskyddat fält av typ reellt tal för att visa det totala saldot.

Varje tabell har två postpekare, en pekare till den post som för närvarande visas i användargränssnittet (kallad GUI-postpekare) och en pekare till den post som är den aktuella under körning av ett BeeBase-program (kallad programpostpekare).

Du kan definiera valfritt antal tabeller för ett BeeBase-projekt. Tabeller kan läggas till, döpas om och raderas från ett projekt.


5.3 Poster

En post är en rad i en tabell. Den innehåller all information om en uppsättning, t.ex. i en tabell som hanterar adresser, en post innehåller en adress.

Varje post har ett postnummer som återspeglar postens position i tabellen. Detta nummer kan ändras när du lägger till eller tar bort poster.

För varje tabell finns en post som kallas initial post som innehåller standardvärdena för initialisering av nya poster. Den initiala posten har alltid postnummer 0.

Poster kan läggas till, ändras och tas bort från en tabell. Posterna hålls inte nödvändigtvis i minnet utan laddas från och lagras på disk vid behov. Det finns två begränsningar för det totala antalet poster i en tabell. Postnumret är ett 32-bitars heltalsvärde, vilket (teoretiskt) begränsar det totala antalet poster till 4294967295. En annan (och mer allvarlig) begränsning är att för varje post hålls en liten posthuvud i minnet. Dessa begränsningar gör fortfarande BeeBase användbart för postantal på 10 000 och fler.


5.4 Fält

Ett fält definierar en kolumn i en tabell. Det specificerar typen och utseendet för motsvarande kolumn.

Fält kan läggas till, döpas om och tas bort från en tabell. Det finns ingen övre gräns för antalet fält per tabell.

För varje fält måste du ange en typ som begränsar innehållet i detta fält. Se nästa avsnitt för en lista över tillgängliga fälttyper.


5.5 Fälttyper

För fält finns följande typer tillgängliga:

Vissa av fälttyperna stöder ett speciellt värde som kallas NIL. Detta speciella värde har betydelsen av ett odefinierat värde, t.ex. för en typ av datum betyder det ett okänt datum. NIL-värdet liknar NULL-värdet i andra databassystem.

Observera att när du väl har ställt in typen för ett fält, kan du inte ändra den senare.


5.5.1 Strängfält

Strängfält kan lagra vilken enradig text som helst (0 till 999 tecken). Strängar är den mest använda fälttypen i ett databasprojekt. Till exempel, en adressdatabas kan lagra namn, gata och stad för en person i varsitt strängfält.

För ett strängfält måste du ange det maximala antalet tecken som tillåts i strängen. Detta antal påverkar inte direkt mängden minne eller diskutrymme som används av detta fält eftersom endast det faktiska stränginnehållet lagras (andra databaser har kallat denna funktion komprimerade strängar). Om nödvändigt kan antalet ändras efter att du har installerat ett strängfält.

Strängfält kan också användas för att lagra typsnitt- och filnamn. För filnamn kan externa visningsprogram startas för att visa filinnehållet. Dessutom finns en inline-bildklass som tillåter visning av bilden av en fil.

Strängfält stöder inte NIL-värdet.


5.5.2 Heltalsfält

Heltalsfält lagrar heltalsvärden i intervallet -2147483648 till 2147483647. De används mest för att lagra kvantiteter av alla slag, t.ex. antalet barn hos en person, eller antalet låttitlar på en CD.

Heltalsfält stöder NIL-värdet som representerar ett odefinierat heltalsvärde.


5.5.3 Reella Talsfält

Reella talsfält lagrar flyttalsvärden i intervallet -3.59e308 till +3.59e308. De används för att lagra tal av alla slag, t.ex. summan pengar i ett inkomst-/utgiftsprojekt.

För varje reellt talsfält kan du ange antalet decimaler som används för att visa det reella värdet, även om internt sparas alltid full precision.

Reella talsfält stöder NIL-värdet som representerar ett odefinierat reellt värde.


5.5.4 Booleska Fält

Booleska fält lagrar en bit information. De används för att lagra ja/nej eller sant/falskt värden, t.ex. i ett projekt som hanterar fakturor kan ett boolesk fält lagra informationen `har betalat?'.

Booleska fält använder TRUE och NIL som booleska värden. NIL i detta fall står för ett värde av FALSE.


5.5.5 Valfält

Valfält lagrar ett objekt från en uppräkning av objekt. Till exempel, i ett adressprojekt kan ett valfält användas för att lagra ett landsnamn, där landet är ett av `USA', `Kanada', `Tyskland', eller `andra'.

Ett valfält lagrar inte själva objektsträngen utan objektnumret (index) i en post. Antalet objekt och objekten själva kan modifieras efter att fältet har skapats. När ändringar görs i ett valfält kommer dock värden i befintliga poster inte att ändras för att återspegla den nya märkningen.

Valfält stöder inte NIL-värdet.


5.5.6 Datumfält

Datumfält lagrar kalenderdatum. Till exempel kan ett datumfält användas för att lagra födelsedagar.

Formatet för att mata in och visa datumvärden kan vara ett av `DD.MM.ÅÅÅÅ', `MM/DD/ÅÅÅÅ', eller `ÅÅÅÅ-MM-DD', där `DD', `MM' och `ÅÅÅÅ' står för två och fyrsiffriga värden som representerar dag, månad och år för datumet respektive.

Datumfält stöder NIL-värdet som representerar ett odefinierat datum.


5.5.7 Tidfält

Tidfält lagrar tiden på dagen eller en tidsperiod. Till exempel kan ett tidfält användas för att lagra längden på musiktitlar på en CD.

Formatet för att mata in och visa tidsvärden kan vara ett av `HH:MM:SS', `MM:SS' eller `HH:MM', där `HH' representerar timmar, `MM' minuter, och `SS' sekunder. Internt lagras tidsvärden som antalet sekunder sedan kl. 00:00. Tidsvärden större än 23:59:59 upp till maxvärdet 596523:14:07 är möjliga men negativa värden stöds inte.

Tidfält stöder NIL-värdet som representerar en odefinierad tid.


5.5.8 Memofält

Memofält lagrar flerradig text av valfri storlek. Textstorlek hanteras dynamiskt vilket innebär att minne allokeras endast för den faktiska textstorleken. I ett projekt som hanterar filmer kan till exempel ett memofält användas för att lagra sammanfattningar av filmerna.

Memofält stöder inte NIL-värdet.


5.5.9 Referensfält

Referensfält är en speciell typ av fält, som normalt inte finns i andra databassystem. Referensfält lagrar en pekare till en annan post. Den refererade posten kan finnas i samma eller i vilken annan tabell som referensfältet tillhör.

Till exempel i ett släktträdsprojekt kan två referensfält användas för att lagra pekare till far- och morposten. Eller i ett projekt som hanterar CD-skivor och musikspår kan ett referensfält i tabellen som innehåller musikspåren användas för att peka till posterna för motsvarande CD-skivor.

För att visa ett referensfält kan alla fält i den refererade posten specificeras. Inmatning i ett referensfält kan göras genom att välja en post från en lista av poster.

Referensfält stöder NIL-värdet. Här står ett värde av NIL för en pekare till den initiala posten i den refererade tabellen.


5.5.10 Virtuella Fält

Virtuella fält lagrar ingen information i själva databasen, utan beräknar dem i realtid när de behövs.

Till exempel, i ett projekt som hanterar fakturor där ett reellt fält innehåller summan pengar exklusive moms, kan ett virtuellt fält användas för att "lagra" summan pengar med moms. Varje gång värdet av det virtuella fältet behövs, t.ex. för att visa det, beräknas det från motsvarande värde utan moms.

För att visa virtuella fält finns det fyra typer: Boolesk, text, memo och lista. Dessa typer gör det möjligt att visa det virtuella fältets värde som ett SANT/FALSKT-värde, som en enradig text inklusive siffror, datum och tider, som flerradig text eller som en lista med flera enradiga poster, till exempel för att lista alla musiktitlar på en CD.

Virtuella fält stöder värdet NIL, vilket står för FALSKT (boolesk typ), odefinierat (text och memo typ), eller tomt (listtyp).


5.5.11 Knappar

Egentligen är knappar inte en riktig fälttyp eftersom de inte kan lagra eller visa någon information. Knappar används bara för att utlösa BeeBase-program.


5.6 Tabell över Fälttyper

Följande tabell sammanfattar alla tillgängliga fälttyper:

 

Typ        Beskrivning                        Nil tillåtet?

Sträng      För strängar (0 till 999 tecken).      Nej
            En sträng kan också användas för att lagra
            filnamn, typsnittnamn eller en-sträng-
            av-n-strängar. För filnamn kan du
            lägga till ett fält där innehållet
            i filen visas som en bild.

Heltal      För lagring av heltalsvärden           Ja
            (-2147483648 till 2147483647).

Reellt tal  För flyttal                            Ja
            (-3.59e308 till +3.59e308).

Boolesk     TRUE eller NIL.                        Ja (NIL = FALSE)

Val         Ett tal av n tal. Tal                 Nej
            representeras av etikettssträngar.

Datum       För lagring av datumvärden             Ja
            (1.1.0000 - 31.12.9999).

Tid         För lagring av tidsvärden              Ja
            (00:00:00 - 596523:14:07)

Memo        Flerradig text av obegränsad längd.    Nej

Referens    För lagring av en referens till en post Ja (NIL betyder
            i en annan tabell.                     initial post)

Virtuell    För visning av resultat från ett BeeBase Ja
            program.

Knapp       För att utlösa en programfunktion       Nej (ej tillämpligt)


5.7 Relationer

Hittills vet du hur man organiserar din information i tabeller med poster och fält. Men du kanske också vill skapa relationer mellan tabeller.

Om du till exempel vill samla CD-skivor i ett databasprojekt skulle du ha två tabeller, en för själva CD-skivorna och en för musikspåren på CD-skivorna. Naturligtvis kan du också ha alla musikspår inom CD-tabellen men då skulle du ha ett fast antal musikspår för varje CD.

Så med dessa två tabeller behöver du nu en länk för varje musikspår till den CD som innehåller detta spår. Detta kallas en relation mellan de två tabellerna. I BeeBase använder du ett referensfält för att skapa en sådan relation.

Genom att installera ett referensfält i en tabell har du automatiskt en relation mellan den tabell där fältet finns och den tabell det refererar till.

Följande klasser av relationer kan särskiljas:


5.7.1 En-till-en-Relationer

En-till-en-relationer är mycket enkla relationer där för varje post har du en eller noll partners i en annan eller i samma tabell.

Till exempel i ett databasprojekt som hanterar dina favoritskådespelare kan du skapa ett referensfält kallat `gift med' som visar personen som skådespelaren är gift med. En skådespelare som för närvarande inte är gift har ett NIL-värde för detta referensfält.

Naturligtvis hindrar inget användaren från att ställa in `gift med'- referenser för flera skådespelare alla till samma person. Genom att programmera BeeBase är det dock möjligt att upptäcka sådana fall och hantera det därefter.


5.7.2 En-till-många-Relationer

En-till-många-relationer är användbara för att koppla en uppsättning poster till en post i en annan eller samma tabell.

Till exempel i ett projekt som hanterar dina bankkonton kan du ha en tabell för alla bankkonton och en tabell för alla transaktioner. Nu vill du säkert veta vilken transaktion som tillhör vilket konto så du sätter upp ett referensfält i transaktionstabellen som refererar till kontotabellen.

En-till-många-relationer är de mest använda. Du kan använda dem för att hantera alla hierarkiska strukturer, t.ex. CD-skivor med musikspår, bankkonton med transaktioner, släktträd, etc.

En-till-många-relationer är också grunden för att realisera många-till-många-relationer som beskrivs i nästa avsnitt.


5.7.3 Många-till-många-Relationer

Många-till-många-relationer används när du vill att en uppsättning poster ska referera till en annan uppsättning poster.

Till exempel i ett projekt som hanterar filmer och skådespelare skulle du ha två tabeller, en för filmerna och en för skådespelarna. Nu vill du för varje film veta vilka skådespelare som medverkade i filmen. Så du kanske tänker skapa ett referensfält i skådespelartabellen som refererar till filmtabellen. Men när du gör detta kan du bara ha en film refererad för varje skådespelare eftersom det bara finns ett referensfält i skådespelartabellen. Så vad du behöver är ett obegränsat antal referenser från skådespelartabellen till filmtabellen.

Detta görs genom att lägga till en ny tabell som bara har två referensfält, ett som pekar på skådespelartabellen och det andra på filmtabellen. Nu kan du ange relationerna genom att lägga till nya poster i denna tabell. För varje film-skådespelare-konstellation lägger du till en ny post och specificerar filmen och skådespelaren genom att ställa in motsvarande referensfält.

Om du vill veta i vilka filmer en skådespelare medverkade behöver du bara söka efter alla poster i den nya tabellen som refererar till skådespelaren i fråga och titta på filmposterna som de hittade posterna refererar till. En sådan sökning kan göras automatiskt av BeeBase och resultatet kan visas i en listvy.

Följande tabeller visar ett exempel på hur man kopplar en uppsättning skådespelare till en uppsättning filmer.

 

      Titel           Land
      ----------------------------
m1:   Batman          USA
m2:   Batman Returns  USA
m3:   Speechless      USA
m4:   Tequila Sunrise USA
m5:   Mad Max         Australien
m6:   Braveheart      USA

 

      Namn
      -------------------
a1:   Michael Keaton
a2:   Jack Nicholson
a3:   Kim Basinger
a4:   Danny DeVito
a5:   Michelle Pfeiffer
a6:   Geena Davis
a7:   Christopher Reeve
a8:   Mel Gibson
a9:   Kurt Russell
a10:  Sophie Marceau
a11:  Patrick McGoohan
a12:  Catherine McCormack
a13:  Christopher Walken

 

      Filmref   Skådespelarref
      ------------------
      m1        a1
      m1        a2
      m1        a3
      m2        a1
      m2        a4
      m2        a5
      m2        a13
      m3        a1
      m3        a6
      m3        a7
      m4        a8
      m4        a5
      m4        a9
      m5        a8
      m6        a8
      m6        a10
      m6        a11

Från dessa tabeller kan du till exempel se att Mel Gibson medverkade i filmerna Tequila Sunrise, Mad Max och Braveheart, eller att i filmen Batman medverkade skådespelarna Michael Keaton, Jack Nicholson och Kim Basinger.


5.8 Användargränssnitt

BeeBase använder ett grafiskt användargränssnitt (GUI) organiserat på ett hierarkiskt sätt för att visa postinnehåll och för att mata in data. Varje projekt har sitt eget huvudfönster där ytterligare GUI-element (inklusive delfönster) kan placeras. GUI-elementen kallas också visningsobjekt.

En tabell visas i ett eget GUI-element som kallas mask. En mask kan bara visa en post i taget. Dess layout och de fält som ingår i masken kan anpassas av användaren.

Följande GUI-element finns tillgängliga för att utforma ett projekts GUI-layout:


5.8.1 Fönster

Fönster kan användas för att sprida information om ett projekt över flera oberoende områden.

Varje projekt har automatiskt sitt eget huvudfönster. Om det behövs, t.ex. om utrymmet i huvudfönstret överskrids, kan ytterligare delfönster skapas. Delfönster kan också ha ytterligare delfönster.

För varje delfönster kan en fönsterknapp placeras i föräldrafönstret för att öppna delfönstret. Fönsterknappen ser ut som en vanlig textknapp men kan visa en liten ikon för att skilja sig från andra knappar.

Huvudfönster har inget föräldrafönster och har därför ingen fönsterknapp. Att stänga ett huvudfönster innebär att stänga hela projektet.

Ett fönster kan ha andra GUI-element som barn. Om inga barn har lagts till i ett fönster visas en standardbild.


5.8.2 Masker

En mask används för att visa innehållet i en tabell. Endast en post i tabellen kan visas åt gången.

Masken kan inkludera en panel (se nästa avsnitt) för att styra tabellen. Andra GUI-element som fält- eller textobjekt kan placeras i en mask för att visa postinnehållet.

Masker kan inte placeras i andra masker eftersom detta skulle leda till en hierarki av masker och därmed en hierarki av tabeller. För att skapa en hierarki av tabeller, använd en 1:n-relation mellan de två tabellerna.


5.8.3 Paneler

En panel är ett litet och brett rektangulärt område placerat överst på en mask. En panel kan visa en titel, t.ex. namnet på motsvarande tabell, ett par siffror som visar postnumret för den aktuella posten och det totala antalet poster, och flera knappar för att styra tabellen, t.ex. för att visa nästa eller föregående post.

En panel är en del av tabellmasken men kan döljas om så önskas. Om du sätter upp en panel för en mask ritas en extra ram runt masken.


5.8.4 Fältobjekt

Fältobjekt används för att visa innehållet i ett objekt i en post.

Beroende på typen av fältet är GUI-elementet antingen ett strängfält (typerna sträng, heltal, reellt tal, datum och tid), en kryssknapp (typ boolesk), en cykelknapp eller en uppsättning radioknappar (typ val), ett redigeringsfält (typ memo), en popup-listvy (typ referens), ett text-, kryss- eller listvyfält (typ virtuell) eller en text- eller bildknapp (typ knapp). I vissa fall kan GUI-elementet också vara ett enkelt textfält om fältobjektet är inställt på skrivskyddat.


5.8.5 Textobjekt

Textobjekt används för att beskriva de olika fältelementen i en postmask eller bara för att visa statisk text.


5.8.6 Bilder

Bilder kan visas var som helst i ett fönster. En bild kan vara ett mönster, ett enkelt färgfält, eller en bild i en extern fil. Bildstorleken kan vara storleksanpassningsbar eller fast.

Bilden är statisk. För att lagra bilder i en tabell använder du ett strängfält (se String type).


5.8.7 Utrymmeobjekt

Utrymmeobjekt används för att infoga utrymme i layouten av ett fönster eller en tabellmask. Ett utrymmeobjekt kan ha en vertikal (eller horisontell) stapel för att avgränsa andra GUI-element.


5.8.8 Grupper

GUI-element kan grupperas i horisontella eller vertikala grupper. En grupp placerar sina barn från vänster till höger (horisontell grupp) eller uppifrån och ner (vertikal grupp).

En grupp kan omge sina barnobjekt med en rektangulär ram, kan visa en valfri titel överst i gruppen, och kan infoga utrymme mellan sina barnobjekt.


5.8.9 Balansobjekt

Balansobjekt kan placeras mellan andra barnobjekt i ett fönster, en mask eller ett gruppobjekt. Ett balansobjekt låter användaren styra viktvärden för andra barnobjekt och därmed hur mycket utrymme varje barn får.


5.8.10 Registergrupper

En registergrupp kan användas för att layouta GUI-element i flera sidor där endast en sida är synlig åt gången. Detta är användbart om användargränssnittet blir för stort och du inte vill sprida det över flera fönster.


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated on September, 6 2025 using texi2html