Program(_name_, abbreviation) Department(_name_, abbreviation) UNIQUE abbreviation Hosts(_department_, _program_) department -> Department.name program -> Program.name Student(_ssn_, name, login, program) program -> Program.name UNIQUE login UNIQUE (ssn, program) Branch(_name_, _program_) program -> Program.name BelongsTo(_student_, branch, program) student -> Student.ssn (student, program) -> Student.(ssn, program) (branch, program) -> Branch.(name, program) Course(_code_, name, credits, department) department -> Department.name Prerequisite(_course_, _prerequisite_) course -> Course.code prerequisite -> Course.code Classification(_name_) Classified(_course_, _classification_) course -> Course.code classification -> Classification.name MandatoryProgram(_course_, _program_) course -> Course.code program -> Program.name MandatoryBranch(_course_, _branch_, _program_) course -> Course.code (branch, program) -> Branch.(name, program) RecommendedBranch(_course_, _branch_, _program_) course -> Course.code (branch, program) -> Branch.(name, program) Registered(_student_, _course_) student -> Student.ssn course -> Course.code Taken(_student_, _course_, grade) student -> Student.ssn course -> Course.code LimitedCourse(_code_, seats) code -> Course.code WaitingList(_student_, _course_, position) student -> Student.ssn course -> LimitedCourse.code UNIQUE (position, course)