Startup code for first assignment in Databaskonstruktion
Find a file
2026-10-17 12:55:07 +02:00
.DS_Store Uppdaterade IE modellen, den var fel förut 2026-09-02 09:17:31 +02:00
database.sql Kommenterade ut test kodrader 2026-09-22 08:29:07 +02:00
ER_diagram.PNG Steg 1 och 2 klart 2026-09-01 14:38:33 +02:00
LICENSE Initial commit 2026-08-31 15:21:23 +00:00
README.md Uppdaterade README med dokumentation 2026-10-17 12:55:07 +02:00

Databaskonstruktion-Assignment-1-Startup

Tilldelad del

Jag tikllhör grupp D och har arbetat med gruppledarens del av systemet. Jag har valt att ta med ageneter, gruppledare, operationer, regioner, incidenter, observationer och rapporter.

https://wwwlab.webug.se/databaskonstruktion/a25gusny/ER_diagram.png

Konceptuell databasdesign

Jag utgick från Gruppeldare och de entiteter som behövs för att beskriva Gruppledarens Operationer. En Gruppledare är en Agent och kan leda flera Operationer. Operationerna hör till Incidenter, som även kan ha Observationer och rapporter. Region beskriver det geografiska sammanhanget för Incidenter och Operationer.

Logisk databasdesign

Entiteterna överfördes till relationer med primärnycklar och främande nycklar. Agent identifieras av kombinationen Namn och Nr. Gruppledaren blev en separat relation med samma nyckel, som också refererar till Agent. Det innebär att en Gruppledare måste finnas som Agent. Kopplingarna mellan relationerna representeras med främmande nycklar. Exempelvis refererar Observation till Incident, och Operation refererar till både Incident och Gruppledare. De logiska relationerna ovan visar utgångsläget före den fysiska databasdesignen.

Fysisk databasdesign

Region slogs samman med Incident och Operations genom att regionnamn och terräng lagras direkt i dessa tabeller. Det minskar behovet av joins när informaitonen ska visas, men innebär att regionuppgifter kan upprepas på flera ställen. Operationstyp kodifierades genom en separat tabell med en typkod och ett typnamn. OPerationerna refererar till typkoden. Operationerna delades också horisontellt i Operations och AvslutadeOperations. Kommentarerna flyttades till separata tabeller genom en vertikal uppdelning. Jag skapade index på observationernas datum och de avslutade operationernas slutdatum för att stödja sökning och sortering på dessa kolumner. Databasanvändaren Gruppledare fick rättigheter att läsa och lägga till operationer samt ändra kolumnen Sldatum. Rättigheten att ta bort operationer tilldelades och togs sedan bort med REVOKE.

Procedure och Triggers

  • GruppledareStatistik Proceduren stödjer kravet att kunna visa en gruppledares antal genomflrda och lyckade operationer samt andelen lyckade operationer. Den tar emot gruppledarens namn och nummer och beräknar statistiken från AvslutadeOperations.

  • PagaendeOperationer Proceduren används för att hämta operationer för en viss gruppledare från Operations, som är avsedd för pågående operationer efter uppdelningen. Gruppledarens namn och nummer skickas in som parametrar.

  • BegransaOperationsLangd Triggern stödjer kravet att en operation inte ska vara längre än fem veckor. När en rad läggs till i AvslutadeOperations justeras slutdatumet om det ligger mer än fem veckor efter startdatumet.

  • UppdateraIncidentGrad Triggern stödjer kravet att kunna visa medelvärdet av observationernas grad för en Incident. När en observation läggs till beräknas incidentens medelgrad på nytt och lagras i IncidentGrad. Det är en materialisering eftersom det beräknade värdet sparas i en tabell.

Logiska databasen

Agent(Namn, Nr, Lön, Unamn, Kommentar)

Gruppledare(Namn, Nr)

Region(Namn, Terräng)

Incident(Namn, Nr, Plats, RegionNamn)

Observation(ID, Säkerhet, Datum, Grad, IncidentNamn, IncidentNr)

Operations(Kodnmt, Stdatum, IncidentNamn, IncidentNr, Sldatum, SR, Kommentar, RegionNamn, GruppledareNamn, GruppledareNr)

Rapport(Datum, Titel, IncidentNamn, IncidentNr)

Kravspecifikation

Agent

  • Varje agent identifieras unikt av:
    • Agentnamn (en bokstav).
    • Agentnummer.
  • Agentens ursprungliga namn ska lagras med separat förnamn och efternamn.
  • Agentens fullständiga namn ska kunna härledas från för- och efternamn.
  • Agentens levnadsfilosofi ska lagras som en kommentar.
  • Agentens lön ska lagras.
  • Agentens nummer ska:
    • Vara mellan 0 och 99.
    • Inte vara negativt.
    • Inte vara 13.
    • Inte vara 0, om agenten inte är gruppledare.
  • Följande personer får inte registreras som agenter:
    • Leif Loket Olsson.
    • Greger Puckowitz.
    • Greve Dracula.
  • Löneregler:
    • Minimilön: 12 000.
    • Standardlön om ingen lön anges: 13 000.
    • Maximilön för vanliga agenter: 25 000.
    • Maximilön för gruppledare: 35 000.
  • Härledda värden som saknar underliggande data ska visas som ”Inga operationer”.

Gruppledare

  • En gruppledare kan leda flera operationer.
  • En operation får endast ha en gruppledare.
  • En gruppledare får samtidigt leda:
    • Högst två operationer om de tillhör olika incidenter.
    • Högst fem operationer om de tillhör samma incident.
  • För gruppledaren ska följande kunna visas:
    • Antal genomförda operationer.
    • Antal lyckade operationer.
    • Andel lyckade operationer.
  • Operationer ska kunna sorteras efter slutdatum.
  • Pågående operationer ska kunna visas.
  • För pågående operationer ska gruppledaren kunna:
    • Ändra slutdatum.
  • När en gruppledare tilldelas en ny operation ska detta meddelas automatiskt.
  • Gruppledaren ska kunna skapa nya operationer för sina tilldelade incidenter.

Observation

  • Varje observation måste tillhöra en incident som inträffat.
  • Följande ska lagras för varje observation:
    • Datum.
    • Säkerhet i procent.
    • Grad av närkontakt.
  • Säkerheten ska vara mellan 1 och 114 procent.
  • Graden av närkontakt ska vara mellan 1 och 4, där 4 innebär extrem närkontakt.
  • Frågor mot denna data ska eftersträva en svarstid under en sekund.

Incident

  • Varje incident identifieras unikt av:
    • Incidentnamn, eller
    • Incidentnummer.
  • Incidentens plats ska lagras.
  • Varje incident måste tillhöra en region.
  • Medelvärdet av incidentens observationers grad ska kunna härledas.
  • En incident kan ha en eller flera operationer.

Region

  • Varje region identifieras unikt av sitt namn.
  • Regionens huvudterräng ska lagras.
  • Regionens antal tidigare incidenter ska kunna härledas.
  • Regionens antal tidigare operationer ska kunna härledas.
  • En region med namnet ”hemligstämplat” ska skapas om den inte redan existerar.
  • Påverkade incidenter och operationer ska kopplas till regionen ”hemligstämplat” när den specifika regionen inte kan anges.
  • Alla regioner måste ha en terräng.
  • Om terräng inte anges ska värdet automatiskt sättas till ”blandad”.

Operation

  • Varje operation identifieras av:
    • Kodnamn.
    • Operationstyp.
    • Startdatum.
    • Incidenten som genererade operationen.
  • Två operationer för samma incident får ha samma kodnamn och operationstyp om de har olika startdatum.
  • En operation måste ha en gruppledare.
  • En gruppledare kan leda flera operationer.
  • Operationen kan innehålla en frivillig kommentar.
  • Startdatum och slutdatum ska lagras.
  • För avslutade operationer ska följande lagras:
    • Slutdatum.
    • Success rate.
  • Success rate ska endast kunna ha värdet:
    • 1 = lyckad.
    • 0 = misslyckad.
  • Inga andra värden är tillåtna.
  • Slutdatum måste vara senare än startdatum.
  • En operation måste vara minst en dag lång.
  • Om operationens längd överstiger fem veckor ska slutdatumet automatiskt sättas till fem veckor efter startdatum.
  • Endast gruppledaren får ändra operationens längd.

Rapport

  • En incident kan ha rapporter.
  • En rapport identifieras av datum och titel.
  • Det finns två typer av rapporter:
    • Slutrapporter.
    • Uppföljningsrapporter.
  • Uppföljningsrapporten ska kopplas till den tidigare rapporten.
  • Två år efter en misslyckad operation kan en uppföljning genomföras.
  • Följande härledda attribut ska kunna visas:
    • Antal uppföljningar.
    • Rapportens radantal.