Uppgiften i denna labb var att skapa en databas för den fiktiva yrkeshögskolan YrkesCo utifrån en kravspecifikation som underlag. Målet var att ersätta deras nuvarande manuella hantering i Excel med en robust, centraliserad och skalbar SQL-databas.
För mer information om labben:
Labb_beskrivning (PDF)
Presentation:
Labb_presentation (PDF)
Först gjorde jag själva datamodelleringen i form av ett ERD (Entity Relationship Diagram). Detta innebar att jag analyserade kravspecifikationen för att identifiera verksamhetens viktigaste byggstenar (entiteter) och hur de hänger ihop (relationer), vilket resulterade i en konceptuell modell.
Därefter utvecklade jag den logiska modellen. Här definierade jag specifika attribut för varje tabell samt datatyper för att säkerställa att strukturen uppfyller kraven för 3NF (Tredje normalformen). Slutligen översatte jag den logiska designen till en fysisk modell i dbdiagram, vilket lade grunden för den faktiska SQL-implementeringen.
- 1NF – Databasen uppfyller 1NF genom att eliminera flervärdesattribut och upprepade grupper. Varje entitet har en tydlig definierad primärnyckel (PK) och samtliga attribut en enhetlig datatyp
- 2NF – Databasen uppfyller 2NF genom att inga andra attribut förekommer i tabellen ProgramInnehåll som har två primärnycklar, en så kallad sammansatt nyckel
- 3NF – Databasen uppfyller 3NF genom att alla "non-prime" attribut är direkt och uteslutande beroende av primärnyckeln
Efter modelleringen översatte jag min design till SQL-kod och körde den i en PostgreSQL-container via Docker. För att hantera konfigurationen skapade jag en docker-compose.yml-fil och en .env-fil för säker hantering av miljövariabler. För att skapa en ny container och köra i Docker:
- Kolla om någon container är igång/"helthcheck":
docker ps- Starta containern (skapa image, volym och nätverk):
docker compose up -d- Anslut direkt till PostgreSQL i containern:
docker exec -it yrkco psql -U yrkesco -d yrkco_db- Lägg till tabeller (tables):
\i sql/ddl_create_table.sql- Lägg till ädringar (ALTER table):
\i sql/ddl_alter_table.sql- Lägg till data (VALUES):
\i sql/dml_insert_data.sql- Stänga ned containern & volym:
docker compose down -vFör att säkerställa att databasen uppfyller kraven har jag genomfört följande tester:
- Constraints: Verifierat att felaktig data (t.ex. ogiltiga betyg eller felaktiga e-postformat) stoppas vid inmatning.
- Logisk integritet (XOR): Testat hybridmodellen för utbildare genom att försöka registrera en person som både konsult och anställd samtidigt. Systemet blockerar detta för att förhindra administrativa dubbletter
- Analys: Skapat JOIN-frågor som hämtar ut meningsfull data, exempelvis procentandelen studenter med LIA-plats per anläggning.
ERD
Setup's & Docker-compose
3NF
Struktur
Övrigt
- Jag har även haft stor nytta av anteckningar från lektioner och tidgare arbeten med Regular Expression och SQL-queries.
- Jag har använt LLM för att generera fejk data (VALUES) och som stöd/bollplank i vissa moment där jag inte lyckats hitta svaret (eller problemet) på egen hand.


