Раздел 10 · Databases

Сущности, атрибуты и связи

junior~15 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

До сих пор таблицы появлялись в уроках готовыми: вот students, вот grades. Но откуда они берутся? Кто решил, что оценки лежат отдельно от студентов, а не в той же таблице? Этот урок открывает серию о проектировании. Прежде чем писать CREATE TABLE, базу рисуют на бумаге, и у этого рисунка есть свой язык: ER-модель.

Чертёж до стройки

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

С базами то же самое. Переименовать прямоугольник на бумаге легко, а переделать таблицу с миллионом строк, на которую ссылаются ещё пять таблиц, долго и страшно. Поэтому сначала рисуют ER-модель, от английского entity-relationship, «сущность-связь». Её предложил Питер Чен в 1976 году, и с тех пор это главный чертёжный язык для баз данных.

В ER-модели три строительных блока: сущности, атрибуты и связи. Разберём их на примере онлайн-школы.

Сущности: о чём мы храним данные

Послушай, как владелец школы описывает свой бизнес: «У нас есть студенты, они записываются на курсы. Каждый курс ведёт преподаватель. Курс состоит из уроков». Существительные в этом рассказе это кандидаты в сущности.

Сущность это вид вещей, о которых база должна помнить: студент, курс, преподаватель. Конкретная студентка Аня это экземпляр сущности «студент». Сущность станет таблицей, экземпляр станет строкой.

Не каждое существительное становится сущностью. «Школа» в рассказе есть, но школа у нас одна, хранить о ней нечего. Хороший вопрос-фильтр: «у этой штуки бывает много экземпляров, и про каждый нужно что-то помнить?» Студентов много, и про каждого помним имя и почту, значит, это сущность.

На диаграмме сущность рисуют прямоугольником:

┌───────────┐   ┌───────────┐   ┌───────────────┐
│  Студент  │   │   Курс    │   │ Преподаватель │
└───────────┘   └───────────┘   └───────────────┘

Атрибуты: что мы о них помним

Атрибут это свойство сущности: у студента имя, почта и дата рождения, у курса название и цена. Атрибут станет колонкой.

Атрибуты бывают разных видов, и вид подсказывает, как их потом хранить:

  • Ключевой. Однозначно определяет экземпляр, как почта студента. Это потенциальный ключ из урока про ключи. На диаграмме его подчёркивают.
  • Составной. Делится на части: адрес состоит из города, улицы и дома. Если тебе понадобится искать студентов по городу, город должен быть отдельной частью.
  • Многозначный. У одного экземпляра несколько значений: у студента бывает несколько телефонов. Помнишь правило «одно значение в клетке» из урока про отношения? Такой атрибут в одну колонку не ляжет, и в следующем уроке мы увидим, куда его девать.
  • Производный. Вычисляется из других: возраст считается по дате рождения. Его обычно не хранят, иначе через год он соврёт.
                 ┌───────────┐
   email ────────┤  Студент  ├──────── {телефон}   (многозначный)
 (ключевой)      └─────┬─────┘
                       │
         ┌─────────────┼──────────────┐
       имя     дата рождения     (возраст)   (производный)

дальше после входа

Урок целиком открыт всем, кто вошёл. Войди по своему email, чтобы читать дальше.

Вход пока по приглашению. Если хочешь учиться, напиши Vassiliy.