sql >> Database teknologi >  >> RDS >> Database

En databasemodel for en MOOC-platform

Hvis du kørte en MOOC online læringsplatform som edX eller Coursera, hvordan ville du så holde det organiseret? I denne artikel vil vi se på en databasemodel, der ville gøre jobbet.

Du har sikkert hørt om MOOC (Massive Open Online Course), en populær måde at lære online på. Og hvis du ikke har, så tænk på et MOOC-program som universitetsfag med alle materialer, test og feedback tilgængelig online. To af de mest populære online MOOC-udbydere er Coursera (grundlagt af Stanford University) og edX (stiftet af Massachusetts Institute of Technology og Harvard University). I samarbejde med andre universiteter og partnere tilbyder de hundredvis af kurser til millioner af elever over hele verden.

I denne artikel vil vi diskutere en forenklet version af en databasemodel, vi kunne bruge til at køre denne type service. Lad os først tale om, hvordan MOOC'er faktisk fungerer ud fra et ikke-teknisk perspektiv.

Hvordan fungerer MOOC-platforme?

Personligt har jeg brugt Coursera, og jeg var meget tilfreds med det. Derfor vedrører mine kommentarer i denne artikel mest Courseras model, selvom jeg mener, at edX følger et lignende mønster.

Hvad er forretningsmodellen?

Ideen er meget enkel. Partnere – primært universiteter – skaber materialer til onlinekurser, som normalt er baseret på deres campustilbud. Disse materialer kan omfatte videoforelæsninger, oplæsninger, quizzer, diskussioner, projekter, onlinetests og nogle gange afsluttende opgaver. Meget af materialet er videobaseret, så eleverne får det "menneskelige præg". Jeg nød nogle kurser, ikke kun på grund af det, der blev undervist i, men også på grund af underviserne.

Eleverne skal se eller læse medfølgende materialer, udføre opgaver, besvare quizzer og tage prøver. Normalt er der også en eller flere projektopgaver, og karakterer fra alle disse opgaver udgør den endelige karakter. Hvis deres endelige karakter er over en vis score (f.eks. 70%) består eleverne i kurset og modtager et certifikat. Nogle certifikater er gratis; andre kræver en forholdsvis lille betaling. Det samme gælder for kurserne.

Relaterede kurser kan organiseres i større enheder kendt som specialiseringer. Gennemførelse af specialiseringen giver den studerende endnu et certifikat (samt et mere afrundet færdighedssæt) og kan være billigere end at gennemføre hvert kursus separat.

Alle kurser og specialiseringer kan have forskellige sessioner. Nogle vil have nye sessioner hver måned, mens andre vil have en ny session hvert år. Der er også kurser, der er tilgængelige på efterspørgsel.

Online-certificeringer har endnu ikke samme vægt som et universitetscertifikat, men de stræber efter det. Nogle kurser er allerede godkendt til universitetskredit, og online studieprogrammer er også en realitet nu.

Hvor mange partnere, kurser og studerende er der?

Det enkle svar er "meget". Kurser måles i tusindvis, partnere i hundredvis og studerende i millioner – fra næsten alle lande i verden.

Hvilke ændringer kan vi forvente for MOOC'er?

Det fantastiske ved MOOC'er er, at de hurtigt kan tilpasse sig forandringer. De er ikke begrænset af stats- eller universitetsbestemmelser og behøver ikke at vente på godkendelse. Det er meget vigtigt, især for IT-relaterede kurser. Nogle kurser og specialiseringer vil ikke have nye sessioner:andre nye kurser vises, og eksisterende kurser vil gennemgå forskellige opdateringer.

MOOC-databasemodellen




Jeg har opdelt MOOC-datamodellen i tre emneområder:

  • Course details
  • Specialization details
  • Student participation

Og der er tre selvstændige tabeller:

  • institution
  • lecturer
  • student

De selvstændige tabeller bruges som datakilder til forskellige tabeller i fagområderne. Da emneområderne indeholder det meste af logikken, vil jeg forklare dem først og derefter flytte til de selvstændige tabeller.

Kurser og materialer

Selvom mennesker normalt er den vigtigste del af enhver transaktion, vil jeg gøre en undtagelse her. Uden kursusmaterialer ville der ikke være kurser og derfor ingen interesse for vores MOOC platform. I "Kursusdetaljer" har jeg grupperet alle tabeller, der beskriver kurser, relaterede institutioner, partnere og materialer.

Den vigtigste tabel i dette afsnit er course bord. Attributterne er:

  • name – et unikt kursusnavn
  • commitment – en tekstbeskrivelse af sandsynligt engagement, f.eks. “5 ugers undersøgelse, 5-7 timer/uge”
  • description – en beskrivelse af kurset
  • specialization_id – en henvisning til den relaterede specialisering, hvis det er relevant. Kurser kan kun indgå i én specialisering. Nogle kurser er ikke tilknyttet nogen specialisering, så denne egenskab er ikke obligatorisk.
  • min_grade – minimumskarakteren for at bestå et kursus. Normalt vil det blive målt som en procentdel. På de fleste Coursera-kurser er dette 70%.
  • course_price – det gebyr, du betaler for et kursus.
  • active – en tænd/sluk-knap, der angiver, om et kursus vil have fremtidige sessioner. Aktive kurser vil have nye sessioner, mens inaktive kurser ikke vil.

Bemærk, at course tabellen hedder course:Course details . Dette skyldes, at jeg har brugt course tabel igen et andet sted for at gøre modellen mere overskuelig. For at gøre dette brugte jeg Vertabelos "Kopier" og "Indsæt som genvej" muligheder.

Hvert kursus er sammensat af nogle få kapitler. I Coursera har eleverne normalt en uge til at færdiggøre hvert kapitel. En liste over alle kursets underafsnit eller kapitler er gemt i chapter bord. course_id attribut er en reference til course bord; chapter_no er ordenstallet for et kapitel i det pågældende kursus. Disse to attributter danner tilsammen tabellens alternative nøgle. Den sidste attribut, description , gemmer en detaljeret beskrivelse for hvert kapitel.

Hvert kapitel er sammensat af videoforelæsninger, oplæsninger, quizzer, tests og projekter. Vi vil ikke oprette separate strukturer i databasen til at gemme forskellige materialetyper. I stedet gemmer vi links til disse materialer. Og det er her material tabel kommer ind. Attributterne i denne tabel er:

  • chapter_id – en henvisning til det relaterede kapitel
  • material_no – et ordenstal tildelt forskellige kapitelmaterialer. Sammen med chapter_id attribut, danner denne attribut tabellens alternative (unikke) nøgle.
  • material_type_id – er en reference til material_type tabel
  • mandatory – en boolesk værdi, der angiver, om materialet er påkrævet eller valgfrit (dvs. for ekstra kredit)
  • max_points – det maksimale antal point, som eleven kan opnå efter at have gennemført dette materiale. Hvis der ikke gives point, bruger vi blot "0" som værdi.

material_type tabel er en ordbog over alle mulige materialetyper. Den eneste attribut ved siden af ​​den primære nøgle er type_name og det skal selvfølgelig kun indeholde unikke værdier. Nogle forventede materialetyper er "videoforedrag" , “læsning” , "quiz" , “test” , "afsluttende eksamen" og "projektopgave" .

on_course tabel relaterer hvert kursus til den eller de undervisere, der underviser i det pågældende kursus. Den indeholder kun dens primære nøgle og et fremmednøglepar (lecturer_id og course_id ). Fremmednøgleparret danner den unikke nøgle til tabellen.

På samme måde course_created_by omhandler et kursus med alle de institutioner, der var involveret i at oprette det.

Specialiseringer

Uafhængige kurser er gode, men for at mestre en ny færdighed skal du bruge mere end ét kursus. Specialiseringer er et skridt i den retning. De er en række kurser, ofte fire eller fem, og et afsluttende projekt, hvor du kan anvende de færdigheder, du har lært. Alle specialiseringsrelaterede tabeller er i Specialization details areal.

specialization tabel er den centrale tabel i dette afsnit. For hver specialisering gemmer vi et unikt name og description . specialization_discount er det beløb, en studerende vil spare, hvis de tilmelder sig hele specialiseringen frem for på de selvstændige kurser individuelt. Som før er den active attribut er en simpel tænd/sluk-knap, der angiver, om specialiseringen vil have fremtidige sessioner eller ej.

Bemærk, at specialization tabel optræder også to gange i vores model. Inde i dette område hedder det specialization:Specialization details .

on_specialization og specialization_created_by tabeller har samme formål og følger samme logik som on_course og course_created_by tabeller. Selvfølgelig vil de denne gang håndtere specialiseringer frem for kurser.

Elever

Og endelig kommer vi til elevafdelingen. I Student participation område, gemmer vi optegnelser over elever, sessioner og elevers præstationer.

Hvert kursus og hver specialisering kan have mere end én session, så vi skal gemme, hvornår hvert kursus og hver specialisering starter, og hvornår det slutter. For kurser er det meget enkelt. Hver ny session er blot en ny forekomst af det samme kursus. En ny specialiseringssession er en ny forekomst af hele specialiseringen og alle dens kurser.

Husk, at studerende kan tilmelde sig ét kursus fra en specialisering eller på dem alle. course_sessions og specialization_session tabeller giver os disse oplysninger. Udover datoer indeholder de kun fremmednøgler til course og specialization_table tabeller. En fremmed nøgle-startdato par danner den unikke nøgle i begge tabeller.

Kursussessioner kan også være en del af specialiseringssessionerne, så vi bliver nødt til at tilføje en (ikke-obligatorisk) fremmednøgle.

status ordbog viser alle mulige statusser relateret til elevernes præstationer under et kursus. Nogle få mulige statusser er "faldet ud" , "bestået" og "mislykkedes" .

Vi bruger enrolled_course tabel til at gemme hver tilmelding i enhver kursussession. Denne tabel indeholder to fremmednøgler, student_id og course_session_id , og sammen danner de den alternative (unikke) nøgle til bordet. Andre attributter i tabellen er:

  • enrollment_date – datoen for, hvornår en studerende tilmeldte sig det pågældende kursus
  • status_id – en reference til status ordbog; dette registrerer, hvordan en elev har præsteret på det pågældende kursus
  • status_date – datoen, hvor en status blev tildelt
  • final_grade – karakteren (i procent), som eleven opnåede for det pågældende kursus
  • certificate_ID – et certifikatidentifikationsnummer, som platformen genererer, når en elev består kurset
  • certificate_location – et link til den nøjagtige placering, hvor certifikatet er gemt

enrolled_specialization tabellen følger samme logik som enrolled_course bord. Forskellen er, at det relaterer studerende til specialiseringer frem for kurser.

Vi bruger student_results bord til at gemme elevernes præstationer på specifikke kursusmaterialer. For hvert materiale (material_id ) og hver elevs tilmelding (enrolled_course_id ) vi kunne have mere end et forsøg. Derfor er attempt attribut er ordenstallet for hver elevs forsøg. Disse tre attributter danner tilsammen tabellens alternative nøgle.

I denne tabel er attempt_link er placeringen af ​​hver forekomst af test eller projekter indsendt af studerende. Vi kan antage, at vi for hvert forsøg genererer en "ny" test med tilfældigt udvalgte spørgsmål. Hvis materialet ikke kræver elevsvar, eksisterer linket ikke, og vi gemmer en NULL-værdi her.

Til sidst, student_results tabel gemmer, hvornår en elev started og ended et forsøg og score opnået. Det kan også gemme præstationsresultater på ikke-bedømte opgaver samt registrere, hvilke videoer de har set og hvornår, hvilket materiale de læser osv.

Institutioner

institution tabel er et simpelt katalog, der viser alle institutioner, der har oprettet kurser, eller hvis undervisere er involveret i kurser.

Foredragsholdere

Vi kunne gå med en meget mere detaljeret tabel her, men at gemme hver undervisers for- og efternavn, titel og deres universitetsnavn er nok til vores formål. Ikke overraskende er alt dette gemt i lecturer tabel.

Elever

Jeg afslutter tabeloversigten med student bord. Endnu en gang har vi bare brug for grundlæggende egenskaber her, og de burde være selvforklarende.

Hvordan kunne vi forbedre denne model?

Denne model understøtter de grundlæggende funktioner, der er nødvendige for at skabe en MOOC-platform. Alligevel kan du sikkert sagtens komme i tanke om mange nyttige tilføjelser. Her er et par stykker, jeg fandt på:

  • Kursussprog og undertekster til videoforelæsninger
  • Maskinklassificering
  • Elever gennemgår og bedømmer hinandens opgaver
  • Økonomisk støtte
  • En mulighed, der giver eleverne mulighed for at genoptage et kursus efter at have droppet det

Det er også værd at nævne, at ifølge Wikipedia “... Courseras databaseservere (der kører på RDS) besvarer 10 milliarder SQL-forespørgsler, og Coursera betjener omkring 500 TB trafik pr. måned.” Dette var i 2013. En rigtig MOOC-databasemodel kan ligne den, der præsenteres i denne artikel, men der er meget mere arbejde at gøre med modelleringen og infrastrukturen!

I denne artikel forsøgte jeg at vise kompleksiteten af ​​den model, der ligger bag en MOOC platform. Jeg fokuserede hovedsageligt på Coursera og edX som mine eksempler. Denne model indeholder 18 borde, men den ridser kun overfladen. Du er velkommen til at kommentere og dele de forbedringer, du ville implementere i modellen. Hvis du synes, jeg er gået glip af noget vigtigt, så lad mig det vide!

Kan du lide at lære online? Prøv LearnSQL.com – interaktive SQL-kurser, tilgængelige i din browser.


  1. Slick 2.0 Generic CRUD operationer

  2. Hvad er forskellen mellem præcision og skala?

  3. Hvordan får man script af SQL Server-data?

  4. 6 måder at vælge dublerede rækker i Oracle