На Горох
Информатика, 9 класс

§ 4. Базы данных из нескольких таблиц

"Информатика (в 2-х частях)", Горячев А.В., Островский С.Л., Паволоцкий А.В., Семёнов А.А., Чернышёва Т.Л., Широков Д.В.

Объяснение темы В оглавлении: § 4. Базы данных из нескольких таблиц

Кратко о теме

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

Объяснение темы

Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.

Определения и обозначения

Реляционная база данных — база, в которой сведения организованы в таблицы, связанные между собой. В таблице обычно хранят данные об объектах одного вида, например о книгах или авторах. Связи помогают обращаться к сведениям из разных таблиц как к частям общей базы. Это нужно, чтобы не собирать всё в одну громоздкую таблицу.

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

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

Связь между таблицами — соответствие записей разных таблиц, задаваемое общими значениями ключевых полей. Обычно значение ключа одной таблицы повторяется в поле другой таблицы как внешний ключ. Так записи можно сопоставить без повторения всех их сведений. Связь нужна, чтобы находить относящиеся друг к другу данные.

Как это устроено

Большую базу удобнее разделить на таблицы, потому что в ней часто хранятся сведения о разных видах объектов: например, о книгах и авторах. Если записывать имя автора полностью в каждой строке с книгой, оно будет многократно повторяться. При изменении имени пришлось бы исправлять множество записей, и часть из них могла бы остаться старой. Когда сведения об авторе находятся в одной таблице, их обновляют в одном месте, а в другой таблице оставляют только ссылку на автора.

В отдельной таблице поля задают виды сведений, а записи содержат сведения об отдельных объектах. Например, в таблице «Книги» полями могут быть название и автор, а каждая запись описывает одну книгу. Чтобы не перепутать записи с одинаковыми или похожими названиями, используют ключевое поле. Его значение должно однозначно указывать на конкретную запись, поэтому поиск и изменение данных становятся точнее.

Таблицы связывают, помещая значение ключевого поля одной таблицы во внешнее поле другой. Например, в таблице «Авторы» у каждой записи есть код автора, а в таблице «Книги» для каждой книги указывают код её автора. Совпадающие коды показывают, какие записи относятся друг к другу. Это позволяет хранить подробные данные об авторе отдельно и при этом находить их для каждой книги.

Связь «один ко многим» описывает случай, когда одной записи первой таблицы соответствуют несколько записей второй. Например, один класс может включать многих учеников, но каждый ученик относится к определённому классу. Поэтому код класса достаточно хранить в записи ученика, а сведения о самом классе — отдельно. Такой способ отражает реальные отношения и не заставляет повторять название и прочие данные класса для каждого ученика.

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

Элементы многотабличной базы данных

ЭлементГде находитсяНазначениеПример
Ключевое полеВ таблице, запись которой оно определяетОднозначно различает записиКод книги в таблице «Книги»
Внешний ключВ таблице, которая ссылается на другуюУказывает на связанную записьКод автора в таблице «Книги»
Связь таблицМежду двумя таблицамиПозволяет сопоставить относящиеся друг к другу записиКниги связаны с авторами по коду автора
Запись таблицыВ строке таблицыСодержит сведения об отдельном объектеЗапись об одной книге

Чтобы разобраться в примере, сначала определите, какая таблица описывает объект, а какая содержит ссылку на него. Затем проверьте назначение поля: оно различает запись или связывает её с другой таблицей. Для связи сравнивайте значения ключа и внешнего ключа, а не только подписи столбцов.

Разбор задач

Какое поле таблицы «Авторы» может быть ключевым?

В таблице «Книги» хранятся название и автор, а в таблице «Авторы» — имя автора. Нужно выбрать ключевое поле именно для таблицы авторов. Имя может повторяться у разных людей, поэтому оно не всегда позволяет определить конкретную запись. Подходящий ключ должен отличать каждого автора от остальных.

  1. Определяем назначение ключа: он однозначно указывает на запись об одном авторе.
  2. Проверяем поле «имя»: у двух разных авторов имена могут совпасть, значит, оно не гарантирует уникальность.
  3. Предлагаем отдельное поле «код автора», в котором каждой записи назначают своё значение.

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

Как связать таблицы «Классы» и «Ученики»?

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

  1. Находим ключевое поле в таблице «Классы», например «код класса».
  2. Добавляем в таблицу «Ученики» поле «код класса».
  3. Для каждой записи ученика записываем туда код его класса; это поле становится внешним ключом.

Ответ: в таблицу «Ученики» следует добавить внешний ключ «код класса». По нему можно найти нужную запись о классе для каждого ученика.

Как найти имя клиента для каждого заказа?

В таблице «Заказы» указаны код заказа и код клиента, а в таблице «Клиенты» — код клиента и имя. Код заказа отличает заказы друг от друга, но для поиска имени нужен код клиента. Следует установить, что значение в заказе соответствует коду в записи клиента. Тогда можно перенести имя из найденной записи в результат.

  1. Берём код клиента из записи таблицы «Заказы».
  2. Ищем в таблице «Клиенты» запись с таким же кодом; там код клиента является ключевым полем.
  3. Считываем имя из найденной записи и сопоставляем его с заказом.

Ответ: таблицы сопоставляют по коду клиента. В таблице «Заказы» он выступает внешним ключом, а в таблице «Клиенты» — ключевым полем.

Типичные ошибки

Ошибка — считать поле ключевым только потому, что его название выглядит важным, например «имя» или «название». Так думают, потому что эти сведения хорошо описывают объект, но описание не гарантирует уникальность. Имена и названия могут совпадать, поэтому записи останутся неразличимыми. Проверьте, можно ли найти две разные записи с одинаковым значением предполагаемого ключа.

Ошибка — повторять подробные сведения об одном объекте во многих таблицах или строках. Кажется, что так всё нужное будет под рукой, но при изменении придётся исправлять каждую копию. Если одну пропустить, в базе появятся разные версии одних сведений. Проверьте, не хранится ли одно и то же описание многократно там, где достаточно ссылки на отдельную запись.

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

Ошибка — связывать таблицы только по похожим названиям полей. Одинаковые подписи не гарантируют, что значения обозначают один и тот же объект. Например, разные таблицы могут содержать поле «код», но кодировать в нём разные сущности. Проверьте смысл значений и убедитесь, что внешний ключ соответствует ключу нужной таблицы.

Связь с другими темами

Для работы с несколькими таблицами сначала нужно понимать устройство одной таблицы: поле задаёт вид данных, а запись описывает отдельный объект. Это помогает не смешивать свойства объекта со ссылками на другие объекты. Затем полезно уметь замечать повторяющиеся сведения и определять, к какому объекту они относятся. Именно так решают, какие данные стоит вынести в отдельную таблицу.

Многотабличная организация применяется при создании баз данных и запросов. Запрос может объединить сведения из связанных таблиц, чтобы получить нужный результат, например заказ вместе с именем клиента. Для этого необходимо правильно задать ключевые и внешние поля и сопоставлять их значения. Без понимания связей трудно получить точные данные из нескольких источников.

Что запомнить

  • Многотабличная база хранит сведения об отдельных объектах в разных таблицах.
  • Ключевое поле однозначно определяет запись.
  • Внешний ключ указывает на запись в другой таблице.
  • Связи таблиц устанавливают по совпадающим значениям ключевых полей.
  • Разделение данных по таблицам уменьшает дублирование.
  • Связи позволяют получать вместе сведения, хранящиеся в разных таблицах.

Частые вопросы по теме

Зачем разбивать базу данных на несколько таблиц?

Так проще хранить сведения о разных объектах отдельно и не повторять подробные данные в каждой записи. Если информация меняется, её достаточно обновить в одном месте, поэтому меньше риск получить противоречия.

Может ли в таблице быть несколько записей с одинаковым значением ключевого поля?

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

Чем внешний ключ отличается от ключевого поля?

Ключевое поле определяет запись в своей таблице. Внешний ключ хранит значение ключевого поля другой таблицы и помогает найти соответствующую запись там.

Как понять, какие таблицы нужно связать?

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

Можно ли получить один результат из сведений, хранящихся в разных таблицах?

Да. Для этого сопоставляют записи по общим значениям ключевого и внешнего ключа, а затем берут нужные поля из обеих таблиц. Так, к заказу можно добавить имя клиента.

Спросить по теме параграфа

§ 4. Базы данных из нескольких таблиц

Учебник

Оглавление →
Предмет
Информатика
Класс
9 класс
Учебник
"Информатика (в 2-х частях)", Горячев А.В., Островский С.Л., Паволоцкий А.В., Семёнов А.А., Чернышёва Т.Л., Широков Д.В.