Short overview of data stored by the application and in particular how the various types relate to one another. Structured in a way slightly different from Rasbeb 1.
Teacher Has name and e-mail address. Has an encrypted password. Belongs to a single school.
School Has name and address. Contains classes grouped in years. (Note that classes are registered with a school, and not with one of its teachers.)
Years Have a name (e.g. ‘2023-2024’) Group classes in the same school that correspond to the same school year. They are essentially used only as a means of grouping classes hierarchically. Years are
Pupil Has name and gender (M/F/X). Has a password generated by the system. Belongs to a class. In most cases, a pupil will belong to a single class, but that is not enforced. (Note that pupils are usually registered anew each year.)
Question Represents a Bebras question or task. Has an international Bebras ID and a question type (multiple choice with n options, open text, open integer, interactive, …). All other data associated with a question is multilingual and represented by a set of translated questions, one for each supported language.
Translated question Has a language, a title (in that language), a correct answer (for that language), and two magic numbers that are used as part of a url to retrieve the question page and the feedback page (for that language). A translated question belongs to exactly one question.
Question set A set of questions, with for each question its level of difficulty (easy, medium, hard). Associated to a single age group.
Contest A named group of question sets for different age groups. Every contest has a type
and a status
In addition, the total duration is stored and per language a title for the contest.
Organisers need to perform a ‘sanity check’ before opening a competition: for each language for which there is a title, for each question in the question sets for any of the age groups, are there question (and feedback) pages available in that language?
Age groups Has a name and a (short) description. Age groups are only used to distinguish between different question sets within the same competition. The application does not assign pupils directly to age groups, but indirectly by registering them to a local event. There are nominally 6 age groups, 6-8yo, 8-10y0, …, 16-18yo, but this is not enforced. Organisers can create different/additional age groups.
Local event Is associated to a single contest. Can be inactive, open or closed. (Starts off as inactive.) Feedback for a competition can only be made available when the local event is closed.
A local event has a name (for each language?), displayed on the landing page of the pupils.
Registrations Pupils must be registered with a local event to be able to take part in the corresponding contest. Although the user interface allows registering all pupils of a given class at the same time, registrations are still stored individually.
Participation Of a pupil in a competition. Stores the date and time the competition ends for that pupil and whether the pupil already finished their participation. For each question in the competition participation details are stored.
Also stores the local event that enabled this participation. A pupil can participate only once in a given competition, even if they are registered for more than one local event.
Participation detail Per participation and per question of the corresponding competition. Stores the last answer given to that particular question.
Note The language which was used for the contest should be stored in the participation, or in the participation detail, depending on whether language switches are allowed in mid-contest.