
Когда я запускал свою онлайн-школу, список учеников я вёл в одном длинном листе Excel. Строка — один ученик: имя, телефон, а рядом название группы, имя куратора и адрес филиала. Пока учеников было десять, всё держалось. Потом филиал переехал. Новый адрес я вписал в первые строки, отвлёкся на звонок, вернулся — и половина списка осталась со старым адресом. Один человек приехал не туда. Дело было не в невнимательности. Один и тот же адрес лежал у меня в сорока строках сразу, и я физически не мог поправить их все без ошибки. Проектирование базы данных — это как заранее разложить сведения так, чтобы адрес филиала хранился в одном месте, а не в сорока.
После урока сможешь:
— объяснить, почему сведения не сваливают в одну таблицу, и показать это на примере повторов;
— выбрать ключевое поле для таблицы и объяснить, почему фамилия для этого не годится;
— связать две таблицы по общему полю и опознать тип связи «один-ко-многим»;
— спроектировать простую таблицу с нуля по понятному порядку действий.
Вспомни, прежде чем начать. Пригодятся три вещи из прошлых уроков. Типы данных — текстовый, числовой, дата, логический — разбирали в уроке 2.5 «Типы данных». Что такое таблица, запись и поле — в уроке 2.6 «Объекты базы данных». А связь между таблицами и три модели данных — в уроке 2.7 «Модели данных».
Почему нельзя всё свалить в одну таблицу
Соблазн понятный: одна таблица — всё видно сразу, ничего не связываешь. Но как только у объектов появляются общие сведения, они начинают повторяться. Каждый студент группы ПИ-11 тянет за собой имя куратора и адрес корпуса. Двадцать пять студентов — двадцать пять копий одного и того же адреса. И вот тут начинается беда: адрес поменялся, а ты правишь его в двадцати пяти строках руками. Пропустил одну — и в базе одновременно живут два разных адреса одной группы. Какой из них верный, программа не знает.
ПЛОХО — всё в одной таблице (адрес группы повторяется):
Студент Группа Куратор Адрес корпуса
──────────────────────────────────────────────────────
Орлов А. ПИ-11 Смирнова Н.П. ул. Мира, 3
Белова К. ПИ-11 Смирнова Н.П. ул. Мира, 3 ← повтор
Гусев Р. ПИ-11 Смирнова Н.П. ул. Мира, 3 ← повтор
Зайцев Д. ПИ-12 Котов В.А. пр. Ленина, 7
Сменился адрес ПИ-11 — правишь три строки. Забыл одну — данные врут.
ХОРОШО — две таблицы, связанные по номеру группы:
Таблица «Группы» Таблица «Студенты»
───────────────────────── ─────────────────────
Группа Куратор Адрес Студент Группа
ПИ-11 Смирнова Мира, 3 Орлов А. ПИ-11
ПИ-12 Котов Ленина, 7 Белова К. ПИ-11
Гусев Р. ПИ-11
Зайцев Д. ПИ-12
Адрес ПИ-11 хранится ОДИН раз. Сменился — правишь одну ячейку.
Правая схема и есть результат проектирования. Сведения о группе (куратор, адрес) уехали в свою таблицу и лежат там по одному экземпляру. В таблице «Студенты» от группы остался только её номер — короткая ссылка. Меняешь адрес в одном месте, и он сразу верен для всех одногруппников.
Ключевое поле: чем одна запись отличается от всех
Чтобы связать таблицы и вообще отличать одну запись от другой, нужно поле, по которому запись опознаётся однозначно. Это ключевое поле, оно же первичный ключ: поле, значение которого уникально для каждой записи и ни у кого не повторяется. По ключу ты всегда попадаешь ровно в одну строку.
Отсюда понятно, почему фамилия — плохой ключ. В одной группе легко встретятся два Кузнецова, а на потоке — десяток. Ключ обязан быть разным у всех, а фамилии совпадают. Номер зачётной книжки — наоборот, хороший ключ: у каждого студента он свой, и два одинаковых номера не выдают в принципе. Тот же смысл у номера паспорта, ИНН, инвентарного номера — это специально придуманные не совпадающие обозначения.
Связь таблиц: одна группа — много студентов
Таблицы связывают по совпадающему полю: в обеих есть номер группы, по нему база и понимает, кто к кому относится. Самый частый тип связи — один-ко-многим. Читается с двух сторон: одной группе принадлежит много студентов, а каждый студент числится только в одной группе. Одна запись слева — несколько записей справа.
СВЯЗЬ ОДИН-КО-МНОГИМ
Таблица «Группы» Таблица «Студенты»
(сторона «один») (сторона «многие»)
┌─────────┐ ┌──────────┬────────┐
│ Группа │ │ Студент │ Группа │
├─────────┤ ├──────────┼────────┤
│ ПИ-11 │◄────────────────│ Орлов │ ПИ-11 │
│ ПИ-12 │◄──┐ ┌───│ Белова │ ПИ-11 │
└─────────┘ │ ├───│ Гусев │ ПИ-11 │
└─────────┼───│ Зайцев │ ПИ-12 │
└───└──────────┴────────┘
Одна группа — много студентов.
Поле «Группа» в таблице «Студенты» — внешнее поле-ссылка:
оно указывает на ключевое поле таблицы «Группы».
Поле «Группа» внутри таблицы «Студенты» называют внешним полем-ссылкой. Само по себе оно не хранит адрес и куратора — оно лишь указывает, в какой строке таблицы «Группы» это всё лежит. Запомни сторону: ссылка всегда стоит там, где «многие», то есть в таблице «Студенты». Именно поэтому одно значение «ПИ-11» спокойно повторяется в строках студентов — это не дублирование сведений, а короткий указатель на единственную запись группы.
Порядок работы: с чего начать проектирование
Проектируют не наугад, а по шагам:
1. Определи, о каких объектах ты хранишь сведения (студенты, группы, книги, заказы).
2. Заведи на каждый объект свою таблицу.
3. Для каждой таблицы определи поля и их типы данных (из урока 2.5).
4. Выбери ключевое поле — то, что уникально для каждой записи.
5. Свяжи таблицы по общему полю.
И одно правило, которое держит всю картину без заумных слов: одна таблица — про один объект, а повторяющиеся сведения выносим в отдельную таблицу. Заметил, что одни и те же данные копируются из строки в строку, — это сигнал, что они на самом деле про другой объект и им нужна своя таблица.
Как это спрашивают на экзамене. Дают описание таблицы: «В таблице „Студенты“ есть поля Фамилия, Имя, Номер зачётки, Группа. Какое поле можно назначить ключевым?» — и просят выбрать одно. Верный ответ — поле, где значения не повторяются ни у кого, то есть номер зачётки. Второй частый вопрос: показывают две таблицы и спрашивают тип связи. «Один-ко-многим» узнаётся по тому, что одной записи в первой таблице соответствует несколько записей во второй.
Контрольный вопрос. Ключевое поле (первичный ключ) таблицы — это поле, значение которого …
Подсказка: Ключ должен различать записи между собой. Если у двух строк значение совпадает — как ты их отличишь?
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. Почему фамилия — плохой выбор для ключевого поля таблицы «Студенты»?
Подсказка: Представь двух Кузнецовых в одной группе. Сможешь ли ты различить их по этому полю?
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. Как одним словом называется поле, значение которого уникально для каждой записи и служит для её опознания? Впиши прилагательное («… поле»).
Подсказка: Ищи поле, по которому можно однозначно отличить одну запись от всех остальных.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. Почему номер зачётной книжки — хороший ключ для таблицы «Студенты»?
Подсказка: Хороший ключ различает всех. Спроси себя: могут ли у двух разных студентов совпасть эти номера?
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. Одной группе принадлежит много студентов, а каждый студент числится только в одной группе. Как называется такой тип связи между таблицами?
Подсказка: Прочитай связь с двух сторон: со стороны группы студентов много, со стороны студента группа одна.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. Отметь все верные утверждения о проектировании базы данных (не менее двух вариантов).
Выберите все верные варианты.
Подсказка: Два утверждения противоречат уроку: подумай, помогают ли повторы делу и годится ли фамилия в ключи.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. В связке «Группы» — «Студенты» поле «Номер группы» повторяется у студентов и указывает на нужную группу. В какой таблице это поле является внешним полем-ссылкой?
Подсказка: Ссылка стоит на стороне «многие» — там, где несколько записей указывают на одну.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. Для таблицы «Студенты» нужно выбрать ключевое поле. В поле «Фамилия» есть два «Кузнецова», в поле «Год рождения» многие значения совпадают, в поле «Номер студенческого билета» все значения разные, в поле «Группа» значения повторяются. Какое поле годится в ключи?
Подсказка: Ключ обязан быть разным у всех записей. Пройди по полям и найди то, где нет ни одного совпадения.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. В таблице «Заказы» в каждой из 500 строк рядом с товаром записаны название магазина, его адрес и телефон, и эти сведения повторяются сотни раз. Магазин сменил телефон. В чём главная проблема такого устройства таблицы?
Подсказка: Вернись к истории про адрес филиала в начале урока: что случается, когда одно значение лежит в куче строк сразу?
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Задание. Нужно хранить сведения о преподавателях и о кафедрах: каждый преподаватель работает на одной кафедре, а на кафедре — много преподавателей. По правилу «одна таблица — про один объект», сколько таблиц ты заведёшь? Впиши число.
Подсказка: Посчитай, о скольких разных видах объектов идёт речь. На каждый вид — своя таблица.
✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. В таблице «Студенты» у каждого студента записан полный адрес его группы и ФИО куратора, и у одногруппников эти данные одинаковые. Что правильно сделать по правилу проектирования?
Подсказка: Повторяющиеся сведения — сигнал, что они про другой объект. Куда по правилу переезжает «другой объект»?
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Задание. У тебя таблица «Сотрудники» и таблица «Отделы». Каждый сотрудник работает в одном отделе, в отделе — много людей. Чтобы связать таблицы без повторения названия отдела в каждой строке, добавляют поле-ссылку. В какой из двух таблиц окажется это поле-ссылка? Впиши одно слово — название таблицы в именительном падеже.
Подсказка: Ссылка живёт на стороне «многие». Где записей больше — там, где по одному человеку в строке, или там, где по одному отделу?
✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Задание. Мини-проект. Спроектируй таблицу «Студенты» — на бумаге или в листе Excel. Access для этого не нужен.
Обязательные поля: фамилия, имя, дата рождения, номер группы, сдал ли зачёт. Добавь к ним своё ключевое поле — номер зачётки. Для каждого поля подпиши тип данных из урока 2.5 (например, текстовый, дата/время, числовой, логический). Сдай фото листа или файл с таблицей.
В поле ответа впиши число: сколько всего полей получилось в таблице.
Принято, если:
1) в таблице есть все пять названных полей и ключевое поле;
2) у каждого поля указан тип данных;
3) ключевое поле уникально для каждого студента, фамилия ключом не выбрана;
4) приложено фото или файл, по которому это видно.Подсказка: Выпиши все поля в столбик, каждому подпиши тип данных из урока 2.5, и посчитай, сколько строк вышло в твоём списке. Не забудь про ключевое поле — его тоже добавляешь сам.
✅ Готово, если: программа запускается без ошибок и выводит то, что просят в задании.
Онлайн-проверка ответа появится позже
Итог.
— Сваливать всё в одну таблицу опасно: сведения повторяются, и при правке одного значения в десятках строк часть остаётся старой.
— Ключевое поле уникально для каждой записи. Номер зачётки годится, фамилия — нет: бывают однофамильцы.
— Таблицы связывают по общему полю. «Один-ко-многим» — это одна группа и много студентов; внешнее поле-ссылка стоит в таблице на стороне «многие».
— Порядок работы: объекты → таблица на каждый → поля и их типы → ключевое поле → связи. Правило: одна таблица — про один объект, повторы выносим отдельно.
