Тема 9

Реляционная база данных

Что проверяют по спецификации:

База данных и СУБДМодели данных: иерархическая, сетевая, реляционнаяТаблица: поля и записиТипы данных полейПервичный и внешний ключи, индексыСвязи между таблицами и нормализацияПоиск, сортировка и фильтрация

Суть за минуту

База данных (БД) — это организованное хранилище данных о какой-то предметной области: учениках школы, книгах библиотеки, клиентах банка. Работают с ней через систему управления базами данных (СУБД) — Access, MySQL, PostgreSQL, SQLite. По способу связи данных различают иерархическую (дерево), сетевую (граф) и реляционную (таблицы) модели; на ЕНТ речь почти всегда о реляционной. Реляционная БД состоит из таблиц: столбцы — поля, строки — записи; у каждой таблицы есть первичный ключ, а связи между таблицами (1:1, 1:М, М:М) задаются внешними ключами. Главные задачи ЕНТ по теме: назвать элементы таблицы, выбрать первичный ключ и тип данных, определить тип связи и посчитать, сколько записей останется после сортировки или фильтра с условиями AND, OR, NOT.

Объясняем просто

Реляционная база данных — как школьный журнал: каждая графа — поле, каждая строка с учеником — запись, а номер ученика по списку — ключ, по которому его нельзя спутать с тёзкой.

Таблица — основа

Все данные лежат в таблицах. Столбец «Город» — это поле, строка «Айгерим, 11, Астана, 128» — запись.

Ключ — паспорт записи

Первичный ключ (например, id) уникален у каждой записи. Две Айгерим в одной школе — не проблема, если у них разные id.

Связи — ссылки между таблицами

Чтобы не писать имя ученика в каждой оценке, в таблице оценок хранят только его id. Это внешний ключ — «ссылка» на запись в другой таблице.

Фильтр — сито

Условие город = Астана И балл > 100 пропускает только те записи, для которых оба условия истинны; с ИЛИ достаточно одного.

Понятия и термины

База данных
организованная совокупность структурированных данных об объектах определённой предметной области, хранящаяся во внешней памяти компьютера.
СУБД
система управления базами данных — программное обеспечение, которое позволяет создавать базы данных, обновлять и дополнять информацию, обеспечивать гибкий доступ к информации (Access, MySQL, PostgreSQL, SQLite).
Реляционная база данных
база данных, состоящая из таблиц, организованных как упорядоченные наборы данных, связанные определёнными отношениями (от англ. relation — отношение).
Иерархическая база данных
база данных, построенная по принципу иерархии (дерева): один объект главный, остальные подчинённые; у каждого элемента ровно один родитель.
Сетевая база данных
база данных, в которой каждый элемент может быть связан с любым количеством других элементов; у записи может быть несколько «родителей».
Поле
столбец таблицы с известным свойством (атрибутом) объекта; у поля есть имя и тип данных.
Запись
строка таблицы, содержащая набор значений свойств одного объекта, размещённых в полях базы данных.
Первичный ключ
поле (или набор полей), значение которого однозначно определяет запись: оно уникально и не может быть пустым.
Внешний ключ
поле таблицы, значения которого совпадают со значениями первичного ключа другой таблицы; с его помощью таблицы связываются.
Индекс
служебная упорядоченная структура для поля, ускоряющая поиск и сортировку записей (как алфавитный указатель в конце книги).

Разбор темы

База данных и СУБД 9–10 класс

База данных — это не просто файл с данными, а структурированное хранилище: все записи устроены одинаково, их можно быстро искать, сортировать, отбирать по условиям. Примеры: электронный журнал Kundelik, база ЕНТ с результатами, eGov, каталог интернет-магазина, база клиентов банка.

СУБД — программа, которая создаёт БД, хранит её, следит за целостностью данных и выполняет запросы пользователей. Настольные СУБД: MS Access, LibreOffice Base. Серверные: MySQL, PostgreSQL, Oracle, MS SQL Server. Встраиваемая: SQLite (в телефонах и браузерах). Язык запросов почти всех реляционных СУБД — SQL.

Основные объекты СУБД (на примере Access): таблицы (хранят данные), запросы (отбирают и обрабатывают данные), формы (удобный ввод и просмотр данных), отчёты (оформленный вывод на печать). Простую однотабличную БД можно вести и в электронной таблице: строки — записи, столбцы — поля, первая строка — имена полей (цель 9.2.2.2).

Модели данных: иерархическая, сетевая, реляционная 10 класс

Иерархическая модель — дерево: один корневой элемент, у каждого элемента ровно один «родитель» и сколько угодно «потомков». Примеры: файловая система (диск → папки → файлы), структура школы (школа → классы → ученики), классификация животных. Минус: трудно описать объект, который подчиняется сразу двум «родителям».

Сетевая модель — граф: каждый элемент может быть связан с любым числом других. Пример: связи между учениками и кружками (ученик ходит в несколько кружков, в кружке много учеников), сайты со ссылками. Гибко, но сложно в обработке.

Реляционная модель (Э. Кодд, 1970) — данные хранятся в двумерных таблицах-отношениях, связи задаются общими значениями полей (ключами). Это самая распространённая модель. Существуют и нереляционные (NoSQL) базы: документные, «ключ–значение», графовые — их используют для больших данных (Big Data).

Таблица: поля и записи 9–10 класс

Поле — столбец, описывает одно свойство объекта (имя, класс, город, балл). Запись — строка, описывает один объект целиком. На пересечении — значение (ячейка). Наша учебная таблица students имеет 5 полей (id, name, grade, city, score) и 8 записей.

Свойства реляционной таблицы: имена полей в таблице не повторяются; все значения одного поля одного типа; в ячейке одно (атомарное) значение; нет двух одинаковых записей; порядок записей и полей не важен — его задают при выводе сортировкой.

Размер таблицы задают как «число записей × число полей»: если в таблице 30 строк и 6 столбцов, в ней 30 записей и 6 полей, всего 180 значений. Добавление ученика — новая запись; добавление свойства «телефон» — новое поле.

Типы данных полей 10 класс

Для каждого поля задаётся тип данных — он определяет, какие значения можно хранить и какие операции с ними допустимы. В SQL (цель 10.3.2.1): INTEGER / INT — целое число; REAL, FLOAT, DECIMAL — дробное (деньги — DECIMAL); TEXT, VARCHAR(n) — строка до n символов, CHAR(n) — строка ровно n символов; DATE, TIME, DATETIME — дата и время; BOOLEAN — логическое (истина/ложь); BLOB — двоичные данные (картинки).

В Access типы называются: Короткий текст (до 255 символов), Длинный текст (MEMO), Числовой, Денежный, Дата/время, Логический (Да/Нет), Счётчик (автоматически увеличивающееся число — удобен для ключа), Поле объекта OLE, Вложение, Гиперссылка.

Как выбирать тип: если с полем считают — число; номер телефона, ИИН, почтовый индекс — текст (не считаем, могут начинаться с нуля и содержать «+»); дата рождения — дата; «сдал/не сдал» — логический; фамилия — текст.

Первичный и внешний ключи, индексы 10 класс

Первичный ключ (PRIMARY KEY) — поле, значения которого уникальны и не пусты, поэтому однозначно определяют запись (цель 10.3.1.3). Хорошие ключи: id-счётчик, ИИН, номер студенческого билета, номер паспорта. Плохие: фамилия, город, класс, балл — они могут повторяться.

Составной ключ — набор из нескольких полей, который уникален только вместе. В таблице enroll(student_id, course_id, mark) ни student_id, ни course_id по отдельности не уникальны, но пара (student_id, course_id) уникальна — один ученик записан на курс один раз.

Внешний ключ (FOREIGN KEY) — поле, которое ссылается на первичный ключ другой таблицы: enroll.student_id → students.id, enroll.course_id → courses.id. СУБД следит за целостностью данных: нельзя поставить оценку несуществующему ученику.

Индекс — дополнительная упорядоченная структура по полю (цель 10.3.1.2). Он ускоряет поиск и сортировку по этому полю, но занимает место и замедляет вставку. По первичному ключу индекс создаётся автоматически.

Связи между таблицами и нормализация 10 класс

Один к одному (1:1): одной записи первой таблицы соответствует не больше одной записи второй. Пример: гражданин — паспорт, ученик — личное дело.

Один ко многим (1:М) — самая частая связь: класс — ученики, учитель — курсы, страна — города. Внешний ключ ставится на стороне «многих»: в таблице учеников хранится номер класса.

Многие ко многим (М:М): ученик посещает много курсов, на курсе много учеников. Напрямую М:М в реляционной БД не хранится — создают третью таблицу-связку (у нас enroll), и связь распадается на две связи 1:М: students 1:М enroll и courses 1:М enroll.

Нормализация — разбиение данных на таблицы так, чтобы не было избыточности (повторов) и аномалий при изменении. 1НФ: в каждой ячейке одно значение, нет повторяющихся групп. 2НФ: каждое неключевое поле зависит от всего ключа. 3НФ: неключевые поля не зависят друг от друга. Признак плохой структуры: одно и то же (например, фамилия учителя) записано в десятках строк, и при смене учителя приходится исправлять всё.

Поиск, сортировка и фильтрация 9–10 класс

Сортировка — упорядочивание записей по одному или нескольким полям: по возрастанию (А→Я, 0→9, ранние даты сначала) или по убыванию. При сортировке по двум полям второе поле упорядочивает записи только внутри групп с одинаковым значением первого поля. Сортировка не меняет количество записей.

Фильтрация (отбор) — показ только записей, удовлетворяющих условию; остальные скрываются, но не удаляются. В электронной таблице это автофильтр, в СУБД — фильтр или запрос (цель 9.2.2.3).

Условия строятся из операций сравнения =, <> (не равно), >, <, >=, <= и логических операций: AND (И — должны выполняться оба условия, отбор сужается), OR (ИЛИ — достаточно одного, отбор расширяется), NOT (НЕ — отрицание). Приоритет: сначала NOT, потом AND, потом OR; скобки меняют порядок.

Пример на таблице students: grade = 11 AND score > 100 → 2 записи (Айгерим, Мадина); city = 'Алматы' OR score >= 120 → 4 записи; NOT city = 'Астана' → 5 записей. Строки сравниваются посимвольно по алфавиту: 'Дана' < 'Ерлан'.

SELECT name, score FROM students
WHERE grade = 11 AND score > 100
ORDER BY score DESC;

Примеры задач с решением

Задача 1Сколько записей таблицы students удовлетворяют условию grade = 10 AND score > 100?
  1. Ученики 10 класса: Дана (112), Аружан (135), Тимур (66), Санжар (91).
  2. Из них больше 100: Дана и Аружан.
Ответ 2 записи
Задача 2Сколько записей отберёт условие grade = 11 OR city = 'Алматы'?
  1. 11 класс: Айгерим, Нурлан, Ерлан, Мадина — 4.
  2. Из Алматы: Нурлан, Аружан, Санжар — 3.
  3. Нурлан попал в оба списка, считаем его один раз: 4 + 3 − 1.
Ответ 6 записей
Задача 3Таблицу students отсортировали по полю grade по возрастанию, а при равных grade — по score по убыванию. Чья запись окажется третьей?
  1. Сначала все 10-классники, потом 11-классники.
  2. 10 класс по убыванию балла: Аружан 135, Дана 112, Санжар 91, Тимур 66.
  3. Третья запись — Санжар.
Ответ Санжар
Задача 4Какое поле таблицы students(id, name, grade, city, score) можно выбрать первичным ключом?
  1. Ключ должен быть уникален и не пуст.
  2. name может повторяться (две Айгерим), grade и city повторяются уже в наших данных, score тоже может совпасть.
  3. id задаётся уникальным для каждого ученика.
Ответ id
Задача 5Какой тип связи между таблицами students и courses и как она реализована в учебной БД?
  1. Один ученик может записаться на несколько курсов, на одном курсе — несколько учеников: связь «многие ко многим».
  2. Её реализует таблица-связка enroll(student_id, course_id, mark).
  3. students → enroll: 1:М (по student_id); courses → enroll: 1:М (по course_id).
Ответ М:М через таблицу enroll
Задача 6Сколько записей отберёт условие city = 'Астана' OR city = 'Шымкент' AND score < 110 (без скобок)?
  1. AND выполняется раньше OR: условие читается как city = 'Астана' OR (city = 'Шымкент' AND score < 110).
  2. Из Астаны все: Айгерим, Ерлан, Тимур — 3.
  3. Из Шымкента с баллом меньше 110: Мадина (103); Дана (112) не проходит. Итого 3 + 1.
Ответ 4 записи

Сложные задачи: шаг за шагом

Задача 1Используя таблицы students и enroll, определите, сколько учеников из Астаны получили хотя бы одну пятёрку.

Идея: Сначала по первой таблице находим id нужных учеников, затем по внешнему ключу ищем их записи во второй таблице.

  1. Ученики из Астаны
    students: id 1 (Айгерим), 4 (Ерлан), 6 (Тимур).
  2. Их оценки в enroll
    student_id = 1: оценки 5 и 5. student_id = 4: 3 и 4. student_id = 6: 3.
  3. Отбор
    Пятёрка есть только у ученика с id = 1.
  4. Тот же отбор на SQL
    SELECT DISTINCT students.name FROM students
    JOIN enroll ON students.id = enroll.student_id
    WHERE students.city = 'Астана' AND enroll.mark = 5;
Ответ 1 ученик (Айгерим)
Задача 2Сравните условия A: (city = 'Астана' OR city = 'Шымкент') AND score < 110 и B: city = 'Астана' OR city = 'Шымкент' AND score < 110. Сколько записей отберёт каждое и почему результаты разные?

Идея: Приоритет AND выше, чем у OR; скобки меняют порядок вычисления.

  1. Условие A
    Сначала город: Астана или Шымкент — Айгерим 128, Ерлан 84, Тимур 66, Дана 112, Мадина 103.
    Затем score < 110: Ерлан, Тимур, Мадина — 3 записи.
  2. Условие B
    Читается как city = 'Астана' OR (city = 'Шымкент' AND score < 110): все из Астаны (3) плюс Мадина — 4 записи.
  3. Вывод
    Разница — Айгерим: в A её отсекает условие на балл, в B она проходит по первой части OR.
Ответ A — 3 записи, B — 4 записи

Частые ловушки на ЕНТ

  • Путают поле и запись: поле — столбец (свойство), запись — строка (объект). «Сколько полей» = число столбцов.
  • Выбирают первичным ключом фамилию, город или балл. Ключ обязан быть уникальным и не пустым — обычно это id, номер документа или ИИН.
  • Забывают, что AND выполняется раньше OR. Без скобок A OR B AND C означает A OR (B AND C).
  • Считают, что сортировка или фильтр удаляют записи. Сортировка меняет только порядок, фильтр временно скрывает записи; удаляет только DELETE.
  • Пытаются связать таблицы «многие ко многим» напрямую. Для М:М нужна третья таблица-связка с двумя внешними ключами.

Запомнить

Таблица = поля (столбцы) × записи (строки); первичный ключ уникален и не пуст; внешний ключ ссылается на ключ другой таблицы; М:М — через таблицу-связку; NOT → AND → OR.

Проверь себя

1. Строка таблицы реляционной базы данных называется
  1. полем
  2. записью
  3. ключом
  4. индексом
Показать ответ

записью Строка — запись (один объект), столбец — поле (одно свойство).

2. Какое поле лучше всего подходит на роль первичного ключа в таблице учеников?
  1. Фамилия
  2. Город
  3. ИИН
  4. Класс
Показать ответ

ИИН ИИН уникален у каждого человека и всегда заполнен; фамилия, город и класс повторяются.

3. Файловая система «диск → папки → файлы» — пример модели данных
  1. реляционной
  2. сетевой
  3. иерархической
  4. табличной
Показать ответ

иерархической У каждой папки и файла ровно один родительский каталог — это дерево, то есть иерархическая модель.

4. Сколько записей таблицы students отберёт условие score > 100 AND city <> 'Алматы'?
  1. 2
  2. 3
  3. 4
  4. 5
Показать ответ

3 score > 100: Айгерим, Дана, Аружан, Мадина. Аружан из Алматы — исключаем. Остаются 3.

5. Как реализуется связь «многие ко многим» в реляционной базе данных?
  1. Одним общим полем в обеих таблицах
  2. С помощью третьей таблицы-связки
  3. Объединением двух таблиц в одну
  4. Индексом по первичному ключу
Показать ответ

С помощью третьей таблицы-связки Таблица-связка (как enroll) содержит два внешних ключа и разбивает М:М на две связи 1:М.

6. Какой тип данных лучше выбрать для поля «Номер телефона»?
  1. Числовой
  2. Текстовый
  3. Логический
  4. Денежный
Показать ответ

Текстовый С номером не выполняют вычислений, он может содержать «+», скобки и ведущие нули — это текст.

Связанные темы

Узнай свой уровень: бесплатная диагностика ЕНТ