# 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