"Информатика (базовый и углублённый уровни) (в 2 частях)", Поляков К.Ю., Еремин Е.А.
Реляционная база данных хранит сведения в связанных таблицах: строки описывают отдельные объекты, а столбцы — их характеристики. Такое представление помогает упорядочить данные, находить нужные сведения и связывать записи из разных таблиц. Главный способ различать записи — первичный ключ: его значения уникальны и не бывают пустыми. Разберём, как устроены таблицы, зачем разделять данные и как выбирать ключи.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Реляционная база данных — набор связанных таблиц, в которых данные представлены строками и столбцами. Например, в базе школы могут быть отдельные таблицы учеников, учителей и кружков. Табличная форма помогает упорядочить сведения и находить связи между ними.
Отношение — таблица с данными об объектах одного типа. Строки соответствуют отдельным объектам, а столбцы — их характеристикам, поэтому такая таблица прямо отражает элементы модели. Например, отношение «Ученики» содержит сведения об учениках, а не одновременно о книгах и заказах.
Атрибут — характеристика объектов, представленная столбцом таблицы. У атрибута есть имя, например «Дата рождения», и тип данных, например дата. Атрибуты позволяют описывать объекты одинаковым набором признаков и правильно обрабатывать значения.
Первичный ключ — атрибут или набор атрибутов, однозначно определяющий каждую строку таблицы. Например, таким атрибутом может быть уникальный код ученика. Ключ нужен, чтобы отличать записи друг от друга и точно указывать на нужный объект при связи таблиц.
Таблица описывает объекты выбранной предметной области, то есть той части реального мира, данные о которой хранятся в базе. Каждой строке соответствует один объект: в таблице «Книги» это одна книга, а в таблице «Ученики» — один ученик. Каждый столбец хранит отдельную характеристику этих объектов, потому что одинаковая структура строк позволяет сравнивать записи и находить нужные данные.
Все значения одного столбца должны относиться к одному атрибуту и иметь согласованный тип данных. Иначе системе трудно понять, как сравнивать, сортировать или обрабатывать значения: например, текст «неизвестно» нельзя надёжно использовать вместо даты рождения. Единый смысл столбца также помогает человеку читать таблицу и не путать значения разных характеристик.
Первичный ключ позволяет различать строки даже тогда, когда многие другие сведения совпадают. Например, у двух учеников могут быть одинаковые фамилии, но разные коды. Значения ключа должны быть уникальными, иначе по ним нельзя выбрать одну запись, и определёнными, потому что пустое значение не указывает на конкретный объект.
Таблицы связывают, используя значения ключей: код записи из одной таблицы указывают в другой, чтобы обозначить нужный объект. Например, в таблице «Заказы» поле «Код покупателя» показывает, кому принадлежит заказ, а собственный «Номер заказа» различает заказы между собой. Первое поле ссылается на запись покупателя, но не становится из-за этого первичным ключом таблицы заказов.
Размещение сведений в нескольких связанных таблицах помогает избежать повторов. Если данные покупателя записывать заново в каждом заказе, при изменении его адреса часть заказов может остаться со старым адресом. Когда адрес хранится в таблице «Покупатели», его достаточно исправить в одном месте, а связь позволяет сопоставлять покупателя с его заказами.
| Элемент модели | Где представлен в таблице | Что описывает | Пример |
|---|---|---|---|
| Отношение | Вся таблица | Набор объектов одного типа и сведений о них | Таблица «Ученики» |
| Атрибут | Столбец | Одну характеристику объектов | «Дата рождения» |
| Запись (кортеж) | Строка | Сведения об одном объекте | Данные об одном ученике |
| Первичный ключ | Один столбец или несколько столбцов | Однозначное различение записей | «Код ученика» |
Чтобы пользоваться таблицей, сначала найдите элемент модели, а затем сопоставьте его с частью обычной таблицы. Строка показывает сведения об одном объекте, столбец — общую для объектов характеристику. Для ключа отдельно проверьте, что он позволяет отличить любую запись от остальных.
В таблице «Книги» есть поля «Название», «Автор», «Год издания» и «ISBN». Нужно определить, что является записью и атрибутами, а также предложить первичный ключ. Ищем поле, которое должно указывать на конкретную книгу, даже если названия совпадают.
Ответ: запись — строка с данными об одной книге; атрибуты — название, автор, год издания и ISBN. Возможный первичный ключ — ISBN при условии, что его значения уникальны и не пусты.
В таблице «Заказы» указаны номер заказа, дата и код покупателя. Требуется выбрать первичный ключ и объяснить связь с таблицей «Покупатели». Разделяем задачу на поиск идентификатора заказа и указателя на владельца заказа.
Ответ: первичный ключ «Заказов» — номер заказа, а связь с «Покупателями» задаётся кодом покупателя. При этом один покупатель может быть указан в нескольких заказах.
Даны таблицы «Ученики» и «Кружки», причём один ученик может посещать несколько кружков. Если в строке ученика перечислить все кружки в одной ячейке, искать и изменять отдельное посещение будет неудобно. Нужна отдельная таблица, в которой каждая строка означает одну связь ученика с кружком.
Ответ: нужны таблицы «Ученики», «Кружки» и «Посещения». Последняя связывает объекты без повторения сведений о них и позволяет одному ученику посещать несколько кружков, а одному кружку — объединять многих учеников.
Ошибка — считать, что одинаковые строки допустимы, не проверяя, можно ли отличить одну запись от другой. Это кажется безвредным, если строки выглядят одинаково, но без уникального ключа нельзя надёжно выбрать нужную запись или связать её с другой таблицей. Проверьте, есть ли у каждой строки отдельный идентификатор; если нет, добавьте подходящий ключ.
Ошибка — назначать ключом поле, значения которого могут повторяться или оставаться пустыми. Часто выбирают имя, дату или другой знакомый признак, не проверяя его для всех записей. Спросите себя: найдётся ли две записи с одним значением и может ли значение отсутствовать; если да, поле не подходит как первичный ключ.
Ошибка — хранить в одной ячейке несколько значений одного атрибута, например перечень кружков через запятую. Так делают ради компактности, но отдельные значения сложнее искать, сортировать и обрабатывать по одному. Проверьте, можно ли для каждого значения выделить собственное поле или строку; списки связей обычно требуют отдельной таблицы.
Ошибка — считать любое поле с кодом первичным ключом. Код может повторяться, быть пустым или обозначать запись другой таблицы, а не текущую строку. Чтобы проверить себя, выясните назначение поля и проверьте его уникальность и заполненность для каждой записи.
Для работы с реляционной моделью полезно уметь читать обычные таблицы и различать строку, столбец и ячейку. Это помогает не путать отдельный объект, его характеристику и конкретное значение. Такие навыки нужны ещё до проектирования базы данных.
Тема опирается на представление о типах данных и алгоритмах обработки структурированных сведений. Тип данных определяет, какие операции допустимы для значений столбца, а алгоритм задаёт порядок поиска или изменения данных. Поэтому структура таблиц влияет на то, насколько удобно решать задачи обработки.
Реляционная модель применяется при проектировании баз данных и составлении запросов к ним. SQL — язык, с помощью которого обращаются к данным в реляционных базах: выбирают записи, добавляют их и изменяют. Понимание таблиц, ключей и связей помогает читать такие запросы и строить собственные.
Чем отношение отличается от таблицы?
В реляционной модели отношение — это набор данных об объектах одного типа, а таблица — привычная форма его представления. Поэтому на практике эти понятия часто используют почти как синонимы.
Может ли первичный ключ состоять из нескольких полей?
Да, первичный ключ может быть составным — включать несколько атрибутов. Тогда только их сочетание вместе должно однозначно определять каждую запись.
Почему нельзя использовать имя человека как первичный ключ?
У разных людей могут совпадать имена, а один человек может изменить имя. Значит, имя не гарантирует уникальность и постоянную идентификацию записи.
Как понять, что таблицы связаны между собой?
Обычно в одной таблице есть поле со значениями ключа из другой таблицы. По совпадающим значениям можно установить, каким объектам соответствуют записи.
Зачем хранить данные в нескольких таблицах, а не в одной?
Разделение уменьшает повторение сведений и помогает избежать противоречий при их изменении. Связи между таблицами позволяют при этом получать целостную информацию.
§ 15. Реляционная модель данных