-- DDL для DDS-слоя по таблице fact_flight_sales.

CREATE SCHEMA IF NOT EXISTS dds;

-- Учебный комментарий: Почему у факта нет своего суррогатного ключа (fact_sk)?
-- В классическом DWH (Кимбалл) таблица фактов идентифицируется набором её 
-- измерений или дегенеративных ключей (в нашем случае: ticket_no + flight_id).
-- Добавление отдельного ID только тратит место и не несёт аналитической ценности.

-- Тип таблицы: Heap (стандартная).
-- Обоснование: Необходим row-level UPDATE для обновления статусов (is_boarded).
-- Использование Append-Only при частых обновлениях приводит к раздуванию (bloat) таблицы.
CREATE TABLE IF NOT EXISTS dds.fact_flight_sales (
    calendar_sk          INTEGER,
    departure_airport_sk INTEGER,
    arrival_airport_sk   INTEGER,
    airplane_sk          INTEGER,
    tariff_sk            INTEGER,
    passenger_sk         INTEGER,
    route_sk             INTEGER,
    book_ref             TEXT NOT NULL,
    ticket_no            TEXT NOT NULL,
    flight_id            INTEGER NOT NULL,
    book_date            DATE,
    seat_no              TEXT,
    price                NUMERIC(10,2),
    is_boarded           BOOLEAN NOT NULL,
    _load_id             TEXT NOT NULL,
    _load_ts             TIMESTAMP NOT NULL DEFAULT now()
)
WITH (appendonly=false)
DISTRIBUTED BY (ticket_no);

COMMENT ON TABLE dds.fact_flight_sales IS 'Факт продаж билетов (DDS).';
