Глава 20. Множественные таблицы

При рассмотрении примера с планетами у читателей могло сложиться ложное мнение, что СУБД нужны для обслуживания единственной таблицы. На самом деле типичное использование БД предполагает наличие многих таблиц, причём их записи могут быть связаны.

Чтобы пояснить, какого рода связи между табличными записями имеются в виду, сформулируем конкретную и довольно типичную задачу. В процессе её решения мы познакомимся с несколькими новыми понятиями и конструкциями SQL.

Необходимо спроектировать базу данных для учёта результатов школьников на различных городских предметных олимпиадах.

Нужно хранить персональную информацию о школьниках (фамилию и имя, школу, класс). Можно было бы добавить ещё кое-что (домашний адрес, телефон, адрес электронной почты), однако мы не будем этого делать, чтобы не загромождать примеры. Каждый ученик мог участвовать в одной или нескольких олимпиадах по одному или нескольким предметам.

Не совсем понятно, как разместить в одной таблице кроме персональных данных ученика ещё и список его олимпийских достижений, причём с указанием того, для какого класса была олимпиада, по какому предмету, когда она проводилась, по какой системе оценивались работы.

Но нас никто не вынуждает хранить всё в одной таблице. Сама постановка задачи подсказывает, что учёту подлежат объекты трёх видов: школьники, олимпиады и результаты школьников на олимпиадах. Логично создать три таблицы для хранения этих сведений: pupil, olymp и result.

Чтобы связать данные в этих таблицах (то есть указать, что такой-то результат получен таким-то школьником и на такой-то олимпиаде) предлагается следующая техника: заполняя таблицу со школьниками, будем добавлять в неё дополнительное поле — персональный номер. Точно так же поступим при заполнении таблицы с олимпиадами. И тогда в таблице с результатами достаточно будет разместить, помимо самого результата, эти два номера в качестве ссылки на конкретного школьника и на ту олимпиаду, на которой этот результат получен. Имеются специальные средства, которые облегчают работу с персональными номерами. Об этих средствах речь пойдёт в Глава 21, Тип SERIAL.

[Замечание]Замечание

Все имена и прочие персональные данные, которые приводятся в дальнейших примерах — условные. Возможные совпадения этих данных с данными конкретных людей являются случайными.

Информатика-54