Startup code for first assignment in Databaskonstruktion
Find a file
2026-09-16 12:02:49 +02:00
.DS_Store Lade till uppdaterat ER-diagram, första versionen, med 8 entiteter 2026-09-02 10:21:30 +02:00
database.sql Skapade Index på successrate (sr) för observation 2026-09-16 12:02:49 +02:00
ER_diagram.png Lade till avgränsade entiteter där dess krav kommer att specifieras 2026-09-02 13:37:47 +02:00
LICENSE Initial commit 2026-08-31 15:21:23 +00:00
README.md Påbörjat med Inserts för Denormalisering och tog bort ett felaktigt attribut från incident 2026-09-10 15:47:16 +02:00

Overview

Jag har fått variant E vilket är handläggare och har därefter valt att avgränsa systemet och fokusera på det som beskrivs vara viktigt för den varianten.

Applikationen innehåller funktioner såsom..

ER Modell

ER or EER Model

Relationer

Agent(Namn, NR,Lön, Unamn, Kommentar, ÄrHandläggare)

HandläggarObservation(Namn, Nr, ID)

Observation(ID, Säkerhet, Datum, Grad, AlienFärg, AlienKläder, AlienStorlek, AlienTyp, SkeppForm, SkeppFärg, SkeppLamptyp, SkeppRörelse, Typ, IncNamn, IncNr)

Incident(Namn, Nr,Plats)

Rapport(Datum,Titel,IncNamn, InrNr,AgtNamn, AgtNr)

Operation(Kodnmt,Stdatum,IncNamn, IncNr, Sldatum, SR, Kommentar)

Antaganden

För entiteten observation valde jag att använda alternativ D för att hantera arvet, dvs att skapa en enda stor tabell för att undvika joins mellan tre olika tabeller. Därav att uppnå prestanda kravet som nämndes i uppgiftsbeskrivningen för observation entiteten.

För att uppfylla kravet om att incident skall identifieras antingen av dess unika nummmer eller namn, så valdes nummer att användas, vilket innebar att tabellens primärnyckel ändrades till att vara nummret

Kommentarer

  • Leta efter det som kan bli dropdown för att avgöra kodifiering t.ex produktkategori
  • Leta efter det som kan vara textfält, filuppladning eller liknande såsom produktbeskrivning
  • CHECK(typ = 'Alien' OR typ = 'Skepp'),

Krav

Dessa är dem krav som samlades in från dokumentet och har därefter utvärderats för att sedan kunna implementeras in i databasmodellen.

Agent

  • Varje agent identifieras unikt med hjälp av dess namn (namnet är endast en bokstav exempelvis K), tillsammans med en siffra exempelvis J 2.
  • Vertikal split
  • Agentens levnadsfilosofi lagras som en kommentar för att kunna gå tillbaka och utvärdera hur pass bra agenten lever upp till sin levnadsfilosofi vid ett senare tillfälle.
  • Lägg till härlett attribut
  • Agentens lön och ursprungliga namn (inklusive separata förnamn och efternamn och ett härlett attribut som sätter samman förnamn och efternamn) skall dessutom lagras för alla agenter.

Constraint: check

  • Ingen agent får ha nummer som är mindre än noll. Talet 13 är av naturliga skäl inte tillåtet som agentnamn. Agentnummer över 99 är inte heller tillåtna.

-- Implementera check här?

  • Vissa personer får av olika orsaker inte bli agenter. Det gäller personer som heter Leif Loket Olsson, Greger Puckowitz och Greve Dracula.

  • De härledda värden som skall beräkna ett antal, exempelvis antalet genomgångna operationer för en viss agent, skall värdet “Inga operationer“ visas i applikationen.

Webapp med kod?

  • När en rapport skrivs så skall det vara möjligt att se sidantalet som rapporten har samt antalet ord rapporten täcker.

(Agent) -> Handläggare

  • handläggaren skall kunna sitta uppkopplad mot databas-systemet och direkt kunna mata in relevant informationen från telefonsamtalet
  • Webapp med kod?
  • För handläggaren skall det vara möjligt att beräkna antalet incidenter som handläggaren rapporterat samt antalet observationer som rapporterats
  • Webapp med kod?
  • Beräkna antalet operationer som startats beroende på incidenter rapporterade av handläggaren

  • Det är viktigt att handläggaren visas en komplett bild innehållande incidentens information

  • (Dubbelkolla) En handläggare har rättigheter att läsa och skapa tuppler i tabellerna med observationer, media, incidenter och personer enligt de regler som skapats för informationssystemet.

  • Implementera rättighetskravet men inte om specifikt agentklasserna
  • Eftersom handläggaren har i uppgift att tilldela desinformationsspridare och gruppledare till en viss incident så måste han ha rättigheter att läsa all information som finns tillgänglig om dessa båda typer av agenter (men inga andra).

Observation


-- Constraint ?

  • Det finns två olika typer av observationer. En observation kan antingen gälla rymdskepp eller rymdvarelser, om flera olika typer av rymdvarelser siktats eller om både rymdskepp och rymdvarelser siktats skall separata observationer skapas för denna incident

Constraint: check

  • För observationerna så skall en procentsats anges för observationens säkerhet, säkerheten får inte vara mindre än en procent och inte högre än hundrafjorton procent.

Constraint: check

  • Graden anger vilken grad av närkontakt som personen som gjort observationen hade med rymdvarelserna. Tillåtna värden är ett till fyra där fyra innebär extrem närkontakt.

Datatyp: decimal

  • Säkerheten talar om hur säker observationen är, uttryckt som en procentsats.

Kodifiering 2st, arv-hantering D

  • Eftersom åtkomsttider på under en sekund för alla frågor som ställs om denna data är nödvändiga för verksamheten är det mycket viktigt att alla möjliga optimeringsstrategier används för att optimera åtkomsthastigheten i dessa tabeller.

-- 2ST kodifiering använt för krav

  • Prestanda är av högsta vikt när det gäller åtkomst av observationer av rymdvarelser eller rymdskepp och av datan om rymdvarelserna och rymdskeppen.

Constraint: not null

  • För varje observation måste observationens datum,grad samt säkerhet anges

Löst med FK

  • Observationen måste även tillhöra någon incident som inträffat.

--> If-sats, eller räcker M:M tabellen?

  • Varje observation måste ha lagrats av någon handläggare

--> webapp med kod

  • När en ny observation kommer till handläggarens kännedom som saknar en motsvarande incident skall en ny incident direkt skapas.

  • Om flera observationer hör till samma incident skall inte någon ny incident skapas utan de skall kopplas direkt till incidenten. Handläggaren får sedan fatta ett beslut om en ny observation skall tilldelas för incidenten.

(Observation) -> Alien

  • För en observation av en rymdvarelse anges rymdvarelsens färg, kläder, typ och storlek.

  • Typen anger vilken typ av varelse som rymdvarelsen tillhör, exempelvis humanoid.

  • Storleken anger den uppskattade storleken på rymdvarelsen uttryckt i meter.

  • Kläder anger ett par ord om klädedräktens utseende endast generellt omdömme om kläderna skall anges.

(Observation) -> Skepp

  • För en observation av ett rymdskepp anges formen på rymdskeppet, typen av lampor rymdskeppet hade, rymdskeppets färg samt en uppskattning av rymdskeppets rörelse

Incident

  • En incidient kan identifieras antingen av dess unika namn eller dess unika nummer.

  • För incidenten lagras dessutom platsen som den inträffade på.

  • En incident kan dessutom ha en eller flera operationer eller desinformationskampanjer kopplade till sig.


-- Härlett?

  • Dessutom skall det gå att beräkna ett medelvärde på incidentens alla observationers grad.

Operation

  • Varje operation identifieras av dess kodnamntyp samt operationens startdatum tillsammans med incidenten som genererade operationen. Kodnamntypen anger både operationens kodnamn samt dess typ, exempelvis uppstädningsoperation: Gregers Bodega
  • Vertikal split - pga frivilligt textfält
  • Operationen har även en frivillig kommentar som bör fyllas i där agenterna specificerar viktiga detaljer om operationen som är utöver den information som lagras i operationens förbestämda fält.

Check: constraint

  • De attibut som anges som “success rate” skall lagras i form av ett heltal som är ett om operationen eller kampanjen lyckades och noll om operationen eller kampanjen misslyckades Inga andra värden är tillåtna.

NOT NULL

  • För att bokning av olika agenter och hjälpmedel skall fungera så är det nödvändigt att operationens slutdatum anges, slutdatumet kan senare ändras för att passa det verkliga slutdatumet.
  • Det är tillåtet för två olika operationer för samma incident på olika datum att ha samma kodnamn och typ

  • För kampanjer och operationer så måste alltid slutdatumet för operationen eller kampanjen vara senare än startdatumet.

-- Lägga till check constraint här?

  • En operation eller en kampanj får inte vara kortare än en dag.

  • Om skillnaden mellan en operations eller kampanjs startdatum och slutdatum är större än fem veckor så antas slutdatumet vara felinmatat, längden till operationen skall då automatiskt sättas till fem veckor.

Rapport

Constraint not null:

  • På alla typer av rapporter så måste värden för alla attributen lagras.
  • En vanlig rapport eller slutrapport som den också kallas lämnas in av någon agent efter varje incident som inträffat (eller efter att incidentens operation slutförts).

  • Slutligen skall det finnas två härledda attribut, ett som anger rapportens radantal, och ett som anger rapportens antal uppföljningar.

  • Det skall vara möjligt att ta bort (hemligstämpla) hela rapporter inklusive alla rapportens rader och uppföljningar. Borttagningen skall loggas så det är möjligt att återskapa rapporten i sin helhet när hemligstämpeln släppts.

  • När en rapport tas bort skall automatiskt alla associerade rapportrader och uppföljningar tas bort.

  • Slutligen skall det vara möjligt att hemligstämpla vissa rader i en rapport, rapportraden ersätts då med texten “hemligstämplat”. När hemligstämpeln släppts skall det vara möjligt att återställa rapporten till sitt tidigare utseende.