Проектирование баз данных: сущности, связи и ER-диаграммы
Превратите реальные требования в правильные таблицы ещё до первого запроса
SELECT. Проект базы данных решает, какие таблицы существуют, что хранит каждый столбец и как таблицы связаны. Верный проект делает запросы короткими и честными; ошибочный - заставляет вечно бороться с данными. В этом уроке вы переведёте требования на обычном языке в сущности (таблицы), атрибуты (столбцы) и связи (внешние ключи и таблицы-связки), а затем нарисуете и прочитаете ER-диаграмму.
- находить сущности и их атрибуты в требовании,
- выбирать первичный ключ и связывать таблицы внешним ключом,
- моделировать связь один-ко-многим (внешний ключ на стороне "многие"),
- моделировать связь многие-ко-многим через таблицу-связку,
- и читать ER-диаграмму в нотации "воронья лапка".
1. Сущности и атрибуты
Сущность - это тип вещи, который важен вашему приложению и который нужно запоминать: Студент, Курс, Преподаватель, Заказ. В реляционной базе каждая сущность становится таблицей. Атрибут - это факт о сущности (имя, email, год), и каждый атрибут становится столбцом. Одна конкретная вещь (один конкретный студент) становится строкой.
Весь урок мы будем проектировать небольшую школьную базу данных. Начнём с самой простой сущности - преподавателя:
CREATE TABLE teachers (
teacher_id INT PRIMARY KEY AUTO_INCREMENT,
full_name VARCHAR(100) NOT NULL,
email VARCHAR(120) UNIQUE
);
Уже видны три проектных решения: сущность (teachers), её атрибуты (имя, email) и первичный ключ (teacher_id), который даёт каждой строке уникальную и устойчивую идентичность.