Göm menyn

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:

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-pulSU-pul/ThinLinc

source Z:\732G16\projekt\CreateTables.sql

source ~/732G16/projekt/CreateTables.sql

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-pulSU-pul/ThinLincEgen dator

RStudio finns i startmenyn.

Öppna en terminal och ge följande kommandon:

module add prog/rstudio/1.1.463
rstudio

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:

ParameterBetydelseLius serverEgen lokal server
userDatabasanvändareDitt LiU-ID.Det användarnamn du skapade
dbnameNamnet på databasen att använda Ditt LiU-ID.Den databas du skapat.
hostDatabasserverns hostname, dvs URLmariadb.edu.liu.selocalhost
passwordLösenord för databasanvändarenDitt 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.

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: 2024-03-28