В любой подборке советов для начинающих программистов есть совет создать свой личный проект. У меня это проект площадка вакансий с подработкой ra-click.ru.
Бэкенд этого проекта база данных вакансий. Основная таблица в базе данных это карточка вакансий.
У каждой вакансии есть источник. И в зависимости от источника, мне нужны таблицы с разной структурой.
Например для источника «Чудо работа», мне достаточно двух столбцов. А для источника CPA, мне нужно 7 столбцов.
Вариант запихать все источники в одну таблицу, мне не очень нравится. Зачем хранить 7 столбцов, если можно хранить два.
Поэтому принято решение действовать по следующему плану:
- Для каждого источника создать свою таблицу с необходимым количеством полей
- Чтобы связать основную таблицу vacansy с каждым источником, создаем промежуточную таблицу source
- Каждая таблица источник будет внешним ключом смотреть в таблицу source
- В основную таблицу добавляем дополнительный столбец source_id. Связываем этот столбец с таблицей source внешним ключом.
Разберем чуть подробнее с SQL запросами.
Создаём промежуточную таблицу source
В нашем плане этот этап был вторым пунктом. Но я хочу создать эту таблицу сразу.
Другие таблицы, будут привязаны к этой таблице внешними ключами. Я хочу одним запросом сразу создать базу и добавить внешние ключи. Но для создания внешних ключей, база в которую они смотрят, уже должна быть создана.
CREATE TABLE source (
suorce_id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(100),
type_source VARCHAR(100)
)
В нашей таблице будет три столбца(есть сомнения, что третий будет нужен, но пока так):
- source_id — уникальный идентификатор
- title — название источника. Например, cpa или «Супер работа».
Создаём таблицу для одного из источников, на примере источника cpa
Пример SQL запроса создания таблицы с внешним ключом
CREATE TABLE cpa (
cpa_id INT PRIMARY KEY AUTO_INCREMENT,
source_id INT,
active INT,
url_offer_in_cpa VARCHAR(150),
url_referal VARCHAR(150),
rating DECIMAL,
hold INT,
date_of_verification DATE,
CONSTRAINT fk_source_id_cpa
FOREIGN KEY (source_id) REFERENCES source(source_id)
)
Здесь я создал таблицу для одного из источников. Не буду расшифровывать зачем мне нужно каждое поле. Просто нужно и всё.
Последними двумя строчками создаю внешний ключ, который будет смотреть в нашу промежуточную таблицу source.
Добавляю дополнительный столбец в главную таблицу и делаю его внешним ключом
Пример SQL запроса добавления столбца и внешнего ключа в существующую таблицу.
ALTER TABLE vacansy
ADD COLUMN source_id INT,
ADD CONSTRAINT fk_source_id_vacansy
FOREIGN KEY (source_id) REFERENCES source(source_id)
Получаем вот такую структуру.