sql >> Database >  >> RDS >> Database

Een databasemodel voor een MOOC-platform

Als je een MOOC online leerplatform zoals edX of Coursera zou runnen, hoe zou je het dan georganiseerd houden? In dit artikel zullen we kijken naar een databasemodel dat het werk zou doen.

Je hebt vast wel eens gehoord van MOOC (Massive Open Online Course), een trending manier om online te leren. En als je dat nog niet hebt gedaan, beschouw een MOOC-programma dan als universitaire vakken met alle materialen, tests en feedback online beschikbaar. Twee van de meest populaire online MOOC-aanbieders zijn Coursera (opgericht door Stanford University) en edX (opgericht door Massachusetts Institute of Technology en Harvard University). In samenwerking met andere universiteiten en partners bieden ze honderden cursussen aan miljoenen studenten over de hele wereld.

In dit artikel bespreken we een vereenvoudigde versie van een databasemodel dat we zouden kunnen gebruiken om dit type service uit te voeren. Laten we het eerst hebben over hoe MOOC's echt werken vanuit een niet-technisch perspectief.

Hoe werken MOOC-platforms?

Persoonlijk heb ik Coursera gebruikt en was er zeer tevreden over. Daarom hebben mijn opmerkingen in dit artikel voornamelijk betrekking op het model van Coursera, hoewel ik geloof dat edX een soortgelijk patroon volgt.

Wat is het bedrijfsmodel?

Het idee is heel eenvoudig. Partners - voornamelijk universiteiten - maken materialen voor online cursussen, die meestal gebaseerd zijn op hun campusaanbod. Deze materialen kunnen videocolleges, lezingen, quizzen, discussies, projecten, online tests en soms eindopdrachten omvatten. Veel van het materiaal is op video gebaseerd, dus leerlingen krijgen die 'menselijke touch'. Ik heb van sommige cursussen genoten, niet alleen vanwege wat er werd onderwezen, maar ook vanwege de docenten.

Studenten moeten de verstrekte materialen bekijken of lezen, opdrachten voltooien, quizzen beantwoorden en tests afleggen. Meestal zijn er ook een of meer projectopdrachten, en de cijfers van al deze opdrachten vormen het eindcijfer. Als hun eindcijfer boven een bepaalde score ligt (bijvoorbeeld 70%), slagen studenten voor de cursus en ontvangen ze een certificaat. Sommige certificaten zijn gratis; anderen vereisen een relatief kleine betaling. Hetzelfde geldt voor de cursussen.

Gerelateerde cursussen kunnen worden georganiseerd in grotere entiteiten die specialisaties worden genoemd. Het voltooien van de specialisatie geeft de student een ander certificaat (evenals een meer afgeronde vaardigheden) en is mogelijk minder duur dan het voltooien van elke cursus afzonderlijk.

Alle cursussen en specialisaties kunnen verschillende sessies hebben. Sommige hebben elke maand nieuwe sessies, terwijl andere elk jaar een nieuwe sessie hebben. Er zijn ook cursussen die op aanvraag beschikbaar zijn.

Online certificeringen hebben nog niet hetzelfde gewicht als een universitair certificaat, maar ze streven ernaar. Sommige cursussen zijn al goedgekeurd voor studiepunten en online studieprogramma's zijn nu ook een feit.

Hoeveel partners, cursussen en studenten zijn er?

Het simpele antwoord is "veel". Cursussen worden in duizenden gemeten, partners in honderden en studenten in miljoenen - uit bijna elk land ter wereld.

Welke veranderingen kunnen we verwachten voor MOOC's?

Het mooie van MOOC's is dat ze zich snel kunnen aanpassen aan veranderingen. Ze worden niet beperkt door staats- of universitaire voorschriften en hoeven niet te wachten op goedkeuring. Zeker bij IT-gerelateerde opleidingen is dat heel belangrijk. Sommige cursussen en specialisaties hebben geen nieuwe sessies:andere nieuwe cursussen verschijnen en bestaande cursussen ondergaan verschillende updates.

Het MOOC-databasemodel




Ik heb het MOOC-datamodel opgesplitst in drie vakgebieden:

  • Course details
  • Specialization details
  • Student participation

En er zijn drie zelfstandige tabellen:

  • institution
  • lecturer
  • student

De standalone tabellen worden gebruikt als gegevensbronnen voor verschillende tabellen in de vakgebieden. Aangezien de onderwerpgebieden de meeste logica bevatten, zal ik ze eerst uitleggen en daarna naar de zelfstandige tabellen gaan.

Cursussen en materialen

Hoewel mensen meestal het belangrijkste onderdeel zijn van elke transactie, maak ik hier een uitzondering. Zonder cursusmateriaal geen cursussen en dus ook geen interesse in ons MOOC-platform. In "Cursusdetails" heb ik alle tabellen gegroepeerd die cursussen, gerelateerde instellingen, partners en materialen beschrijven.

De belangrijkste tabel in deze sectie is de course tafel. De attributen zijn:

  • name – een unieke cursusnaam
  • commitment – een tekstbeschrijving van de waarschijnlijke inzet, b.v. “5 weken studie, 5-7 uur/week”
  • description – een beschrijving van de cursus
  • specialization_id – een verwijzing naar de desbetreffende specialisatie, indien van toepassing. Cursussen kunnen slechts deel uitmaken van één specialisatie. Sommige cursussen zijn niet verbonden aan een specialisatie, dus dit kenmerk is niet verplicht.
  • min_grade – het minimumcijfer dat nodig is om voor een vak te slagen. Meestal wordt dat als een percentage gemeten. Bij de meeste Coursera-cursussen is dit 70%.
  • course_price – het bedrag dat je voor een cursus betaalt.
  • active – een aan/uit-schakelaar die aangeeft of een cursus toekomstige sessies zal hebben. Actieve cursussen hebben nieuwe sessies, terwijl inactieve cursussen dat niet hebben.

Merk op dat de course tabel heet course:Course details . Dit komt omdat ik de course tabel opnieuw ergens anders om het model duidelijker te maken. Om dit te doen, heb ik de opties "Kopiëren" en "Plakken als snelkoppeling" van Vertabelo gebruikt.

Elke cursus is opgebouwd uit een aantal hoofdstukken. In Coursera hebben studenten meestal een week om elk hoofdstuk te voltooien. Een lijst met alle cursussubsecties of hoofdstukken wordt opgeslagen in het chapter tafel. De course_id attribuut is een verwijzing naar de course tafel; chapter_no is het volgnummer van een hoofdstuk in die cursus. Deze twee attributen vormen samen de alternatieve sleutel van de tabel. Het laatste attribuut, description , slaat een gedetailleerde beschrijving op voor elk hoofdstuk.

Elk hoofdstuk bestaat uit videocolleges, lezingen, quizzen, tests en projecten. We zullen geen aparte structuren in de database maken om verschillende materiaalsoorten op te slaan. In plaats daarvan slaan we links naar deze materialen op. En dat is waar het material tabel komt binnen. De attributen in deze tabel zijn:

  • chapter_id – een verwijzing naar het gerelateerde hoofdstuk
  • material_no – een volgnummer toegewezen aan verschillende hoofdstukmaterialen. Samen met de chapter_id attribuut, dit attribuut vormt de alternatieve (unieke) sleutel van de tabel.
  • material_type_id – is een verwijzing naar de material_type tafel
  • mandatory – een booleaanse waarde die aangeeft of het materiaal vereist of optioneel is (d.w.z. voor extra punten)
  • max_points – het maximale aantal punten dat de student kan behalen na het voltooien van deze stof. Als er geen punten worden toegekend, gebruiken we gewoon "0" als waarde.

De material_type table is een woordenboek van alle mogelijke materiaalsoorten. Het enige attribuut naast de primaire sleutel is type_name en het mag natuurlijk alleen unieke waarden bevatten. Enkele verwachte materiaalsoorten zijn “videocollege” , “lezen” , “quiz” , “test” , “eindexamen” en “projectopdracht” .

De on_course tabel relateert elke cursus aan de docent(en) die die cursus doceert. Het bevat alleen de primaire sleutel en een extern sleutelpaar (lecturer_id en course_id ). Het externe sleutelpaar vormt de unieke sleutel voor de tabel.

Op dezelfde manier, course_created_by brengt een cursus in verband met alle instellingen die betrokken waren bij het maken ervan.

Specialisaties

Op zichzelf staande cursussen zijn geweldig, maar om een ​​nieuwe vaardigheid onder de knie te krijgen, heb je meer dan één cursus nodig. Specialisaties zijn een stap in die richting. Het zijn een reeks cursussen, vaak vier of vijf, en een afstudeerproject waar je de vaardigheden die je hebt geleerd kunt toepassen. Alle tabellen met betrekking tot specialisatie staan ​​in de Specialization details Oppervlakte.

De specialization tafel is de centrale tafel van deze sectie. Voor elke specialisatie slaan we een unieke name op en description . De specialization_discount is het bedrag dat een student bespaart als hij zich inschrijft voor de hele specialisatie in plaats van voor de afzonderlijke cursussen afzonderlijk. Zoals eerder, de active attribuut is een eenvoudige aan/uit-schakelaar die aangeeft of de specialisatie toekomstige sessies zal hebben of niet.

Merk op dat de specialization tabel komt ook twee keer voor in ons model. Binnen dit gebied heet het specialization:Specialization details .

De on_specialization en specialization_created_by tabellen hebben hetzelfde doel en volgen dezelfde logica als de on_course en course_created_by tafels. Natuurlijk zullen ze deze keer specialisaties behandelen in plaats van cursussen.

Studenten

En tot slot komen we bij het studentengedeelte. In de Student participation gebied, slaan we gegevens op van studenten, sessies en prestaties van studenten.

Elke cursus en specialisatie kan meer dan één sessie hebben, dus we moeten opslaan wanneer elke cursus en specialisatie begint en wanneer deze eindigt. Voor cursussen is het heel eenvoudig. Elke nieuwe sessie is slechts een nieuwe instantie van dezelfde cursus. Een nieuwe specialisatiesessie is een nieuwe instantie van de hele specialisatie en al haar cursussen.

Houd er rekening mee dat studenten zich kunnen inschrijven voor één cursus van een specialisatie of voor alle. De course_sessions en specialization_session tabellen geven ons die informatie. Naast datums bevatten ze alleen externe sleutels voor de course en specialization_table tafels. Een buitenlandse sleutel-startdatum paar vormt de unieke sleutel in beide tabellen.

Cursussessies kunnen ook onderdeel zijn van de specialisatiesessies, dus we moeten een (niet-verplichte) externe sleutel toevoegen.

De status woordenboek geeft een overzicht van alle mogelijke statussen met betrekking tot de prestaties van studenten tijdens een cursus. Een paar mogelijke statussen zijn “uitgevallen” , “geslaagd” en “mislukt” .

We gebruiken de enrolled_course tabel om elke inschrijving in een cursussessie op te slaan. Deze tabel bevat twee externe sleutels, student_id en course_session_id , en samen vormen ze de alternatieve (unieke) sleutel voor de tabel. Andere attributen in de tabel zijn:

  • enrollment_date – de datum waarop een student zich voor die cursus heeft ingeschreven
  • status_id – een verwijzing naar de status woordenboek; dit registreert hoe een student op die cursus heeft gepresteerd
  • status_date – de datum waarop een status werd toegekend
  • final_grade – het cijfer (in procenten) dat de student voor dat vak heeft behaald
  • certificate_ID – een certificaatidentificatienummer dat het platform genereert wanneer een student slaagt voor de cursus
  • certificate_location – een link naar de exacte locatie waar het certificaat is opgeslagen

De enrolled_specialization tabel volgt dezelfde logica als de enrolled_course tafel. Het verschil is dat het studenten in verband brengt met specialisaties in plaats van cursussen.

We gebruiken de student_results tabel om de prestaties van studenten op specifiek cursusmateriaal op te slaan. Voor elk materiaal (material_id ) en de inschrijving van elke student (enrolled_course_id ) we zouden meer dan één poging kunnen hebben. Daarom is de attempt attribuut is het volgnummer van de poging van elke leerling. Deze drie attributen vormen samen de alternatieve sleutel van de tabel.

In deze tabel is de attempt_link is de locatie van elk exemplaar van tests of projecten die door studenten zijn ingediend. We kunnen ervan uitgaan dat we voor elke poging een "nieuwe" test genereren met willekeurig gekozen vragen. Als het materiaal geen antwoorden van leerlingen vereist, bestaat de link niet en slaan we hier een NULL-waarde op.

Ten slotte, de student_results tabel slaat op wanneer een leerling started en ended een poging en de score bereikt. Het kan ook prestatieresultaten van niet-beoordeelde opdrachten opslaan en vastleggen welke video's ze hebben bekeken en wanneer, welk materiaal ze hebben gelezen, enz.

Instellingen

De institution table is een eenvoudige catalogus met alle instellingen die cursussen hebben gemaakt of waarvan docenten bij cursussen zijn betrokken.

Docenten

We zouden hier een veel gedetailleerdere tabel kunnen gebruiken, maar het opslaan van de voor- en achternaam, titel en hun universiteitsnaam van elke docent is voldoende voor onze doeleinden. Het is niet verrassend dat dit allemaal wordt bewaard in de lecturer tafel.

Studenten

Ik maak het tafeloverzicht af met de student tafel. Nogmaals, we hebben hier alleen basiskenmerken nodig, en ze zouden voor zichzelf moeten spreken.

Hoe kunnen we dit model verbeteren?

Dit model ondersteunt de basisfunctionaliteiten die nodig zijn om een ​​MOOC-platform te creëren. Toch kun je waarschijnlijk gemakkelijk veel nuttige toevoegingen bedenken. Hier zijn er een paar die ik heb bedacht:

  • Cursustaal en ondertitels voor videocolleges
  • Machine nivelleren
  • Leerlingen die elkaars opdrachten nakijken en beoordelen
  • Financiële hulp
  • Een optie waarmee studenten een cursus kunnen hervatten nadat ze zijn gestopt

Het is ook vermeldenswaard dat, volgens Wikipedia "... Coursera's databaseservers (die op RDS draaien) 10 miljard SQL-query's beantwoorden en Coursera ongeveer 500 TB aan verkeer per maand bedient." Dit was in 2013. Een echt MOOC-databasemodel ziet er misschien uit zoals in dit artikel, maar er is nog veel werk aan de modellering en infrastructuur!

In dit artikel heb ik geprobeerd de complexiteit van het model achter een MOOC-platform te laten zien. Ik concentreerde me vooral op Coursera en edX als mijn voorbeelden. Dit model bevat 18 tafels, maar het maakt alleen krassen op het oppervlak. Voel je vrij om commentaar te geven en de verbeteringen te delen die je in het model zou implementeren. Als je denkt dat ik iets belangrijks heb gemist, laat het me dan weten!

Vind je het leuk om online te leren? Probeer LearnSQL.com – interactieve SQL-cursussen, beschikbaar in uw browser.


  1. PostgreSQL:prestatie pg_dump, pg_restore verbeteren

  2. Variabele gebruiken in een LIMIT-clausule in MySQL

  3. Hoe RADIANS() werkt in MariaDB

  4. Intel Xeon schaalbare processors en SQL Server 2017