| .DS_Store | ||
| Data.sql | ||
| database.sql | ||
| ER_diagram.png | ||
| LICENSE | ||
| README.md | ||
Databasimplementation – Desinformationsspridare
Overview
Den här databasimplementationen fokuserar på den del av PUCKO-systemet som används av desinformationsspridare.
De centrala delarna är hantering av desinformationskampanjer, regioner och de incidenter som kampanjerna gäller. Desinformationsspridaren behöver även kunna läsa information om observationer.
Följande centrala entiteter har valts ut:
Agent Desinfo Kampanj Region Incident Observation
Se ER_diagram.png för den utvalda delen av den konceptuella modellen.
Antaganden
-
Endast den funktionalitet som är relevant för desinformationsspridaren implementeras i prototypen.
-
Person, Rapport, Media och Undanflykt finns i det fullständiga systemet men ingår inte i denna avgränsning.
-
Härledda värden lagras inte direkt i de ursprungliga tabellerna utan beräknas med SQL, funktioner eller procedurer.
-
Observationer skall enligt kravspecifikationen registreras av en handläggare. Handläggare ingår inte i denna avgränsning, därför implementeras inte denna koppling i prototypen.
-
En observation kan enligt kravspecifikationen gälla en rymdvarelse eller ett rymdskepp. Dessa entiteter ingår inte i denna avgränsning, därför implementeras inte de typspecifika observationsuppgifterna.
-
Specialiteter och terräng kodifieras för att undvika att samma textvärden lagras upprepade gånger.
-
Kampanjer delas horisontellt så att pågående kampanjer lagras i Kampanj och avslutade kampanjer lagras i Kampanj_Avslutad. KampanjNr används för att ge båda tabellerna en gemensam identifiering som andra tabeller kan referera till.
-
Agent delas vertikalt i Agent_Grund och Agent_Detalj. Agent_Grund innehåller grundläggande information om agenten medan Agent_Detalj innehåller ursprungligt namn och kommentar.
-
Incident och Region slås samman i den denormaliserade tabellen Incident_Region för att information om incident och dess region skall kunna hämtas tillsammans.
Agent
Krav
- Det finns fem olika typer av agenter.
- En agent identifieras unikt av sitt namn tillsammans med sitt nummer.
- Agentens lön skall lagras.
- Agentens ursprungliga namn skall lagras.
- Agentens levnadsfilosofi skall lagras som en kommentar.
- Om ingen lön anges skall lönen automatiskt sättas till 13000.
- Ingen agent får tjäna mindre än 12000.
- En agent som inte är gruppledare får inte tjäna mer än 25000.
- Agentnummer får inte vara mindre än 0.
- Agentnummer får inte vara större än 99.
- Nummer 13 är inte tillåtet.
- Agentinformation delas vertikalt i Agent_Grund och Agent_Detalj.
Desinfo
Krav
- En desinformationsspridare är en typ av agent.
- Desinformationsspridarens specialitet skall lagras genom en kod.
- Specialitetens namn lagras i SpecialitetKod.
- Det skall gå att beräkna hur många kampanjer desinformationsspridaren har genomfört.
- Det skall gå att beräkna procentandelen lyckade kampanjer.
- En desinformationsspridare får inte arbeta på fler än fem desinformationskampanjer samtidigt.
- En desinformationsspridare kan tilldelas arbete för en specifik incident.
- Kopplingen mellan desinformationsspridare och kampanj lagras i Desinfo_Kampanj.
Incident
Krav
- En incident kan identifieras med sitt unika namn eller sitt unika nummer.
- Platsen där incidenten inträffade skall lagras.
- Det skall gå att beräkna medelvärdet av graden för incidentens observationer.
- En incident måste inträffa i en region.
- En incident kan ha flera desinformationskampanjer.
- Incident- och regioninformation finns även i den denormaliserade tabellen Incident_Region.
Observation
Krav
- En observation måste ha ett datum.
- Observationens grad måste anges.
- Observationens säkerhet måste anges.
- Grad får ha värdet 1 till 4.
- Säkerheten får vara mellan 1 och 114 procent.
- En observation måste tillhöra en incident.
- En observation skall enligt det fullständiga systemet registreras av en handläggare.
Kampanj
Krav
- En kampanj identifieras unikt av sitt nummer.
- Kampanjnummer lagras i KampanjNr och används som gemensam identifierare för pågående och avslutade kampanjer.
- En kampanj kan vara kopplad till flera incidenter.
- En incident kan vara kopplad till flera kampanjer.
- Kampanjens startdatum skall lagras.
- Kampanjens slutdatum skall lagras.
- En pågående kampanj får ha NULL som slutdatum.
- Pågående kampanjer lagras i Kampanj.
- Avslutade kampanjer lagras i Kampanj_Avslutad.
- Kampanjens success rate skall lagras.
- Success rate får endast vara 0 eller 1.
- Kampanjens kommentar får vara högst 80 tecken.
- Slutdatum måste ligga efter startdatum.
- En kampanj får inte vara kortare än en dag.
- Om kampanjens längd överstiger fem veckor skall slutdatum automatiskt begränsas till fem veckor.
- Åtkomsten till kampanjer skall vara snabb.
Region
Krav
- En region identifieras unikt av sitt namn.
- Regionens huvudterräng skall lagras genom en terrängkod.
- Terrängens namn lagras i TerrangKod.
- Det skall gå att beräkna hur många tidigare incidenter som har inträffat i regionen.
- Det skall gå att beräkna hur många operationer som har genomförts i regionen.
- Alla regioner måste ha en terrängkod.
Relationer
Agent(Namn, Nr, Lön, Unamn, Kommentar)
Agent_Grund(Namn, Nr, Lön)
Agent_Detalj(Namn, Nr, Unamn, Kommentar)
SpecialitetKod(Kod, Specialitet)
Desinfo(Namn, Nr, SpecialitetKod)
TerrangKod(Kod, Terräng)
Region(Namn, TerrangKod)
Incident(Inr, Namn, Plats, RegionNamn)
Observation(ID, Säkerhet, Datum, Grad, IncidentNr)
KampanjNr(Nr)
Kampanj(Nr, SR, Startdatum, Slutdatum, Kommentar)
Kampanj_Avslutad(Nr, SR, Startdatum, Slutdatum, Kommentar)
Desinfo_Incident(AgentNamn, AgentNr, IncidentNr)
Desinfo_Kampanj(AgentNamn, AgentNr, KampanjNr)
Kampanj_Incident(KampanjNr, IncidentNr)
Incident_Region(Inr, IncidentNamn, Plats, RegionNamn, Terräng)
Underlag till muntlig redovisning
Tilldelad del
Gruppen har tilldelats Grupp B – Desinformationsspridare. Databasimplementationen fokuserar därför på den information och funktionalitet som en desinformationsspridare behöver för att arbeta med kampanjer, incidenter, regioner och observationer.
Konceptuell Databasdesign
Den konceptuella databasdesignen avgränsades till de delar av PUCKO-systemet som är relevanta för desinformationsspridaren. De centrala entiteterna som valdes var Agent, Desinfo, Kampanj, Region, Incident och Observation.
Desinfo modellerades som en typ av Agent. Incident kopplades till Region och Observation, medan Kampanj och Incident har en många-till-många-relation. Desinfo kan även kopplas till både incidenter och kampanjer. Delar av det fullständiga systemet som Person, Rapport, Media och Undanflykt ingår inte i avgränsningen.
Logisk Databasdesign
Den konceptuella modellen omvandlades till relationer där varje entitet representeras av en tabell. Många-till-många-relationerna implementerades med kopplingstabellerna Kampanj_Incident, Desinfo_Incident och Desinfo_Kampanj.
Primärnycklar används för att identifiera poster och främmande nycklar används för att säkerställa relationerna mellan tabellerna. Specialitet och terräng representeras med kodtabellerna SpecialitetKod och TerrangKod.
Fysisk Databasdesign
Den fysiska databasdesignen implementerades i MySQL med InnoDB. Datatyper, constraints, indexering, rättigheter, denormalisering, procedurer och triggers används för att implementera kraven.
Denormalisering används bland annat genom vertikal uppdelning av Agent, horisontell uppdelning av Kampanj samt sammanslagningen Incident_Region. Specialitet och terräng kodifieras med numeriska koder. Index har skapats för Incident.Plats och Observation.Datum för att effektivisera sökningar på dessa attribut.
Rättigheter begränsar vilka operationer användaren desinfo får utföra. Procedurer används för beräkningar av härledda värden och en trigger används för att kontrollera begränsningen på maximalt fem samtidiga kampanjer.
Procedurer och triggers
GETAVGGRAD
Kravspecifikationen anger att det skall gå att beräkna medelvärdet av graden för observationerna som tillhör en incident. GETAVGGRAD tar emot ett incidentnummer och beräknar medelvärdet från de observationer som är kopplade till incidenten.
Värdet behöver därför inte lagras direkt i Incident utan kan beräknas när det efterfrågas.
GETANTALKAMPANJER
För en desinformationsspridare skall det gå att beräkna hur många kampanjer som har genomförts. GETANTALKAMPANJER tar emot agentens namn och nummer och räknar de avslutade kampanjer som agenten är kopplad till.
Beräkningen använder Desinfo_Kampanj tillsammans med Kampanj_Avslutad så att endast genomförda kampanjer räknas.
GETLYCKADEKAMPANJER
Kravspecifikationen anger att det skall gå att beräkna procentandelen lyckade kampanjer för en desinformationsspridare. GETLYCKADEKAMPANJER använder genomförda kampanjer och deras success rate för att beräkna denna procentandel.
Eftersom success rate representeras av 0 eller 1 kan medelvärdet multipliceras med 100 för att få procentandelen lyckade kampanjer.
MAXFEMKAMPANJER
En desinformationsspridare får enligt kraven inte arbeta med fler än fem desinformationskampanjer samtidigt. MAXFEMKAMPANJER kontrollerar därför antalet aktiva kampanjer när en ny koppling läggs till mellan en desinformationsspridare och en kampanj.
Om desinformationsspridaren redan arbetar med fem aktiva kampanjer stoppas den nya kopplingen. På så sätt upprätthålls begränsningen direkt i databasen.