732G16 Databaser: design och programmering
Projekt, del B - Implementera databasen och fylla med data
Motivering & Syfte
När man har skapat en relationsmodell som är normaliserad, och som kan hantera den data man har tänkt arbeta på är det dags att skapa den fysiska datamodellen och implementera tabellerna i en databas.
När tabellerna är skapade kan man sedan fylla på databasen med data. Ofta behöver man då också konvertera data till datatyper som är lämpliga för databasen och ibland också rensa inkomplett eller på annat sätt felaktig eller felformaterad data. I vissa fall kan detta göras från externa program där man kan kontrollera utdata, men t.ex. webbenkät-system kan leverera ganska konstig data. I detta fall så har ni fått alla data i en fil, så ni behöver importera datat från denna fil in i era tabeller.
Förberedelser
Hämta datafil
Varje grupp har sin egen datafil i csv-format. Den innehåller
slumpad data och är individuell för gruppen. Det går alltså inte att
jämföra delberäkningar (eller slutresultat) med andra grupper, för
de ska vara olika. Datafilen innehåller rader som kan se ut så här:
Statistik och dataanalys;LIU50007;4172579030;Laurée Egli;18.33;Statistisk analys av samhällsdata;HSTA21;10.5;1;G
Datafälten är alla godtyckligt långa, men separerade med semikolon. Filen innehåller inga semikolon utom de som används som separatorer, däremot kan andra konstiga tecken förekomma som har specialbetydelse för MySQL. Ett exempel är namn som innehåller accenter/apostrofer. Notera också att decimaltal representeras med decimalpunkt i filen.
Fälten är, i ordning:
- Programmets namn
- Programmets kod
- Studentens personnummer (notera att det är fejkade 10-siffriga tal, inte riktiga personnummer)
- Studentens namn
- Studentens medelbetyg från gymnasiet
- Kursens namn
- Kurskod
- Kursens poäng
- Om kursen är obligatorisk för programmet (1 för ja, 0 för nej)
- Studentens betyg på kursen
Data för grupperna:
- Datafil grupp 1
- Datafil grupp 2
- Datafil grupp 3
- Datafil grupp 4
- Datafil grupp 5
- Datafil grupp 6
- Datafil grupp 7
- Datafil grupp 8
- Datafil grupp 9
- Datafil grupp 10
- Datafil grupp 11
- Datafil grupp 12
- Datafil grupp 13
- Datafil grupp 14
- Datafil grupp 15
- Datafil grupp 16
- Datafil grupp 17
- Datafil grupp 18
- Datafil grupp 19
- Datafil grupp 20
Genomförande
Skapa databasen
Skapa först en fysisk datamodell genom att bestämma vilka datatyper ni behöver för att kunna representera den data ni ska lagra. Undersök datat i filen ni laddat ner, t.ex med R. Datatypen behöver ha kapacitet att representera hela datafältets innehåll för alla data i filen. Notera att t.ex. olika typer av heltal bara kan representera värden upp till vissa gränser (ni kan se hur stora värden ni kan representera med olika typer av heltal här).
Skapa en ny fil kallad CreateTablesGRUPPNR.sql där ni byter GRUPPNR mot ert gruppnummer i Webreg. Skriv i denna fil de SQL kommandon som behövs för att skapa de tabeller ni fick godkända i del A, med lämpliga datatyper. Glöm inte bort referensintegriteten och eventuella andra integritetsvillkor, samt att ange InnoDB för att integriteten skall upprätthållas.
Kör sedan SQL-kommandona i filen så att databasen skapas, använd kommandot source
. Kom ihåg att sökvägen
varierar beroende på var du lagt filen:
PC-pul | SU-pul/ThinLinc |
---|---|
|
|
Tips:Det är praktiskt att även skriva SQL kod som tar bort alla tabeller man skapat längst upp i sin CreateTablesNR.sql fil. Detta för att man enkelt ska kunna göra ändringar i SQL koden som skapar tabellerna och starta om från början så att allt blir rätt. Tänk då på i vilken ordning tabellerna måste tas bort för att inte referensintegriteten ska ställa till problem.
Importera data från datafil till databasen
När ni skapat tabellerna ska ni ska skriva R kod som hämtar data från datafilen och skriver in datan i er databas. Observera att tanken här är att vi jobbar med så stora datamängder att de inte ryms i en dataframe i R. Man måste alltså hantera inläsningen från filen och importen till databasen en bit i taget. Här kan det också vara intressant att reflektera över vad som tar tid i denna process. Att skriva R-kod gör man lättast i RStudio. RStudio finns installerat på maskinerna i PC-pul och går att komma åt i SU-pul. För att öppna RStudio, gör så här:
PC-pul | SU-pul/ThinLinc | Egen dator |
---|---|---|
RStudio finns i startmenyn. |
Öppna en terminal och ge följande kommandon:
|
Windows: sök RStudio, Mac: gå till Appar (Applications). |
Skapa en ny R-fil som ni kallar ImportDataGRUPPNR.R där ni byter
GRUPPNR mot ert gruppnummer i Webreg. Det är i denna fil som ni
skriver den R kod som skall hämta data från datafilen och skriva in data i er
databas. Detta görs lite olika beroende på hur ni har designat er databas och
vad ni satt för namn på tabeller och kolumner. Läs in er datafil i R mha
read.csv
-funktionen eller en relaterad funktion, notera dock
vilken separator och och vilket decimaltecken som används i er datafil
och vad som är default i read.csv.
Använd er av R-biblioteket RMySQL
för att interagera med databasen. Skumma snabbt dokumentationen och fokusera
speciellt på dbConnect
och dbWriteTable
.
Parametrar för dbConnect:
Parameter | Betydelse | Lius server | Egen lokal server |
---|---|---|---|
user | Databasanvändare | Ditt LiU-ID. | Det användarnamn du skapade |
dbname | Namnet på databasen att använda | Ditt LiU-ID. | Den databas du skapat. |
host | Databasserverns hostname, dvs URL | mariadb.edu.liu.se | localhost |
password | Lösenord för databasanvändaren | Ditt databas-lösenord (inte samma lösenord som ditt vanliga LiU-konto) | Det lösenord du satte |
Tips: Om ni vid körning av R koden inser att ni kanske skrivit fel data till fel tabell eller kolumn, eller av annan anledning vill börja om från början, är det lämpligt att ta bort alla tabeller och skapa dem igen mha CreateTables-sql-filen ni gjorde.
Jobba metodiskt, skriv lite kod i taget och testa att det fungerar och att du får in rätt data på rätt ställen. Det är lämpligt att också öppna en MySQL klient så att ni kan kolla att data faktiskt skrivs in på rätt sätt i er databas, eftersom det är tunnt med felmeddelanden från databas-servern. Kom speciellt ihåg att verifiera att all data faktiskt skrivs till databasen. Notera att datafilen innehåller tiotusentals rader, tusentals studenter och kurser och att gruppernas datafiler är olika. Anta att datat i filen redan är rensat på felaktig data, outliers osv.
Redovisning
Visa upp din kod för en labbassistent och var beredd att svara på frågor om koden (båda labbpartners ska kunna svara för hela koden). Lämna sedan in filerna CreateTablesNR.sql och ImportDataNR.R enligt instruktionerna på Översikts-sidan.
Deadline
Denna del har ingen egen deadline men måste vara klar innan arbetet med Projekt del C påbörjas.
Sidansvarig: Eva Ragnemalm
Senast uppdaterad: 2025-03-18