Реляционные базы данных для ЕГЭ: теория, примеры, разбор заданий
Реляционные базы данных — одна из ключевых тем в ЕГЭ по информатике. Она встречается как в первой части (задания на теорию), так и во второй (задачи на проектирование и запросы). Без чёткого понимания структуры таблиц, первичных и внешних ключей, а также типов связей невозможно решить эти задания на высокий балл.
В этом материале мы разберём основы реляционной модели, типы связей между таблицами и научимся решать реальные задачи из ЕГЭ. Вы узнаете, как определить первичный ключ, как связать таблицы и как не запутаться в отношениях 1:1, 1:N и N:M.
Материал рассчитан на учеников 10-11 классов, которые готовятся к экзамену. Мы не будем отвлекаться на лишнюю теорию — только то, что нужно для решения задач.
Без карты, без кредитки. Выбери персонажа — учи голосом, побеждай в баттлах.
Основы реляционных БД: таблицы, поля, записи, ключи
Реляционная база данных — это набор связанных таблиц. Таблица состоит из полей (столбцов) и записей (строк). Каждое поле имеет имя и тип данных (число, текст, дата и т.д.). Запись — это один набор значений полей.
Первичный ключ — это поле или набор полей, однозначно идентифицирующий каждую запись в таблице. Значения первичного ключа должны быть уникальными и не могут быть NULL. Чаще всего в качестве первичного ключа используют искусственный идентификатор (ID).
Внешний ключ — это поле в таблице, которое ссылается на первичный ключ другой таблицы. Он обеспечивает связь между таблицами и поддерживает целостность данных.
Пример: таблица «Ученики» с первичным ключом id_ученика. Таблица «Оценки» содержит внешний ключ id_ученика, который ссылается на id_ученика в таблице «Ученики».
Дана таблица «Студенты»: id_студента (первичный ключ), ФИО, группа. Таблица «Экзамены»: id_экзамена (первичный ключ), id_студента (внешний ключ), предмет, балл. Какое поле является первичным ключом в таблице «Экзамены»? Обоснуйте.
Первичный ключ таблицы «Экзамены» — id_экзамена. Он уникален для каждого экзамена. Поле id_студента не может быть первичным ключом, так как один студент может сдавать несколько экзаменов (значения id_студента не уникальны). Внешний ключ id_студента связывает таблицы.
Типы связей между таблицами: 1:1, 1:N, N:M
Связи между таблицами отражают отношения между сущностями. Различают три основных типа:
1. Один к одному (1:1). Каждой записи в первой таблице соответствует не более одной записи во второй, и наоборот. Пример: таблица «Паспорт» и таблица «Гражданин» — у каждого гражданина один паспорт, и каждый паспорт принадлежит одному гражданину. Реализуется через внешний ключ с уникальным ограничением в одной из таблиц.
2. Один ко многим (1:N). Каждой записи в первой таблице соответствует несколько записей во второй, но каждая запись второй таблицы связана только с одной записью первой. Пример: таблица «Категория товаров» и таблица «Товары» — одна категория может содержать много товаров, но каждый товар относится к одной категории. Реализуется через внешний ключ в таблице «многие».
3. Многие ко многим (N:M). Каждой записи в первой таблице соответствует несколько записей во второй, и наоборот. Пример: таблица «Студенты» и таблица «Курсы» — студент может посещать много курсов, курс могут посещать много студентов. Для реализации требуется промежуточная таблица, содержащая внешние ключи на обе таблицы.
В базе данных интернет-магазина есть таблицы «Заказы» (id_заказа, дата, id_клиента) и «Товары» (id_товара, название, цена). Один заказ может содержать несколько товаров, и один товар может быть в нескольких заказах. Какую связь нужно организовать и как?
Связь «многие ко многим» (N:M). Необходимо создать промежуточную таблицу, например, «Состав заказа» с полями id_заказа (внешний ключ к таблице «Заказы») и id_товара (внешний ключ к таблице «Товары»). Также можно добавить поле количество. Первичным ключом будет пара (id_заказа, id_товара).
Разбор задания ЕГЭ: проектирование реляционной БД
Рассмотрим типовое задание из ЕГЭ, где требуется спроектировать структуру базы данных. Обычно даётся описание предметной области, и нужно определить таблицы, поля, ключи и связи.
Алгоритм решения:
1. Выделить сущности (объекты) предметной области.
2. Для каждой сущности определить её атрибуты (поля).
3. Назначить первичный ключ для каждой таблицы.
4. Определить связи между сущностями и спроектировать внешние ключи.
5. Если связь N:M — создать промежуточную таблицу.
Необходимо спроектировать БД для учёта книг в библиотеке. Известно: у каждой книги есть ISBN, название, год издания, автор (один или несколько), жанр (один или несколько). Автор имеет ФИО, дату рождения. Читатель имеет номер читательского билета, ФИО, телефон. Один читатель может взять несколько книг, одна книга может быть взята разными читателями (но не одновременно). Также нужно хранить дату выдачи и дату возврата. Спроектируйте схему БД.
Шаг 1. Выделяем сущности: Книги, Авторы, Читатели, Выдача. Также необходимы промежуточные таблицы для связей N:M: Книги_Авторы (для многих авторов), Книги_Жанры (для многих жанров).
Шаг 2. Определяем поля:
- Книги: ISBN (первичный ключ), название, год_издания.
- Авторы: id_автора (первичный ключ), ФИО, дата_рождения.
- Книги_Авторы: id_книги (внешний ключ к Книги.ISBN), id_автора (внешний ключ к Авторы.id_автора). Первичный ключ — пара (id_книги, id_автора).
- Жанры: id_жанра (первичный ключ), название_жанра.
- Книги_Жанры: id_книги (внешний ключ), id_жанра (внешний ключ). Первичный ключ — пара (id_книги, id_жанра).
- Читатели: id_читателя (первичный ключ), ФИО, телефон.
- Выдача: id_выдачи (первичный ключ), id_книги (внешний ключ), id_читателя (внешний ключ), дата_выдачи, дата_возврата (может быть NULL, если книга ещё не возвращена).
Шаг 3. Связи: Книги и Авторы — многие ко многим (через Книги_Авторы). Книги и Жанры — многие ко многим (через Книги_Жанры). Читатели и Выдача — один ко многим (один читатель может иметь несколько выдач). Книги и Выдача — один ко многим (одна книга может быть выдана много раз, но не одновременно).
Разбор задания ЕГЭ: запросы к реляционной БД
В ЕГЭ также встречаются задания на составление SQL-запросов (или их аналогов) для выборки данных. Обычно требуется написать запрос на русском языке или выбрать правильный вариант. Рассмотрим пример.
Имеются таблицы: Ученики (id_ученика, ФИО, класс), Оценки (id_оценки, id_ученика, предмет, балл). Выведите список учеников, получивших хотя бы одну оценку 5 по математике.
Шаг 1. Выбираем записи из таблицы Оценки, где предмет = 'математика' и балл = 5.
Шаг 2. Получаем id_ученика из этих записей.
Шаг 3. Выбираем из таблицы Ученики записи, где id_ученика входит в полученный список.
Шаг 4. Выводим ФИО.
На русском языке: Выбрать ФИО из Ученики, где id_ученика в (выбрать id_ученика из Оценки где предмет = 'математика' и балл = 5).
Часто задаваемые вопросы о реляционных БД в ЕГЭ
Собрали вопросы, которые чаще всего возникают у школьников и родителей при подготовке к ЕГЭ по этой теме.
Частые вопросы
Без карты, без кредитки. Выбери персонажа — учи голосом, побеждай в баттлах.