SCHEMA UniversitySystem; TYPE level = INTEGER; WHERE level_min: SELF>= 1; level_max: SELF<= 3; END_TYPE; TYPE credits = INTEGER; WHERE credits: SELF>= 0; END_TYPE; ENTITY university; university_name: STRING; degrees: LIST[10:10] OF degree_programme; students: SET[0:?] OF student; END_ENTITY; ENTITY degree_programme; degree_title: STRING; compulsory_course_modules: SET[1:?] OF course_module; optional_course_modules: SET[0:?] OF course_module; UNIQUE unique_title: degree_title; END_ENTITY; ENTITY course_module; course_title: STRING; credits: INTEGER; course_level: level; students: SET[0:?] OF student; UNIQUE unique_title: course_title; END_ENTITY; ENTITY student; year: level; surname: STRING; forename: STRING; belongs_to: university; studies: degree_programme; takes: SET[1:?] OF course_module; INVERSE course_module_level : course_module FOR course_level; WHERE valid: year = course_module_level; END_ENTITY; END_SCHEMA;