Booking term TermId begin UTCTime end UTCTime weekly Bool exceptions [Day] -- only if weekly, begin in exception bookedFor RoomForId room RoomId BookingEdit user UserId time UTCTime boooking BookingId Room name Text capacity Int Maybe building Text Maybe -- BookingRoom -- subject RoomForId -- room RoomId -- booking BookingId -- UniqueRoomCourse subject room booking +RoomFor course CourseId tutorial TutorialId exam ExamId -- data RoomFor = RoomForCourseSum CourseId | RoomForTutorialSum TutorialId ...