Задайте первичные ключи, внешние ключи campaign_id и ad_id, обязательные поля и проверку диапазона дат. Индексы внешних ключей создайте отдельно.
Конструирование схемы БД для рекламного сервиса
Задайте первичные ключи, внешние ключи campaign_id и ad_id, обязательные поля и проверку диапазона дат. Индексы внешних ключей создайте отдельно.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Разработать набор таблиц в PostgreSQL, указать их столбцы, типы данных и установить связи между ними с помощью FOREIGN KEY. Спроектировать три таблицы, которые будут хранить данные о рекламных кампаниях, объявлениях и креативах (изображениях): campaigns — таблица рекламных кампаний id name start_date end_date status
ads — таблица объявлений, относящихся к кампаниям
id
campaign_id (внешний ключ, ссылается на campaigns)
title
description
status
creatives — таблица креативов с изображениями для объявлений
id
ad_id (внешний ключ, ссылается на ads)
image_url
format
Ответ
Задайте первичные ключи, внешние ключи campaign_id и ad_id, обязательные поля и проверку диапазона дат. Индексы внешних ключей создайте отдельно.
CREATE TABLE campaigns (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name text NOT NULL,
start_date date NOT NULL,
end_date date NOT NULL,
status text NOT NULL,
CHECK (end_date >= start_date)
);
CREATE TABLE ads (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
campaign_id bigint NOT NULL REFERENCES campaigns(id),
title text NOT NULL,
description text NOT NULL DEFAULT '',
status text NOT NULL
);
CREATE TABLE creatives (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
ad_id bigint NOT NULL REFERENCES ads(id),
image_url text NOT NULL,
format text NOT NULL
);
CREATE INDEX ads_campaign_idx ON ads(campaign_id);
CREATE INDEX creatives_ad_idx ON creatives(ad_id);
Допустимые статусы и форматы закрепите CHECK или справочниками после согласования списка. По умолчанию связанные записи мешают удалению родителя; ON DELETE CASCADE добавляют только при желаемом каскадном удалении.