Перейти к содержанию

A.3 · Базы данных

International Baccalaureate · IB Diploma · Computer Science · HL · Тема 3

3.1

Область применения и требования

Поддерживаемая фокусная точка HL. Первая оценка 2027 целевой показатель; официальный PDF возвращает 403; ранее приобретенный краткий план является финальной оценкой 2026. Оставшиеся руководство, оценка и практические требования сохраняют свои зарегистрированные удержания.

Предварительные требования: прочитайте указанные количества и единицы измерения, используйте арифметику и нижеприведённые условия модели. Каждый урок осваивает собственный метод перед независимым переносом.

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

3.2

Реляционные базы данных: ключ и связь

Что могло бы объяснить это наблюдение?

  • Дублирование адреса пользователя в каждом заказе может привести к конфликтам записей при изменении адреса.
  • Начните с гипотезы. Укажите величины или признаки, которые вы будете сравнивать, затем определите, какие доказательства могут различить два объяснения.

Постройте модель

  • Реляционная таблица содержит строки и атрибуты. Первичный ключ идентифицирует строку; внешний ключ связывается с ссылочным ключом в другой таблице. Нормализация может уменьшить избегаемое дублирование и аномалии обновления, сохраняя значимые связи.
  • первичный ключ: Множество атрибутов, однозначно идентифицирующее строку таблицы; внешний ключ: Множество атрибутов, ссылающееся на ключ в другой таблице.
Реляционные базы данных: ключ и связь: оригинальная схема разобранного примера

Выберите доказательства для проверки гипотезы

  • Объединение (join) объединяет строки согласно заданному условию. Количество результатов зависит от кардинальности связей и фильтров. Ограничение внешнего ключа обеспечивает соблюдение правила связи; оно автоматически не шифрует персональные данные.
  • Разработайте небольшой синтетический набор данных «пользователь-заказ» без реальных персональных данных. Объявите ключи, протестируйте вставки с дублированием и отсутствующими ссылками, затем проверьте результат запроса по вручную рассчитанной ожидаемой таблице.

Работайте с известными величинами

  • Укажите известные значения и их единицы измерения. Выберите соотношение, предположения которого подходят к данному случаю, затем преобразуйте формулу перед подстановкой.
  • Известно: у четырёх клиентов соответственно 2, 0, 3 и 1 заказов. Внутреннее соединение (inner join) таблицы «клиенты» к таблице «заказы» вернёт 2 + 0 + 3 + 1 = 6 строк. Левое соединение (left join) также сохранит клиента без заказа как строку с пустыми значениями (null-matched), что даст 7 строк здесь.

Пример:

У трёх клиентов есть 1, 3 и 2 заказов. Сколько строк вернёт внутреннее соединение таблиц «клиенты» и «заказы»? Используйте ту же последовательность: известные данные → модель → соотношение → подстановка → единицы и интерпретация.


Проверьте вывод и его границы применимости

  • Первичный ключ не обязательно должен быть именем человека. Объединение — это не простая конкатенация таблиц. Используйте параметризованные запросы для недоверенных входных данных вместо формирования SQL из сырых строк.
  • Вернитесь к первоначальному наблюдению. Объясните, что подтверждает результат, при каких условиях он верен и каким образом можно проверить конкурирующее объяснение.

Предупреждение:

Внешний ключ автоматически шифрует каждую строку. Это утверждение неверно: первичный ключ не обязательно должен быть именем человека. Соединение таблиц — это не простая конкатенация. Для недоверенных входных данных используйте параметризованные запросы вместо формирования SQL из сырых строк.

Ключевые моменты:

Реляционные базы данных: ключ и связь: соединение объединяет строки согласно заданному условию. Количество результатов зависит от кардинальности связи и фильтров. Ограничение внешнего ключа обеспечивает соблюдение правила связи; оно не шифрует персональные данные автоматически.

Работоспособная трассировка и границы

import sqlite3
db = sqlite3.connect(":memory:")
db.executescript("""CREATE TABLE c(id INTEGER PRIMARY KEY);
CREATE TABLE o(id INTEGER PRIMARY KEY, cid INTEGER);
INSERT INTO c VALUES(1),(2),(3);
INSERT INTO o VALUES(10,1),(11,1),(12,3);""")
for kind in ["INNER", "LEFT"]:
    sql = f"SELECT COUNT(*),COUNT(o.id) FROM c {kind} JOIN o ON c.id=o.cid"
    print(kind, db.execute(sql).fetchone())
db.close()

Ожидаемый вывод:

INNER (3, 3)
LEFT (4, 3)

Левое соединение (left join) сохраняет клиента 2 с полями заказа null. COUNT(*) включает эту строку, тогда как COUNT(o.id) исключает null. Первичные ключи различают записи; количество клиентов не равно количеству заказов. Интерполированный ключ слова соединения берется из фиксированного внутреннего списка, а не из пользовательского ввода.

English Русский
primary key/ˈpraɪməri kiː/ первичный ключ
foreign key/ˈfɒrən kiː/ внешний ключ

Больше тем в International Baccalaureate · IB Diploma · Computer Science · HL

Войти или создать аккаунт

IGCSE, A-Level & AP