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