ALTER TABLE и нормализация
Меняем уже существующие таблицы командой ALTER TABLE и знакомимся с идеей нормализации.
ALTER TABLE — команда, изменяющая структуру существующей таблицы: добавляет, удаляет или меняет столбцы и ограничения.
Зачем менять таблицы
Схема живёт вместе с проектом: появляются новые поля, что-то переименовывают, добавляют индексы. Пересоздавать таблицу с данными нельзя, поэтому используют ALTER TABLE.
Основные операции
-- добавить столбец
ALTER TABLE users ADD COLUMN phone VARCHAR(20);
-- изменить тип/свойства столбца
ALTER TABLE users MODIFY COLUMN name VARCHAR(150) NOT NULL;
-- переименовать столбец
ALTER TABLE users CHANGE COLUMN phone phone_number VARCHAR(20);
-- удалить столбец
ALTER TABLE users DROP COLUMN phone_number;
-- добавить ограничение/индекс
ALTER TABLE users ADD UNIQUE (email);
Это MySQL-синтаксис (для чтения). Осторожно на проде: на больших таблицах ALTER может блокировать таблицу и идти долго; такие изменения планируют и делают в окно низкой нагрузки.
Добавление столбца в песочнице
Базовый ALTER TABLE ... ADD COLUMN переносим — запустите:
CREATE TABLE users (
id INTEGER PRIMARY KEY,
name TEXT
);
INSERT INTO users (name) VALUES ('Анна'), ('Борис');
ALTER TABLE users ADD COLUMN city TEXT;
UPDATE users SET city = 'Москва' WHERE id = 1;
SELECT id, name, city FROM users;
Вывод:
id name city 1 Анна Москва 2 Борис
У второй строки city остался пустым (NULL) — новый столбец у старых строк не заполняется автоматически.
Нормализация — кратко
Нормализация — это организация данных так, чтобы избегать дублирования и противоречий. Базовая идея: каждая сущность хранится в своей таблице один раз, а связи — через ключи.
Антипример (плохо): в таблице заказов в каждой строке повторяется имя и адрес клиента. Если клиент сменит адрес, придётся править десятки строк, и легко рассогласовать.
Нормализованно (хорошо): клиент — в таблице customers один раз, а в orders хранится только customer_id. Три ориентира первых нормальных форм:
- 1НФ: в ячейке одно атомарное значение (не список через запятую).
- 2НФ: неключевые поля зависят от всего ключа целиком.
- 3НФ: неключевые поля не зависят друг от друга, а только от ключа.
На практике большинству приложений достаточно «здравого смысла + 3НФ»: выноси повторяющиеся данные в отдельные таблицы и связывай ключами.
Итог
ALTER TABLEменяет структуру:ADD/MODIFY/CHANGE/DROP COLUMN.- На больших таблицах
ALTERможет быть долгим и блокирующим — планируйте его. - Нормализация убирает дублирование: каждая сущность хранится один раз, связи — через ключи.
- Ориентир для большинства проектов — 3НФ и здравый смысл.