| database.sql | ||
| ER_diagram.png | ||
| LICENSE | ||
| README.md | ||
Overview
Detta projekt innehåller databasdesign och implementation för gruppledarens ansvarsområde (ca 20-25% av PUCKO systemet).
ER modell
Relations
Agent(Namn, Nummer, Förnamn, Efternamn, Lön, Kommentar)
Gruppledare(Namn, Nummer)
Fältagent(Namn, Nummer, Specialkompetens)
Hjälpmedel(Namn, Nummer, Beskrivning, FältagentNamn, FältagentNummer)
Region(Namn, Terräng)
Incident(Namn, Nummer, Plats, RegionNamn)
Operation(Kodnamntyp, Startdatum, IncidentNamn, IncidentNummer, Slutdatum, SR, Kommentar, GruppledareNamn, GruppledareNummer, RegionNamn)
FältagentOperation(AgentNamn, AgentNummer, Kodnamntyp, Startdatum, IncidentNamn, IncidentNummer)
OperationHjälpmedel(HjälpmedelNamn, HjälpmedelNummer, Kodnamntyp, Startdatum, IncidentNamn, IncidentNummer)
Favorithjälpmedel(AgentNamn, AgentNummer, HjälpmedelNamn, HjälpmedelNummer)
Kompetens(AgentNamn, AgentNummer, Kompetens)
Requirements
Agent
- Identifieras unikt av en sammansatt primärnyckel bestående av agentens namn (en bokstav) tillsammans med ett nummer (en siffra).
- Har attributen lön och kommentar, där kommentaren används för agentens levnadsfilosofi.
- Har ett sammansatt attribut för ursprungligt namn bestående av förnamn och efternamn samt ett härlett attribut för sammanslaget fullständigt namn.
- En agent kan vara gruppledare eller fältagent, men aldrig båda samtidigt.
Gruppledare
- Är subtyp till ‘Agent’ och ärver därför dess sammansatta primärnyckel och attribut.
- Har följande härledda attribut: antal operationer, hastighet, lyckade operationer och operationshastighet.
- Kan leda flera operationer, men får bara leda maximalt 2 operationer samtidigt om de gäller olika incidenter, eller maximalt fem operationer samtidigt om de gäller samma incident.
- Kan ändra slutdatum för en operation samt lägga till och ta bort hjälpmedel under pågående operation.
Fältagent
- Är subtyp till Agent och ärver därför dess sammansatta primärnyckel och alla attribut.
- Har ett multivärt attribut för kompetens.
- Har attributet specialkompetens för att lagra agentens viktigaste specialkompetens.
- Har två härledda attribut för betyg och antal operationer.
- Kan ha flera favorithjälpmedel, och samma favorithjälpmedel kan vara favorithjälpmedel för flera fältagenter.
- En fältagent kan delta i flera operationer och en operation kan ha flera fältagenter. Om fler än fem personer tilldelas en operation ska en varning visas.
- Kan delta i maximalt en pågående operation åt gången, om inte operationerna äger rum i samma region, då fältagenten kan delta i upp till tre samtidiga operationer.
Hjälpmedel
- Har en sammansatt primärnyckel bestående av namn och nummer.
- Har attributet beskrivning.
- Kan tilldelas flera operationer vid olika tidpunkter och en operation kan tilldelas flera hjälpmedel.
- Samma hjälpmedel får inte vara tilldelat flera olika operationer samtidigt.
- Om ett hjälpmedel går sönder eller försvinner under en operation har endast gruppledaren för operationen behörighet att ta bort hjälpmedlet ur databasen.
- Kan vara favorithjälpmedel för flera fältagenter.
Operation
- En operation är en svag entitet som identifieras av kodnamntyp, startdatum och den incident som genererade operationen.
- Kodnamntypen anger både operationens kodnamn och operationstyp.
- En operation kan ha en frivillig kommentar.
- En operation måste ledas av en gruppledare, medan en gruppledare kan leda flera operationer.
- Flera hjälpmedel kan allokeras till en operation.
- Fältagenter ska kunna tilldelas till en operation.
- För en avslutad operation lagras slutdatum och success rate.
- Slutdatum måste anges för att bokning av agenter och hjälpmedel ska kunna göras.
- Slutdatum måste vara senare än startdatum och operationen måste vara minst en dag lång.
- Om en operation anges vara längre än fem veckor ska längden automatiskt sättas till fem veckor.
- Success rate får endast vara 0 eller 1.
- Om slutdatum ändras ska reglerna för bland annat bokning av agenter, hjälpmedel och gruppledare kontrolleras igen. Om ändringen exempelvis orsakar en dubbelbokning ska ändringen avbrytas.
Incident
- Har en sammansatt primärnyckel bestående av namn och nummer.
- Har ett härlett attribut grad samt attributet plats.
- Äger rum i exakt en region, medan en region kan ha flera incidenter.
- Kan generera en eller flera operationer.
- Gruppledaren har inte behörighet att skapa eller registrera nya incidenter, men har rätt att skapa nya deloperationer kopplade till en tilldelad incident.
- Incidentens namn ska vara unikt.
Region
- Identifieras av ett namn.
- Har attributet terräng.
- Har härledda attributen antal operationer och incidenter.
- En region kan innehålla flera incidenter och operationer.
- Agenter stationerade i operationens region ges förtur i gruppledarens användargränssnitt vid tilldelning.
- Utgör den geografiska avgränsningen för undantagsregeln där fältagenter tillåts delta i upp till tre samtidiga operationer (förutsatt att alla äger rum inom samma region).
Tilldelad del av uppgiften
Jag har ansvarat för gruppledarens ansvarsområde (variant D) i PUCKO-systemet. Databasen modellerar bland annat agenter, gruppledare, fältagenter, incidenter, operationer och hjälpmedel som hör till detta ansvarsområde.
Konceptuell databasdesign
Den konceptuella databasdesignen beskriver de entiteter som behövs för gruppledarens del av PUCKO systemet. De entiteter som identifierades är Agent, Operation, Incident, Region och Hjälpmedel. Gruppledare och fältagent modellerades som arv till Agent och Operation modellerades som en svag entitet beroende av Incident för att identifieras unikt. Många-till-många relationer etablerades för agenters och hjälpmedels deltagande i operationer samt fältagenters favorithjälpmedel.
Logisk databasdesign
I den logiska databasdesignen omvandlades IE modellen till databasrelationer med primärnycklar och främmande nycklar. Sammansatta primärnycklar används där entiteter identifieras av flera attribut, och egna tabeller används för många-till-många relationer, exempelvis FältagentOperation och OperationHjälpmedel.
Fysisk databasdesign
Den fysiska databasdesignen implementerades i MySQL med tabeller, datatyper, primärnycklar, främmande nycklar och constraints. Denormalisering, inserts och indexering har också implementerats och testats. Index har skapats för sökning på agenters förnamn och sortering av operationers slutdatum. Rättigheter har implementerats för olika användarroller, där gruppledaren får rättigheter att läsa, registrera och uppdatera operationer, medan fältagenten bland annat får läsa information om hjälpmedel och registrera kopplingar till operationer. Denormalisering utfördes bland annat genom kodifiering, merge samt horisontell split av Hjälpmedel och HjälpmedelBeskrivning.
Procedurer och triggers
GetAverageSalary
Proceduren används för att beräkna och visa medellönen för alla agenter i databasen. På så sätt kan applikationen hämta denna sammanställning genom att anropa en fördefinierad procedur.
SetAgentSalary
Proceduren används för att ändra lönen för en specifik agent. Innan uppdateringen genomförs kontrolleras att den nya lönen är minst 20 000 kr, annars avbryts ändringen och ett felmeddelande visas.
AgentLogg och LoggAgent
Tabellen AgentLogg används för att lagra information om nya agenter. Triggern LoggAgent registrerar automatiskt den nya agentens uppgifter tillsammans med användare och tidpunkt när en agent läggs in i databasen.
CheckAgentSalary
Triggern kontrollerar automatiskt nya löneuppgifter innan en agent läggs in. Om lönen anges till ett belopp under 20 000 kr avbryts insättningen och databasen returnerar ett felmeddelande.
