SQL
Как создать схему данных для БД
Схема данных для БД — это план будущей базы: таблицы, поля, типы данных, первичные ключи, внешние ключи и связи между сущностями. Ее лучше создать до написания SQL, потому что исправлять плохую структуру после загрузки данных сложнее
Если совсем коротко: сначала выпишите сущности, затем поля, затем связи, затем ограничения, и только после этого переходите к CREATE TABLE
Что входит в схему данных
Хорошая схема показывает:
- таблицы
- поля таблиц
- типы данных
- первичные ключи
- внешние ключи
- уникальные ограничения
- связи один-ко-многим и многие-ко-многим
- правила удаления и обновления связанных данных
Для учебного проекта схема может быть простой. Для рабочей базы важно заранее продумать, где появятся дубли, какие данные обязательны и как будут строиться запросы
Пример на базе интернет-магазина
Возьмем маленький магазин. В нем есть клиенты, заказы и товары
Сущности:
clientsordersproductsorder_items
Почему нужна order_items: один заказ может содержать несколько товаров, а один товар может встречаться в разных заказах
Как определить связи
Клиент и заказ:
clients 1 -> many orders
Один клиент может иметь много заказов, но каждый заказ относится к одному клиенту
Заказ и товар:
orders many -> many products
Для такой связи нужна промежуточная таблица order_items
Как это выглядит в SQL
CREATE TABLE clients (
id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL
);
CREATE TABLE orders (
id INT PRIMARY KEY,
client_id INT NOT NULL,
created_at DATE NOT NULL,
FOREIGN KEY (client_id) REFERENCES clients(id)
);
CREATE TABLE products (
id INT PRIMARY KEY,
title VARCHAR(150) NOT NULL
);
CREATE TABLE order_items (
order_id INT NOT NULL,
product_id INT NOT NULL,
quantity INT NOT NULL,
PRIMARY KEY (order_id, product_id),
FOREIGN KEY (order_id) REFERENCES orders(id),
FOREIGN KEY (product_id) REFERENCES products(id)
);
Это уже не просто набор таблиц, а связанная схема
В каких инструментах рисовать схему
Можно начать с бумаги или доски. Для первых проектов этого достаточно
Для более аккуратной схемы подойдут:
- MySQL Workbench
- SQL Server Management Studio Database Diagrams
- pgAdmin и внешние ER-инструменты
- draw.io
- dbdiagram.io
- DBeaver
Инструмент не так важен, как правильная логика связей
Мини-практика
Возьмите предметную область «курсы и студенты» и выпишите:
- какие таблицы нужны
- какие поля обязательны
- где первичный ключ
- где внешний ключ
- нужна ли таблица-связка
Затем нарисуйте схему и только после этого напишите SQL-команды создания таблиц
Частые ошибки
- Сразу писать
CREATE TABLE, не понимая предметную область - Хранить список id в одной текстовой колонке
- Не добавлять первичные ключи
- Не фиксировать связи внешними ключами
- Делать одну огромную таблицу вместо нескольких связанных
- Не думать о дублях и уникальности
- Путать схему как diagram и schema как namespace или database
Что почитать дальше по SQL
Если нужен общий маршрут по теме, откройте рубрику SQL. Для соседних задач пригодятся эти разборы:
- Как сделать схему данных в MySQL
- Как создать базу данных в MS SQL Server
- Как создать базу данных в SQL Server Management Studio
- Как создать базу данных в SQL: общий принцип и примеры