-- Underscorse (like _idnr_) indicates primary keys -- idnr=national identification number (10 digits) Students(_idnr_, name, login, program) Branches(_name_, _program_) Courses(_code_, name, credits, department) LimitedCourses(_code_, seats) code -> Courses.code Classifications(_name_) StudentBranches(_student_, branch, program) student -> Students.idnr (branch, program) -> Branches.(name, program) Classified(_course_, _classification_) course -> courses.code classification -> Classifications.name MandatoryProgram(_course_, _program_) course -> Courses.code MandatoryBranch(_course_, _branch_, _program_) course -> Courses.code (branch, program) -> Branches.(name, program) RecommendedBranch(_course_, _branch_, _program_) course -> Courses.code (branch, program) -> Branches.(name, program) Registered(_student_, _course_) student -> Students.idnr course -> Courses.code Taken(_student_, _course_, grade) student -> Students.idnr course -> Courses.code -- position is either a SERIAL, a TIMESTAMP or the actual position WaitingList(_student_, _course_, position) student -> Students.idnr course -> Limitedcourses.code