Рубрики
SQL

Выбрать источник данных в зависимости от значения поля

В любой подборке советов для начинающих программистов есть совет создать свой личный проект. У меня это проект площадка вакансий с подработкой 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)

Получаем вот такую структуру.

связь между таблицами в базе данных

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *