Дадим новой базе данных имя olymp. Разместим в ней три таблицы pupil, olymp и result.
В таблице pupil было бы неразумно хранить
номер класса — каждый год номер увеличивается при переходе в следующий класс.
Можно было бы увеличивать класс каждый год запросом UPDATE
:
UPDATE pupil SET class=class+1;
Однако в этом случае пришлось бы помнить о необходимости такого обновления каждый год первого сентября. И ни в коем случае не сделать такой запрос дважды в год. Мы поступим иначе: заведём в таблице pupil поле graduate, в котором будет храниться год окончания школы. Тогда можно будет вычислить, в каком классе ученик учился или будет учиться в таком-то году или в настоящее время. Точно так же разумно хранить дату рождения человека, а его возраст определять в результате вычисления. Как это делается, мы расскажем в ???.
Заметим, что олимпиад по одному и тому же предмету может быть много. В каждой
записи, посвящённой олимпиаде, хранить название предмета (русский
язык, математика, физика, химия, информатика) было бы расточительно. Лучше
создать дополнительную таблицу subject
с названиями предметов, и связать с ней таблицу с олимпиадами. Для связи
предлагаем кодировать предметы с помощью одной латинской буквы
(R
=русский язык и литература,
M
=математика, P
=физика,
C
=химия, I
=информатика).
Теперь определимся с таблицами и их полями: