Ключи и связи
107 мин
В настоящей базе данные лежат не в одной огромной таблице, а в нескольких связанных. Связывают их ключи.
Почему одной таблицы мало?
Если в каждой строке студента писать ещё и название факультета, декана и корпус, данные одного факультета повторятся сотни раз. Сменился декан — меняй сотни строк, а забудешь одну — база начнёт противоречить сама себе.
Решение: сведения о факультете хранятся один раз в отдельной таблице faculties, а группа помнит только номер факультета (faculty_id).
Первичный ключ (PRIMARY KEY)
Столбец, который однозначно отличает каждую строку. Обычно это id:
- не повторяется — у двух студентов не бывает одного
id; - не бывает пустым;
- не меняется — имя может измениться,
id— никогда.
Внешний ключ (FOREIGN KEY)
Столбец, который указывает на первичный ключ другой таблицы. students.group_id → study_groups.id, study_groups.faculty_id → faculties.id.
faculty_id = 1 значит, что группа относится к факультету номер 1. Какой это факультет — смотрим во второй таблице:
Внешний ключ защищает базу: нельзя указать номер несуществующего факультета и нельзя удалить факультет, в котором есть группы. В разделе «Практика» вы проверите это своими руками.
Виды связей
- Один ко многим (1:N) — самая частая: на факультете много групп, в группе много студентов. Внешний ключ стоит на стороне «многих».
- Многие ко многим (M:N) — студент получает оценки по многим предметам, по предмету оценки получают многие студенты. Для этого между ними ставят третью таблицу — у нас это
grades(student_id+subject_id). - Один к одному (1:1) — встречается редко: например, сотрудник и его паспортные данные.
Как читать схему
В разделе «Арена» у каждой базы есть схема: линии показывают внешние ключи. Посмотреть на схему перед тем, как писать запрос, — хорошая привычка: что в какой таблице лежит и через какой столбец таблицы связаны.
Выведите значение group_id студента с id = 1 из таблицы students.
Запомните
- Первичный ключ — неповторяющийся номер строки.
- Внешний ключ — ссылка на строку другой таблицы; не даёт создать неправильную связь.
- Связь M:N строится через промежуточную таблицу.