---
# System prepended metadata

title: 'Labb 1: Databasdesign för ett Makerspace'
tags: [inlämningsuppgift]

---

# Labb 1: Databasdesign för ett Makerspace

I den här labben ska vi öva på att designa *bra* databaser som följer reglerna för normalisering. Uppgiften går ut på att designa och skapa en databas för ett [makerspace](https://sv.wikipedia.org/wiki/Makerr%C3%B6relsen#:~:text=till%20%22America%20Makes%22.-,Makerspace,-%5Bredigera%20%7C), dvs en verkstad med medlemmar och verktyg.

![img-20170330-133500_2](https://hackmd.io/_uploads/HyVTl60jlg.jpg)
## Krav
1. Systemet ska hålla reda på **medlemmar**.
   * För varje medlem ska man veta namn och en epostadress
2. Systemet ska hålla reda på **maskiner**.
   - För varje maskin ska namn, typ och status sparas (om den här igång, trasig eller under reparation).
   - En maskin kan kräva *högst en kurs* för att få användas (eller ingen alls).
3. Medlemmar ska kunna göra **bokningar** av maskiner.
   - En bokning kopplas till en viss medlem och en viss maskin.
   - Bokningen ska innehålla starttid och sluttid.
   - En bokning gäller alltid exakt **en medlem och en maskin**.
4. Makerspacet håller **kurser** som medlemmar kan delta i.
   - För varje kurs ska det finnas information om namn och beskrivning.
   - En kurs kan ges vid flera **kurstillfällen**
   - Det ska gå att registrera vilka medlemmar som deltagit i vilken kurs. 

### 1 - Identifiera entiteter och relationer

Läs igenom kraven och gör en lista på vilka entiteter och relationer som beskrivs i systemet, samt vilken typ av relation (ett-ett, ett-många, många-många).

### 2 - Skapa ett ER-diagram

Skapa ett ER-diagram för de entiteter och relationer du har identifierat. Diagrammet ska följa *Crows foot notation* och du kan göra det antingen för hand med penna och papper, eller i ett redigeringsprogram som draw.io

### 3 - Översätt diagrammet i kod

Skapa ett SQL-skript med namn `init.sql` som skapar upp alla tabeller med respektive kolumner.

### 4 - Importera data

Skapa ett *nytt* SQL-skript med namn `data.sql` som fyller tabellerna med data enligt dokumentet på classroom.

### 5 - Testa databasen

När vi nu har en databas med data vill vi testa att det går att hämta relevant data från den. Skapa ett ytterligare script *test.sql* där du skriver queries som hämtar datan som svarar på följande frågor.

1. Vilka är mailadresserna till alla medlemmar?
2. Vilka medlemmar har deltagit i kursen "Introduktion till 3D-printing"?
3. Vilka maskiner kräver ingen kurs?
4. Vad heter kurserna som Bob Berg har deltagit i?
5. Hur många bokningar har varje maskin totalt?

### 6 - Lämna in

Din inlämning ska bestå av:

* ER-diagram i form av en PNG-fil
* init.sql skript
* data.sql skript
* test.sql skript


