utmgdsc / CourseOfAction

Course Manager that uses a script to convert you syllabus PDFs to website component with custom notification to keep you on track to get a 4.0
https://mcsapps.utm.utoronto.ca/coa
4 stars 4 forks source link

Redesign the database #8

Open huonggiangbui opened 2 years ago

huonggiangbui commented 2 years ago

Is your feature request related to a problem? Please describe. Right now, we are structuring the database in the flow of user > course > assessment. This might not be an ideal design for the database (e.g. if we want to query a course, you need to go over each of user data record and find it)

Describe the solution you'd like We probably want to create design a new database system, where we can effectively query (i.e. reduce number of queries) the existing courses from the database. One possible way to do this is to have separate documents/tables for users, courses, and assessments. But you want to take a look at data modelling.

Resources

Additional context Example of how the database is structured now: image

pandyah5 commented 2 years ago

Hi! I am just curious about the new database structure. Can you share an example of how the new DB will be structured?

Thanks in advance 😄

meghrp commented 2 years ago

Hi, I'd like to tackle this issue. I would suggest to use a relational database that has separate tables, users, courses and assessments. Each of these tables are related using a link between common fields in the tables.

huonggiangbui commented 2 years ago

Hi, I'd like to tackle this issue. I would suggest to use a relational database that has separate tables, users, courses and assessments. Each of these tables are related using a link between common fields in the tables.

thank you! We will have a discussion on Sunday, please follow the discord channel for more details (and it would be great if you can join)!

pandyah5 commented 2 years ago

I believe we currently use Mongo DB which is a non-relational DB. However, we can still model the database as follows:

One collection for courses that contains common information like course codes, availability, semesters offered in etc. Each course in this collection will have a seperate ID (course code could serve as an ID because I guess its unique too).

Now each user can access the pool of common courses using an ID and the specific information like their grades/assignments etc can be stored in their private document. From a privacy point of view, this is also preferable because we can restrict access to the student specific data that stores sensitive personal information.

At the same time we can be a bit loose about the public pool of courses as it has no sensitive information.

This is very similar to a relational database, but follows the non-relational document structure of Mongo DB