Jeśli prowadziłeś internetową platformę edukacyjną MOOC, taką jak edX lub Coursera, jak byś ją zorganizował? W tym artykule przyjrzymy się modelowi bazy danych, który wykonałby zadanie.
Prawdopodobnie słyszałeś o MOOC (Massive Open Online Course), popularnym sposobie nauki online. A jeśli nie, pomyśl o programie MOOC jako przedmiotach uniwersyteckich ze wszystkimi materiałami, testami i opiniami dostępnymi online. Dwóch najpopularniejszych dostawców internetowych MOOC to Coursera (założony przez Uniwersytet Stanforda) i edX (założony przez Massachusetts Institute of Technology i Harvard University). We współpracy z innymi uniwersytetami i partnerami zapewniają setki kursów milionom uczniów na całym świecie.
W tym artykule omówimy uproszczoną wersję modelu bazy danych, którego moglibyśmy użyć do uruchomienia tego typu usługi. Najpierw porozmawiajmy o tym, jak faktycznie działają MOOC z nietechnicznej perspektywy.
Jak działają platformy MOOC?
Osobiście korzystałam z Coursera i byłam z niej bardzo zadowolona. Dlatego moje komentarze w tym artykule odnoszą się głównie do modelu Coursera, chociaż uważam, że edX podąża za podobnym wzorcem.
Jaki jest model biznesowy?
Pomysł jest bardzo prosty. Partnerzy – przede wszystkim uczelnie – tworzą materiały do kursów online, które zazwyczaj opierają się na ich ofercie kampusowej. Materiały te mogą obejmować wykłady wideo, odczyty, quizy, dyskusje, projekty, testy online, a czasem zadania końcowe. Wiele materiałów jest opartych na materiałach wideo, więc uczący się otrzymują ten „ludzki dotyk”. Podobały mi się niektóre kursy nie tylko ze względu na to, czego nauczano, ale także ze względu na wykładowców.
Uczniowie muszą oglądać lub czytać dostarczone materiały, wykonywać zadania, odpowiadać na quizy i przystąpić do testów. Zazwyczaj jest też jedno lub więcej zadań projektowych, a oceny ze wszystkich tych zadań składają się na ocenę końcową. Jeśli ich ocena końcowa jest wyższa od określonego wyniku (np. 70%) kursanci zaliczają kurs i otrzymują certyfikat. Niektóre certyfikaty są bezpłatne; inne wymagają stosunkowo niewielkiej opłaty. To samo dotyczy kursów.
Kursy pokrewne można organizować w większe jednostki zwane specjalizacjami. Ukończenie specjalizacji daje uczniowi kolejny certyfikat (jak również bardziej zaokrąglony zestaw umiejętności) i może być mniej kosztowne niż ukończenie każdego kursu osobno.
Wszystkie kursy i specjalizacje mogą mieć różne sesje. Niektórzy będą mieli nowe sesje co miesiąc, podczas gdy inni będą mieli jedną nową sesję każdego roku. Istnieją również kursy dostępne na żądanie.
Certyfikaty online nie mają jeszcze takiej samej wagi jak certyfikat uniwersytecki, ale aspirują do tego. Niektóre kursy są już zatwierdzone do zaliczenia na studiach, a programy studiów online są teraz rzeczywistością.
Ilu jest partnerów, kursów i studentów?
Prosta odpowiedź brzmi „dużo”. Kursy są mierzone w tysiącach, partnerzy w setkach, a studenci w milionach – z niemal każdego kraju na świecie.
Jakich zmian możemy się spodziewać w przypadku MOOC?
Wspaniałą rzeczą w MOOC jest to, że mogą szybko dostosowywać się do zmian. Nie są ograniczone przepisami stanowymi lub uniwersyteckimi i nie muszą czekać na zatwierdzenie. To bardzo ważne, zwłaszcza w przypadku kursów związanych z informatyką. Niektóre kursy i specjalizacje nie będą miały nowych sesji:pojawią się inne nowe kursy, a istniejące kursy przejdą różne aktualizacje.
Model bazy danych MOOC
Podzieliłem model danych MOOC na trzy obszary tematyczne:
Course details
Specialization details
Student participation
I są trzy samodzielne stoły:
institution
lecturer
student
Samodzielne tabele są używane jako źródła danych dla różnych tabel w obszarach tematycznych. Ponieważ obszary tematyczne zawierają większość logiki, najpierw je wyjaśnię, a następnie przejdę do samodzielnych tabel.
Kursy i materiały
Chociaż ludzie są zwykle najważniejszą częścią każdej transakcji, tutaj zrobię wyjątek. Bez materiałów szkoleniowych nie byłoby kursów, a zatem nie byłoby zainteresowania naszą platformą MOOC. W „Szczegółach kursów” pogrupowałem wszystkie tabele opisujące kursy, powiązane instytucje, partnerów i materiały.
Najważniejszą tabelą w tej sekcji jest course
stół. Atrybuty to:
name
– unikalna nazwa kursucommitment
– opis tekstowy prawdopodobnego zaangażowania, m.in. „5 tygodni nauki, 5-7 godzin tygodniowo”description
– opis kursuspecialization_id
– odniesienie do powiązanej specjalizacji, jeśli dotyczy. Kursy mogą być częścią tylko jednej specjalizacji. Niektóre kursy nie są powiązane z żadną specjalizacją, więc ten atrybut nie jest obowiązkowy.min_grade
– minimalna ocena potrzebna do zaliczenia przedmiotu. Zwykle będzie to mierzone w procentach. Na większości kursów Coursera jest to 70%.course_price
– opłata, jaką zapłacisz za kurs.active
– włącznik/wyłącznik, który wskazuje, czy kurs będzie miał przyszłe sesje. Aktywne kursy będą miały nowe sesje, a nieaktywne nie.
Zauważ, że course
tabela ma nazwę course:Course details
. Dzieje się tak, ponieważ korzystałem z course
tabeli ponownie w innym miejscu, aby model był bardziej przejrzysty. Aby to zrobić, użyłem opcji „Kopiuj” i „Wklej jako skrót” Vertabelo.
Każdy kurs składa się z kilku rozdziałów. Na Coursera uczniowie zwykle mają tydzień na ukończenie każdego rozdziału. Lista wszystkich podrozdziałów lub rozdziałów kursu jest przechowywana w chapter
stół. course_id
atrybut jest odniesieniem do course
stół; chapter_no
to numer porządkowy rozdziału w tym kursie. Te dwa atrybuty razem tworzą klucz alternatywny tabeli. Ostatni atrybut, description
, przechowuje szczegółowy opis każdego rozdziału.
Każdy rozdział składa się z wykładów wideo, lektur, quizów, testów i projektów. Nie będziemy tworzyć osobnych struktur w bazie danych do przechowywania różnych typów materiałów. Zamiast tego będziemy przechowywać linki do tych materiałów. I właśnie tam material
pojawia się tabela. Atrybuty w tej tabeli to:
chapter_id
– odniesienie do odpowiedniego rozdziałumaterial_no
– liczba porządkowa przypisywana różnym materiałom rozdziałów. Wraz zchapter_id
atrybut, ten atrybut tworzy alternatywny (unikalny) klucz tabeli.material_type_id
– jest odniesieniem domaterial_type
stółmandatory
– wartość logiczna, która wskazuje, czy materiał jest wymagany, czy opcjonalny (tj. za dodatkowy kredyt)max_points
– maksymalna liczba punktów, jaką uczeń może osiągnąć po ukończeniu tego materiału. Jeśli nie zostaną przyznane żadne punkty, użyjemy po prostu „0” jako wartości.
material_type
table to słownik wszystkich możliwych rodzajów materiałów. Jedynym atrybutem obok klucza podstawowego jest type_name
i oczywiście musi zawierać tylko unikalne wartości. Niektóre oczekiwane typy materiałów to „wykład wideo” , „czytanie” , „quiz” , „test” , „egzamin końcowy” i „przypisanie projektu” .
on_course
tabela wiąże każdy kurs z wykładowcą (wykładowcami) prowadzącymi ten kurs. Zawiera tylko klucz podstawowy i parę kluczy obcych (lecturer_id
i course_id
). Para kluczy obcych tworzy unikalny klucz dla tabeli.
W ten sam sposób course_created_by
dotyczy kursu ze wszystkimi instytucjami, które były zaangażowane w jego tworzenie.
Specjalizacje
Samodzielne kursy są świetne, ale aby opanować nową umiejętność, potrzebujesz więcej niż jednego kursu. Specjalizacje to krok w tym kierunku. Są to serie kursów, często cztery lub pięć, oraz końcowy projekt, w którym możesz zastosować nabyte umiejętności. Wszystkie tabele związane ze specjalizacją znajdują się w Specialization details
powierzchnia.
specialization
tabela jest centralną tabelą tej sekcji. Dla każdej specjalizacji przechowujemy unikalną name
i description
. specialization_discount
to kwota, jaką student zaoszczędzi, zapisując się na całą specjalizację, a nie na samodzielne kursy. Tak jak poprzednio, active
atrybut to prosty włącznik/wyłącznik, który wskazuje, czy specjalizacja będzie miała przyszłe sesje, czy nie.
Zauważ, że specialization
stół pojawia się również dwukrotnie w naszym modelu. Wewnątrz tego obszaru nosi nazwę specialization:Specialization details
.
on_specialization
i specialization_created_by
tabele mają ten sam cel i działają zgodnie z tą samą logiką, co on_course
i course_created_by
tabele. Oczywiście tym razem zajmą się raczej specjalizacjami niż kursami.
Uczniowie
I wreszcie dochodzimy do sekcji studentów. W Student participation
obszarze, będziemy przechowywać zapisy uczniów, sesji i wyników uczniów.
Każdy kurs i specjalizacja może mieć więcej niż jedną sesję, więc musimy przechowywać, kiedy każdy kurs i specjalizacja się rozpoczyna i kiedy się kończy. W przypadku kursów jest to bardzo proste. Każda nowa sesja to tylko nowa instancja tego samego kursu. Nowa sesja specjalizacyjna to nowa instancja całej specjalizacji i wszystkich jej kursów.
Pamiętaj, że studenci mogą zapisać się na jeden kurs ze specjalizacji lub na wszystkie. course_sessions
i specialization_session
tabele dostarczają nam tych informacji. Oprócz dat zawierają tylko klucze obce do course
i specialization_table
tabele. Data początkowa klucza obcego para tworzy unikalny klucz w obu tabelach.
Sesje kursów mogą być również częścią sesji specjalizacyjnych, więc musimy dodać (nieobowiązkowy) klucz obcy.
status
słownik zawiera listę wszystkich możliwych statusów związanych z wynikami studenta podczas kursu. Kilka możliwych stanów to „wycofane” , „zaliczone” i „nieudane” .
Użyjemy enrolled_course
tabela do przechowywania wszystkich zapisów w dowolnej sesji kursu. Ta tabela zawiera dwa klucze obce, student_id
i course_session_id
i razem tworzą alternatywny (unikalny) klucz dla tabeli. Inne atrybuty w tabeli to:
enrollment_date
– data zapisania się ucznia na ten kursstatus_id
– odniesienie dostatus
słownik; to rejestruje wyniki ucznia na tym kursiestatus_date
– data nadania statusufinal_grade
– ocena (w procentach), jaką uczeń uzyskał z tego kursucertificate_ID
– numer identyfikacyjny certyfikatu, który platforma generuje, gdy student zaliczy kurscertificate_location
– link do dokładnej lokalizacji, w której przechowywany jest certyfikat
enrolled_specialization
tabela ma tę samą logikę, co enrolled_course
stół. Różnica polega na tym, że dotyczy raczej studentów specjalizacji niż kursów.
Użyjemy student_results
stół do przechowywania występów uczniów na określonych materiałach szkoleniowych. Dla każdego materiału (material_id
) i rejestrację każdego ucznia (enrolled_course_id
) możemy mieć więcej niż jedną próbę. Dlatego attempt
atrybut to numer porządkowy próby każdego ucznia. Te trzy atrybuty razem tworzą klucz alternatywny tabeli.
W tej tabeli attempt_link
to lokalizacja każdego wystąpienia testów lub projektów przesłanych przez studentów. Możemy założyć, że dla każdej próby wygenerujemy „nowy” test z losowo wybranymi pytaniami. Jeśli materiał nie wymaga odpowiedzi uczniów, link nie będzie istniał i zapiszemy tutaj wartość NULL.
Wreszcie student_results
tabela przechowuje, gdy uczeń started
i ended
próba i score
osiągnięty. Może również przechowywać wyniki wydajności w nieocenionych projektach, a także rejestrować, które filmy obejrzeli i kiedy, jakie materiały przeczytali itp.
Instytucje
institution
tabela to prosty katalog, który zawiera listę wszystkich instytucji, które stworzyły kursy lub których wykładowcy są zaangażowani w kursy.
Wykładowcy
Moglibyśmy tutaj skorzystać ze znacznie bardziej szczegółowej tabeli, ale przechowywanie imienia i nazwiska każdego wykładowcy, tytułu i nazwy uczelni wystarczy do naszych celów. Nic dziwnego, że wszystko to jest przechowywane w lecturer
tabela.
Uczniowie
Skończę przegląd tabeli z student
stół. Jeszcze raz potrzebujemy tutaj tylko podstawowych atrybutów, które powinny być oczywiste.
Jak możemy ulepszyć ten model?
Model ten obsługuje podstawowe funkcjonalności potrzebne do stworzenia platformy MOOC. Mimo to prawdopodobnie łatwo wymyślisz wiele przydatnych dodatków. Oto kilka, które wymyśliłem:
- Język kursu i napisy do wykładów wideo
- Klasyfikacja maszyn
- Uczniowie sprawdzają i oceniają swoje projekty nawzajem
- Pomoc finansowa
- Opcja, która umożliwia studentom wznowienie kursu po jego opuszczeniu
Warto również wspomnieć, że według Wikipedii „... Serwery baz danych Coursera (działające na RDS) odpowiadają na 10 miliardów zapytań SQL, a Coursera obsługuje około 500 TB ruchu miesięcznie”. To było w 2013 roku. Prawdziwy model bazy danych MOOC może wyglądać tak, jak ten przedstawiony w tym artykule, ale jest dużo więcej do zrobienia w zakresie modelowania i infrastruktury!
W tym artykule starałem się pokazać złożoność modelu stojącego za platformą MOOC. Skupiłem się głównie na Coursera i edX jako moich przykładach. Ten model zawiera 18 stolików, ale tylko rysuje powierzchnię. Zapraszam do komentowania i dzielenia się ulepszeniami, które wdrożyłeś w modelu. Jeśli uważasz, że przegapiłem coś ważnego, daj mi znać!
Lubisz uczyć się online? Wypróbuj LearnSQL.com – interaktywne kursy SQL dostępne w Twojej przeglądarce.