How the data fits together

How the data fits together

Timetabler's data model has a small number of entities, and almost everything else is just those entities referencing each other. This page is a plain-language map of how they connect — useful to skim once before you start entering data, so the per-record guides make more sense.

The building blocks

EntityWhat it isSet up on
PeriodA single slot in the week, e.g. "Monday 09:00–10:00" — either a LESSON period (can host a class) or a BREAK period (nothing can be scheduled there).Periods
TeacherA person who can be assigned to teach lessons. Can be linked to a login for the teacher portal.Teachers
RoomA physical space with a capacity and free-form tags (e.g. lab, projector). Optionally belongs to a Building.Rooms
BuildingJust a name, used to group Rooms and to configure a travel penalty between building pairs (optional).Buildings
SubjectA named subject (Mathematics, Chemistry, ...). Deliberately minimal — just a name.Subjects
Class GroupA group of students — a whole class, a Year, or a subgroup (e.g. a language-elective split). Organized as a tree via a parent/child relationship.Classes
DepartmentA named set of teachers plus a set of meeting periods — used to block those teachers from teaching during shared meeting time.Departments
LessonThe actual demand: "this subject, taught by these teacher(s), to these class group(s), this many times a week, for this many periods each time."Lessons

Why Lessons don't get edited "inline"

A Lesson doesn't own a Subject, a Teacher, or a Class Group — it references them, by picking from lists built on the other pages. This is why the setup order in Getting started matters: you can't reference a Teacher that doesn't exist yet.

This also means the same Teacher, Room, or Subject can be reused across as many Lessons as you want without re-entering it — add "Mr. Smith" once on the Teachers page, and every Lesson that needs him just picks him from a dropdown.

Groups, not individual students

Timetabler schedules Class Groups, not individual students. A Class Group can represent a whole class (10A), a whole Year (Year 10, with classes underneath it as children), or a subgroup of a class (10A-French, a child of 10A, for students who take French instead of German). See Class Groups, Years & Subgroups for how the parent/child tree works and what it changes about scheduling.

What a Lesson actually represents

A single Lesson record is one recurring pattern, not one specific meeting. "Math, Mr. Smith, 10A, 5 times a week" is one Lesson; the solver decides which five periods it lands on. If a Lesson lists more than one Class Group, that's not five separate classes each getting their own Math — it's one shared session where all of those groups attend together (see the Creating Lessons article for the distinction between that and creating a separate Lesson per class, which is what most schools actually want for ordinary subject teaching).

Everything else is a constraint on top of this

Once Periods, Teachers, Rooms, Subjects, Classes, and Lessons exist, the rest of the app is about constraining how those Lessons get placed onto Periods: locking a Lesson to a specific slot, marking a Teacher unavailable at certain times, requiring a Room tag, or tuning the soft-constraint weights that shape the quality of the schedule (spread, gaps, room stability, and so on) rather than its bare feasibility. Those are covered in their own section of Help once you've got the core records in place.