Just nu i M3-nätverket
Gå till innehåll

Min första databas. Hjälp med kontrollera relationer


Plura

Rekommendera Poster

Hej,

 

Jag håller på att lära mig Access och tänkte försöka ge mig in på att skapa en databas.

Eftersom korekta relationer är A och O undrar jag om någon kan kontrollera den bifogade bilden för att se om jag är på rätt spår.

 

 

Jag ska försöka att förklara mitt tänk här:

 

tblBeställare inehåller diverse information om olika beställare (bör inte vara något konstigt förutom att jag nog ska bryta ut för och efternamn i Namn)

 

tblArbetsart Innehåller ett antal förutbestämda arbetsposter

 

tblDagbok: Denna ska ligga till grund för ett form där jag hämtar beställar info med hjälp av en vallista och sedan fyller i resten av posterna. Varje dagboksrecord (heter det så) eller "dagboksblad" ska även kunna inehålla de utförda mängder eller timmar från de olika posterna i tblArbetsart.

post-122401-0-86714700-1300716874_thumb.jpg

Länk till kommentar
Dela på andra webbplatser

Thomas Tydal

Det låter som du behöver en tabell för order också, typ tblOrder. I tblOrder lägger du BeställarID samt datum när ordern lagts. i tblDagbok kopplar du ihop OrderID med tblArbetsart.

 

Varje dagboksrecord innehåller alltså ett OrderID och en Arbetsart.

 

Exempel:

 

Kalle har BeställarID 1 och beställer 1201 och 3110. I tblOrder får han OrderID 1 (och där lagras hans BeställarID) och i tblDagbok blir det två poster; en med OrderID 1 och Arbetsart 1201 och en med OrderID 1 och Arbetsart 3110.

Länk till kommentar
Dela på andra webbplatser

Tusen tack för ditt svar.

 

Tyvärr lyckades jag inte med att utrycka min tankebana riktigt fullt ut i första posten utan jag ska försöka en gång till:

 

Tanken med databasen är att sammanställa "dagböckerna" från de olika arbetslagen här på jobbet. De olika arbetslagen har färdiga blanketter med vilken beställare det rör sig om (ex en kommun) och vilken typ av arbete det rör sig om (ex asfaltering) samt datum. På dessa blanketter eller "dagboksblad" finns även en ruta där de kan skriva in anteckningar (Kolumnen Utförda arbeten i tblUutförda arbeten) samt en lista med vilka resurser som använts för just det jobbet (kolumner i tblUtförda arbeten).

Varje beställare kan ha flera olika Objekt och varje Objekt kan pågå i flera dagar och kan därför inehålla flera olika dagböcker.

 

 

 

Det slog mig just nu att jag kanske krånglar till det lite extra. Kankse ska jag slå ihop tblDagbok och tblUtförda arbeten till en tabell istället. (Tabell3 i den nedre relationsbilden). Skulle det var OK att göra så rent "databas" mässigt?

post-122401-0-08006100-1300782977_thumb.jpg

post-122401-0-34948700-1300785671_thumb.jpg

Länk till kommentar
Dela på andra webbplatser

Thomas Tydal

Grunden är att du tänker igenom vilka saker du har och skapar en tabell för varje sak där varje sak får ett ID. Därefter skapar du en eller flera tabeller som kopplar ihop dessa, ungefär som en loggbok. Loggboken har inget eget ID utan består av olika sakers ID:n som eventuell ytterligare information.

 

De saker jag tycker det låter som att du har är:

 

Beställare, Objekt (det jag kallade order), typer av arbeten (det jag kallade arbetsart) och arbetslag.

 

En sak som du inte har däremot är dagbok. Såvida inte dagboksbladen numreras och du måste hålla reda på på vilket blad en viss sak stod, men du har ju "Objekt" att koppla det till och det räcker väl?

 

Låt oss nu titta på hur det hela kopplas ihop...

 

Vi skapar en loggbokstabell, som vi i och för sig kan kalla dagbok, men den har inget eget ID. I den tabellen ska du lägga in informationen från dagboksbladen, fast i form av ID:n från andra tabeller. Vi ska ha ett Objekt (och i Objekt-tabellen finns Beställaren) och så ska vi ha ID:n från UtfördaArbeten med resurserna samt eventuell övrig information som rör just det här arbetet (datum, kanske något fritextfält) och ID för arbetslaget.

 

Fördelen med att göra så här, att ha varje sak i en egen tabell och sedan koppla ihop deras ID:n är att du lätt kan bygga ut det i framtiden när behov uppstår. Säg till exempel att du senare behöver hålla reda på de anställda. Ja, då skapar du ju bara en ny tabell för anställda och sen kan du koppla dem till arbetslag (i och med att en sån tabell redan finns), eventuellt kanske med början- och slutdatum om folk byter arbetslag.

 

Eller skulle det vara så att någon Beställare byter namn eller adress så behöver du ju bara ändra det på ett ställe, i Beställartabellen, i stället för om du hade lagt beställaren direkt i Objekttabellen.

Länk till kommentar
Dela på andra webbplatser

Återigen tusen tack för din värdefulla input. (Du får hojta till om du har något "Buy me a beer" konto som jag kan donera till......)

 

Efter din första input gjorde jag en del ändringar i tabellerna som borde synas i bilderna i mitt andra inlägg.

 

Nu har jag ändrat ytterligare.

 

I den bifogade bilden syns det att jag lagt till tblArbetslag samt att jag slagit ihop tblDagbok och tblUtförda arbeten och kallar den du för tblDagbok. tblDagbok inehåller som synes nu OBjekt_ID som hämtas från tblObjekt, Utförare som hämtas från tblArbetslag, datum, en ett fritextfält för beskrivning av utförda arbeten samt de olika mängderna (ex antal traktortimmar, antal m3 grus osv)

 

Vad jag däremot har lite problem med är hur jag ska skapa Loggbokstabellen. Jag tror att jag är med på ditt tänk men jag antar att jag inte ska använda mig av "uppslagskolumn" när jag vill koppla ihop de olika ID fälten. tblLoggbokstabell ska väll aldrig matas in manuellt?

 

post-122401-0-96939500-1300796282_thumb.jpg

dagbok.zip

Länk till kommentar
Dela på andra webbplatser

Thomas Tydal

Den tabell du kallar tblDagbok skulle jag kalla tblArbetstyper. Objekt_ID, Datum, Utförda arbeten och Utförare skulle jag flytta till tblLoggbokstabell.

 

Loggbokstabellen är den som all inmatning ska ske i (dvs informationen från dagboksbladen). Du väljer Objekt (som då blir ett Objekt_ID från tblObjekt), Arbetslag (som blir ID från tblArbetslag) och en arbetstyp från tblArbetstyper (som du i skissen ovan kallar tblDagbok och även det blir ett ID). Slutligen anger du datum, utförda arbeten och kanske också någon kolumn för antal timmar och eventuell övrig information. Allt det ska in i loggbokstabellen, och det är ju den som blir själva historiken, alltså den innehåller allt som har hänt medan alla andra tabeller innehåller vilka saker som finns.

Länk till kommentar
Dela på andra webbplatser

Det är blev svårare än vad jag trodde. Jag ska gå hem och försöka läsa på lite mer.

 

En tanke som slog mig bara när jag försökte att skapa Loggbokstabellen var att om jag ska hämta arbetstyper från tblArbetstyp så måste jag väll strukturera om tblArbetstyper så att varje arbetstyp ligger radvis och inte som nu kolumnvis.

 

Men medför inte det en hel del skräpdata i Loggbokstabellen? Jag har försökt beskriva vad jag menar med den bifogade bilden.

Som jag förstått det så måste vare arbetstyp då bli en ny record (Tabell 1 i bilden) och all övrig information måste skrivas in (eller rättare sagt hämtas med hjälp av listruta). Ex om Arbetslag Grön använt 5st resurser på objektet Vägen 1 den 14/1 medför det 5 rader i tabell 1. Objekt_ID, Arbetslags_ID,Datum,Utförda arbeten och Datum är ju samma information.

 

I Tabell2 i samma bild skulle allt från samma dag läggas in som en record och jag behöver bara skriva in informationen en gång.

 

Edit: I bilden smög det in sig ett fel på sista raden för Vägen 1 aka det stå Justering under Utförda Arbeten. Dvs samma informationsom de anra posterna från samma dag.

post-122401-0-27858000-1300802099_thumb.jpg

Länk till kommentar
Dela på andra webbplatser

Thomas Tydal

Ja, tblArbetstyper måste vara radvis. Jag tänkte inte ens på att de var som kolumner på din bild, för det är så självklart för mig att det är rader...

 

Du har förstått rätt med Tabell 1 och Tabell 2. Det blir skräpdata i tabell 2 också, i och med att du inte har värden i alla rutor. Ett tomt värde tar lika mycket plats som ett riktigt värde.

 

Det du vinner på att lagra som i Tabell 1 är flexibilitet. Kommer det för alltid bara att finnas Traktor, Lastbil, Yrkesarbetare, Asfalt och Arbetsledning eller kommer det någon gång att tillkomma något? Att lägga till en kolumn i en tabell är ganska bökigt när du i framtiden har kopplat ihop flera tabeller och skapat formulär och rapporter. Då måste du ändra på en massa ställen.

 

Men har du i stället byggt upp det som Tabell 1 så lägger du ju bara till en rad i tblArbetstyper och då kommer det att fungera direkt överallt, eftersom alla delar av din databas hämtar arbetstyperna därifrån.

 

Det blir dessutom lättare att skapa rapporter/söka information. I Tabell 1 så är ju Arbetstyp en kolumn och du kan lätt välja vilka arbetstyper du vill söka efter. I Tabell 2 måste du i stället ange olika typer av villkor, exempelvis "Lastbil > 0" för att bara få raderna med lastbil.

 

Men oavsett hur du lägger upp tabellerna så kan du ju skapa ett inmatningsformulär som ser ut som Tabell 2 om det är enklare att mata in på det viset.

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...