| database.sql | ||
| ERdiagram.png | ||
| LICENSE | ||
| README.md | ||
Databaskonstruktion
äverksit
Jag har valt att jobba med en del av databasen som handlar om incidenter, operationer, fältagenter, rapporter, hjälpmedel och regioner.
Jag valde den delen eftersom tabellerna hänger ihop med varandra och passar den del av systemet jag har arbetat med sedan förra året.
ER-diagram
Region
En region identifieras med sitt namn.
För regionen sparas också vilken typ av terräng den har.
En incident måste höra till en region.
Incident
En incident har ett unikt nummer, namn och plats.
Incidenten är kopplad till en region och kan ha operationer och observationer kopplade till sig.
Observation
En observation hör till en incident.
Graden för en observation får bara vara mellan 1 och 4.
Faltagent
För en fältagent sparas namn, specialitet och kompetens.
En fältagent kan vara gruppledare för en operation och kan även vara författare till rapporter.
Operation
En operation hör till en incident och har en gruppledare.
För operationen sparas kodnamn, startdatum, slutdatum och om operationen lyckades eller inte.
Slutdatum måste vara senare än startdatum.
Framgång får bara vara 0 eller 1.
Hmedel
För ett hjälpmedel sparas namn, nummer och en kort beskrivning.
Numret får bara vara mellan 1 och 15.
Samma hjälpmedel ska inte kunna vara tilldelat flera operationer samtidigt.
Rapport
En rapport hör till en operation och har en författare.
För rapporten sparas bland annat typ, titel, kommentarer, utfall och datum.
Utfall får bara vara 0 eller 1.
Konceptuell databasdesign
Jag började från ER-diagrammet och valde den del av systemet som jag skulle jobba med.
De viktigaste delarna för mig blev Region, incident, Observation, Faltagent, Operation, Hmedel och Rapport.
Diagrammet visar hur dessa delar hör ihop innan de görs om till riktiga tabeller i databasen.
Till exempel hör en incident till en region och en operation hör till en incident.
Logisk databasdesign
Efter ER-diagrammet gjorde jag om entiteterna till relationer.
De relationer jag jobbar med är ungefär:
- Region(Namn, Terrang)
- incident(incidentnr, Namn, Plats, Regionnamn)
- Observation(ObsID, incidentNr, Grad)
- Faltagent(FaltID, Namn, Specialitet, Kompetens)
- Operation(OperationID, incidentNr, KodnamnTyp, Startdatum, Slutdatum, Framgang, GruppledarID)
- Hmedel(HmedelID, Namn, Nr, Beskrivn)
- OperationHmedel(OperationID, HmedelID)
- Rapport(RapportID, OperationID, ForfattareID, Typ, Titel, KortKommentar, LangKommentar, Utfall, Skapad)
Jag använder främmande nycklar för att koppla ihop relationerna.
Till exempel använder Operation incidentNr för att veta vilken incident operationen hör till.
Rapport använder OperationID för att veta vilken operation rapporten gäller och ForfattareID för att veta vilken agent som har skrivit rapporten.
OperationHmedel kopplar ihop operationer med hjälpmedel.
Fysisk databasdesign
Den fysiska databasen finns i database.sql.
jag använder olika datatyper beroende på vad som ska sparas.
Till exempel använder jag:
- INT för nummer och id
- VARCHAR för text
- DATE för datum
- TINYINT för värden som bara behöver små heltal
- DATETIME för datum och tid i loggen
Jag använder också primary key, foreign key, unique, not null och check för att försöka stoppa felaktig data.
Jag har två egna index på fältagentens namn och specialitet eftersom det är information som kan användas vid sökning.
Jag har också gjort olika typer av denormalisering.
Operation_Hmedel_Merged samlar information från operation och hjälpmedel.
Rapport_Faltagent_Merged samlar information från rapport och fältagent.
OperationStatus används för kodifiering av om en operation lyckades eller
misslyckades.
OperationDetalj är en vertikal uppdelning där vissa kolumner från Operation
läggs i en annan tabell.
OperationAktiv och OperationAvslutad delar upp operationer beroende på
slutdatum.
Procedures och triggers
TaBortHmedel
Den här proceduren används för att ta bort ett hjälpmedel.
Den tar först bort kopplingen i OperationHmedel och sedan själva hjälpmedlet. Det behövs eftersom hjälpmedlet annars fortfarande kan vara kopplat till en operation.
GetRapporterForeDatum
Den här proceduren tar emot ett datum.
sedan hämtar den rapporter som skapades före det datumet.
Jag använder en parameter så att man kan använda proceduren med olika datum.
DeleteRapporterForeDatum
Den här proceduren tar också emot ett datum.
Den tar bort rapporter som är äldre än datumet.
Det finns också en kontroll som stoppar proceduren om man skickar in ett datum som ligger i framtiden.
op_hmedel_before_ins
Den här triggern körs innan man lägger till ett hjälpmedel i OperationHmedel.
Den kontrollerar om samma hjälpmedel redan används av en annan operation.
Om det redan används så stoppas insättningen och ett felmeddelande visas.
op_hmedel_after_ins
Den här triggern körs efter att ett hjälpmedel har lagts till på en operation.
Den sparar information i en logg om vilket hjälpmedel och vilken operation det gäller, vilken användare som gjorde det och vilken tid det hände.
Den uppdaterar också hur många hjälpmedel operationen har.
