sql >> Databasteknik >  >> RDS >> Database

En databasmodell för en MOOC-plattform

Om du körde en MOOC online-utbildningsplattform som edX eller Coursera, hur skulle du hålla den organiserad? I den här artikeln ska vi titta på en databasmodell som skulle göra jobbet.

Du har säkert hört talas om MOOC (Massive Open Online Course), ett trendigt sätt att lära sig online. Och om du inte har det, tänk på ett MOOC-program som universitetsämnen med allt material, tester och feedback tillgängligt online. Två av de mest populära online MOOC-leverantörerna är Coursera (grundat av Stanford University) och edX (grundat av Massachusetts Institute of Technology och Harvard University). I samarbete med andra universitet och partners tillhandahåller de hundratals kurser till miljontals elever över hela världen.

I den här artikeln kommer vi att diskutera en förenklad version av en databasmodell som vi kan använda för att köra den här typen av tjänst. Låt oss först prata om hur MOOC faktiskt fungerar ur ett icke-tekniskt perspektiv.

Hur fungerar MOOC-plattformar?

Personligen har jag använt Coursera och jag var väldigt nöjd med den. Därför hänför mina kommentarer i den här artikeln mest till Courseras modell, även om jag tror att edX följer ett liknande mönster.

Vad är affärsmodellen?

Tanken är väldigt enkel. Partners – främst universitet – skapar material för onlinekurser, som vanligtvis baseras på deras campusutbud. Dessa material kan inkludera videoföreläsningar, uppläsningar, frågesporter, diskussioner, projekt, onlinetest och ibland slutuppgifter. Mycket av materialet är videobaserat, så eleverna får den där "mänskliga touchen". Jag gillade vissa kurser inte bara på grund av det som lärdes ut utan också på grund av föreläsarna.

Eleverna måste titta på eller läsa tillhandahållet material, slutföra uppgifter, svara på frågesporter och göra prov. Vanligtvis finns det även en eller flera projektuppgifter och betyg från alla dessa uppgifter utgör slutbetyget. Om deras slutbetyg överstiger ett visst betyg (t.ex. 70 %) klarar eleverna kursen och får ett certifikat. Vissa certifikat är gratis; andra kräver en relativt liten betalning. Detsamma gäller kurserna.

Relaterade kurser kan organiseras i större enheter som kallas specialiseringar. Att slutföra specialiseringen ger studenten ytterligare ett certifikat (liksom en mer avrundad färdighetsuppsättning) och kan vara billigare än att slutföra varje kurs separat.

Alla kurser och inriktningar kan ha olika pass. Vissa kommer att ha nya sessioner varje månad, medan andra kommer att ha en ny session varje år. Det finns också kurser som är tillgängliga på begäran.

Onlinecertifieringar väger ännu inte samma vikt som ett universitetscertifikat, men de strävar efter det. Vissa kurser är redan godkända för högskolepoäng, och onlinestudieprogram är också verklighet nu.

Hur många partners, kurser och studenter finns det?

Det enkla svaret är "mycket". Kurser mäts i tusentals, partners i hundratals och studenter i miljoner – från nästan alla länder i världen.

Vilka förändringar kan vi förvänta oss för MOOC?

Det fina med MOOCs är att de snabbt kan anpassa sig till förändringar. De är inte begränsade av statliga eller universitetsbestämmelser och behöver inte vänta på godkännande. Det är mycket viktigt, särskilt för IT-relaterade kurser. Vissa kurser och specialiseringar kommer inte att ha nya sessioner:andra nya kurser kommer att dyka upp och befintliga kurser kommer att genomgå olika uppdateringar.

MOOC-databasmodellen




Jag har delat upp MOOC-datamodellen i tre ämnesområden:

  • Course details
  • Specialization details
  • Student participation

Och det finns tre fristående tabeller:

  • institution
  • lecturer
  • student

De fristående tabellerna används som datakällor för olika tabeller inom ämnesområdena. Eftersom ämnesområdena innehåller det mesta av logiken kommer jag att förklara dem först och sedan flytta till de fristående tabellerna.

Kurser och material

Även om människor vanligtvis är den viktigaste delen av alla transaktioner, gör jag ett undantag här. Utan kursmaterial skulle det inte finnas några kurser och därför inget intresse för vår MOOC-plattform. I "Kursdetaljer" har jag grupperat alla tabeller som beskriver kurser, relaterade institutioner, partners och material.

Den viktigaste tabellen i det här avsnittet är course tabell. Attributen är:

  • name – ett unikt kursnamn
  • commitment – en textbeskrivning av troligt engagemang, t.ex. "5 veckors studier, 5-7 timmar/vecka"
  • description – en beskrivning av kursen
  • specialization_id – en hänvisning till den relaterade specialiseringen, om tillämpligt. Kurser kan endast ingå i en specialisering. Vissa kurser är inte knutna till någon specialisering, så detta attribut är inte obligatoriskt.
  • min_grade – det lägsta betyg som krävs för att bli godkänd på en kurs. Vanligtvis kommer det att mätas i procent. På de flesta Coursera-kurser är detta 70%.
  • course_price – avgiften du betalar för en kurs.
  • active – en på/av-knapp som indikerar om en kurs kommer att ha framtida pass. Aktiva kurser kommer att ha nya sessioner, medan inaktiva kurser inte har det.

Lägg märke till att course tabellen heter course:Course details . Detta beror på att jag har använt course tabell igen någon annanstans för att göra modellen tydligare. För att göra detta använde jag Vertabelos "Kopiera" och "Klistra in som genväg".

Varje kurs består av några kapitel. I Coursera har eleverna vanligtvis en vecka på sig att slutföra varje kapitel. En lista över alla kursens underavsnitt eller kapitel lagras i chapter tabell. course_id attribut är en referens till course tabell; chapter_no är ordningsnumret för ett kapitel i den kursen. Dessa två attribut bildar tillsammans tabellens alternativa nyckel. Det sista attributet, description , lagrar en detaljerad beskrivning för varje kapitel.

Varje kapitel är sammansatt av videoföreläsningar, läsningar, frågesporter, tester och projekt. Vi kommer inte att skapa separata strukturer i databasen för att lagra olika materialtyper. Istället lagrar vi länkar till detta material. Och det är där material tabell kommer in. Attributen i denna tabell är:

  • chapter_id – en hänvisning till det relaterade kapitlet
  • material_no – ett ordningsnummer som tilldelas olika kapitelmaterial. Tillsammans med chapter_id attribut, bildar detta attribut tabellens alternativa (unika) nyckel.
  • material_type_id – är en referens till material_type tabell
  • mandatory – ett booleskt värde som anger om materialet är obligatoriskt eller valfritt (d.v.s. för extra kredit)
  • max_points – det maximala antalet poäng som eleven kan uppnå efter att ha genomfört detta material. Om inga poäng delas ut använder vi helt enkelt "0" som värde.

material_type tabellen är en ordbok över alla möjliga materialtyper. Det enda attributet bredvid primärnyckeln är type_name och självklart måste den bara innehålla unika värden. Vissa förväntade materialtyper är "videoföreläsning" , "läsning" , ”quiz” , ”test” , "slutprov" och "projektuppdrag" .

on_course Tabellen relaterar varje kurs till den eller de lärare som undervisar i den kursen. Den innehåller bara dess primärnyckel och ett främmande nyckelpar (lecturer_id och course_id ). Det främmande nyckelparet bildar den unika nyckeln för tabellen.

På samma sätt, course_created_by relaterar en kurs med alla institutioner som var involverade i att skapa den.

Specialiseringar

Fristående kurser är bra, men för att bemästra en ny färdighet behöver du mer än en kurs. Specialiseringar är ett steg i den riktningen. De är en serie kurser, ofta fyra eller fem, och ett slutprojekt där du kan tillämpa de färdigheter du har lärt dig. Alla specialiseringsrelaterade tabeller finns i Specialization details område.

specialization tabellen är den centrala tabellen i detta avsnitt. För varje specialisering lagrar vi ett unikt name och description . specialization_discount är det belopp en student kommer att spara om de registrerar sig för hela specialiseringen snarare än i de fristående kurserna individuellt. Som tidigare, active attribut är en enkel på/av-knapp som indikerar om specialiseringen kommer att ha framtida sessioner eller inte.

Observera att specialization Tabell visas också två gånger i vår modell. Inom detta område heter det specialization:Specialization details .

on_specialization och specialization_created_by tabeller har samma syfte och följer samma logik som on_course och course_created_by tabeller. Naturligtvis kommer de denna gång att hantera inriktningar snarare än kurser.

Elever

Och till sist kommer vi till studentdelen. I Student participation område kommer vi att lagra uppgifter om elever, sessioner och elevers prestationer.

Varje kurs och specialisering kan ha mer än en session, så vi måste spara när varje kurs och specialisering börjar och när den slutar. För kurser är det väldigt enkelt. Varje ny session är bara en ny instans av samma kurs. En ny fördjupningssession är en ny instans av hela inriktningen och alla dess kurser.

Kom ihåg att studenter kan anmäla sig till en kurs från en inriktning eller till alla. course_sessions och specialization_session tabeller ger oss den informationen. Förutom datum innehåller de bara främmande nycklar till course och specialization_table tabeller. Ett startdatum för en främmande nyckel par bildar den unika nyckeln i båda tabellerna.

Kurssessioner kan också vara en del av specialiseringssessionerna, så vi måste lägga till en (icke-obligatorisk) främmande nyckel.

status ordboken listar alla möjliga statusar relaterade till elevernas prestationer under en kurs. Några möjliga statusar är ”bortfallna” , "godkänd" och "misslyckades" .

Vi använder enrolled_course tabell för att lagra varje anmälan i varje kurstillfälle. Den här tabellen innehåller två främmande nycklar, student_id och course_session_id , och tillsammans bildar de den alternativa (unika) nyckeln för tabellen. Andra attribut i tabellen är:

  • enrollment_date – datumet då en student anmälde sig till den kursen
  • status_id – en referens till status lexikon; detta registrerar hur en elev har presterat på den kursen
  • status_date – datumet då en status tilldelades
  • final_grade – betyget (i procent) som eleven uppnådde för den kursen
  • certificate_ID – ett certifikats identifieringsnummer som plattformen genererar när en student klarar kursen
  • certificate_location – en länk till den exakta platsen där certifikatet är lagrat

enrolled_specialization tabellen följer samma logik som enrolled_course tabell. Skillnaden är att det relaterar studenter till inriktningar snarare än kurser.

Vi använder student_results tabell för att lagra elevernas prestationer på specifikt kursmaterial. För varje material (material_id ) och varje elevs registrering (enrolled_course_id ) vi kunde ha mer än ett försök. Därför attempt attribut är ordningsnumret för varje elevs försök. Dessa tre attribut bildar tillsammans tabellens alternativa nyckel.

I den här tabellen visas attempt_link är platsen för varje instans av tester eller projekt som lämnats in av studenter. Vi kan anta att vi för varje försök genererar ett "nytt" test med slumpmässigt valda frågor. Om materialet inte kräver elevsvar, kommer länken inte att existera och vi lagrar ett NULL-värde här.

Slutligen, student_results tabell lagrar när en elev started och ended ett försök och score uppnåtts. Den kan också lagra prestationsresultat på uppgifter utan betyg samt spela in vilka videor de tittade på och när, vilket material de läste osv.

Institutioner

institution table är en enkel katalog som listar alla institutioner som skapat kurser eller vars föreläsare är involverade i kurser.

Föreläsare

Vi skulle kunna gå med en mycket mer detaljerad tabell här, men att lagra varje lärares för- och efternamn, titel och deras universitetsnamn är tillräckligt för våra syften. Inte överraskande, allt detta förvaras i lecturer bord.

Elever

Jag avslutar tabellöversikten med student tabell. Än en gång behöver vi bara grundläggande attribut här, och de borde vara självförklarande.

Hur skulle vi kunna förbättra den här modellen?

Denna modell stöder de grundläggande funktionerna som behövs för att skapa en MOOC-plattform. Ändå kan du förmodligen lätt komma på många användbara tillägg. Här är några jag kom på:

  • Kursspråk och undertexter för videoföreläsningar
  • Maskingradering
  • Elever som granskar och betygsätter varandras uppgifter
  • Finansiellt stöd
  • Ett alternativ som gör att elever kan återuppta en kurs efter att ha hoppat av den

Det är också värt att nämna att, enligt Wikipedia "... Courseras databasservrar (som körs på RDS) svarar på 10 miljarder SQL-frågor, och Coursera betjänar cirka 500 TB trafik per månad." Detta var 2013. En riktig MOOC-databasmodell kan se ut som den som presenteras i den här artikeln, men det finns mycket mer arbete att göra med modelleringen och infrastrukturen!

I den här artikeln försökte jag visa komplexiteten i modellen som ligger bakom en MOOC-plattform. Jag fokuserade främst på Coursera och edX som mina exempel. Denna modell innehåller 18 bord, men den repar bara ytan. Kommentera gärna och dela de förbättringar du skulle implementera i modellen. Om du tror att jag har missat något viktigt, snälla meddela mig!

Gillar du att lära dig online? Testa LearnSQL.com – interaktiva SQL-kurser, tillgängliga i din webbläsare.


  1. oracle SQL plus hur man avslutar kommandot i SQL-fil?

  2. Lägg till år till ett datum i PostgreSQL

  3. Distribuera en Percona-server till ett hybridmoln

  4. SQL UPPDATERING