Загрузка данных


-- =====================================================
-- 1. Очистка старых таблиц (если они были)
-- =====================================================
DROP TABLE IF EXISTS "ПОСТАВКА" CASCADE;
DROP TABLE IF EXISTS "ЗАКАЗ" CASCADE;
DROP TABLE IF EXISTS "КУЛИНАРНОЕ_ИЗДЕЛИЕ" CASCADE;
DROP TABLE IF EXISTS "СОТРУДНИК" CASCADE;
DROP TABLE IF EXISTS "КЛИЕНТ" CASCADE;
DROP TABLE IF EXISTS "ПРОДУКТ" CASCADE;
DROP TABLE IF EXISTS "ПОСТАВЩИК" CASCADE;

-- =====================================================
-- 2. Справочные таблицы
-- =====================================================
CREATE TABLE "ПОСТАВЩИК" (
    "id_поставщика" INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    "наименование" VARCHAR(100) NOT NULL,
    "ИНН" VARCHAR(12) NOT NULL UNIQUE,
    "телефон" VARCHAR(15) UNIQUE
);

CREATE TABLE "ПРОДУКТ" (
    "id_продукта" INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    "наименование" VARCHAR(100) NOT NULL,
    "единица_измерения" VARCHAR(20) NOT NULL
);

CREATE TABLE "КЛИЕНТ" (
    "id_клиента" INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    "ФИО" VARCHAR(100) NOT NULL,
    "телефон" VARCHAR(15) UNIQUE
);

-- =====================================================
-- 3. Основные таблицы
-- =====================================================
CREATE TABLE "СОТРУДНИК" (
    "id_сотрудника" INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    "ФИО" VARCHAR(100) NOT NULL,
    "телефон" VARCHAR(15) UNIQUE,
    "должность" VARCHAR(100) NOT NULL
);

CREATE TABLE "КУЛИНАРНОЕ_ИЗДЕЛИЕ" (
    "id_изделия" INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    "наименование" VARCHAR(100) NOT NULL,
    "цена" DECIMAL(10,2) NOT NULL CHECK ("цена" >= 0),
    "id_сотрудника" INT NOT NULL,
    CONSTRAINT "fk_изделие_сотрудник"
        FOREIGN KEY ("id_сотрудника")
        REFERENCES "СОТРУДНИК" ("id_сотрудника")
        ON DELETE RESTRICT ON UPDATE CASCADE
);

-- =====================================================
-- 4. Таблицы операций (Журналы)
-- =====================================================
CREATE TABLE "ЗАКАЗ" (
    "id_заказа" INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    "количество" INT NOT NULL CHECK ("количество" > 0),
    "цена" DECIMAL(10,2) NOT NULL CHECK ("цена" >= 0),
    "сумма" DECIMAL(10,2) NOT NULL CHECK ("сумма" >= 0),
    "id_клиента" INT NOT NULL,
    "id_изделия" INT NOT NULL,
    CONSTRAINT "fk_заказ_клиент"
        FOREIGN KEY ("id_клиента")
        REFERENCES "КЛИЕНТ" ("id_клиента")
        ON DELETE RESTRICT ON UPDATE CASCADE,
    CONSTRAINT "fk_заказ_изделие"
        FOREIGN KEY ("id_изделия")
        REFERENCES "КУЛИНАРНОЕ_ИЗДЕЛИЕ" ("id_изделия")
        ON DELETE RESTRICT ON UPDATE CASCADE
);

CREATE TABLE "ПОСТАВКА" (
    "id_поставки" INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    "id_поставщика" INT NOT NULL,
    "id_продукта" INT NOT NULL,
    "дата_поставки" DATE NOT NULL DEFAULT CURRENT_DATE,
    "количество" INT NOT NULL CHECK ("количество" > 0),
    CONSTRAINT "fk_поставка_поставщик"
        FOREIGN KEY ("id_поставщика")
        REFERENCES "ПОСТАВЩИК" ("id_поставщика")
        ON DELETE RESTRICT ON UPDATE CASCADE,
    CONSTRAINT "fk_поставка_продукт"
        FOREIGN KEY ("id_продукта")
        REFERENCES "ПРОДУКТ" ("id_продукта")
        ON DELETE RESTRICT ON UPDATE CASCADE
);