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


PRAGMA foreign_keys = ON;

DROP TABLE IF EXISTS delivery_item;
DROP TABLE IF EXISTS delivery;
DROP TABLE IF EXISTS product;
DROP TABLE IF EXISTS supplier;

CREATE TABLE supplier (
    supplier_id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    contact_person TEXT,
    phone TEXT,
    email TEXT,
    address TEXT,
    created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,

    CONSTRAINT uq_supplier_name UNIQUE (name),
    CONSTRAINT uq_supplier_email UNIQUE (email)
);

CREATE TABLE product (
    product_id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    category TEXT,
    unit TEXT NOT NULL DEFAULT 'шт',
    price NUMERIC NOT NULL DEFAULT 0,
    quantity_in_stock INTEGER NOT NULL DEFAULT 0,
    created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,

    CONSTRAINT uq_product_name UNIQUE (name),
    CONSTRAINT chk_product_price CHECK (price >= 0),
    CONSTRAINT chk_product_quantity CHECK (quantity_in_stock >= 0)
);

CREATE TABLE delivery (
    delivery_id INTEGER PRIMARY KEY AUTOINCREMENT,
    supplier_id INTEGER NOT NULL,
    delivery_date TEXT NOT NULL DEFAULT CURRENT_DATE,
    document_number TEXT NOT NULL,
    status TEXT NOT NULL DEFAULT 'created',
    comment TEXT,

    CONSTRAINT uq_delivery_document_number UNIQUE (document_number),

    CONSTRAINT fk_delivery_supplier
        FOREIGN KEY (supplier_id)
        REFERENCES supplier (supplier_id)
        ON UPDATE CASCADE
        ON DELETE RESTRICT,

    CONSTRAINT chk_delivery_status
        CHECK (status IN ('created', 'received', 'cancelled'))
);

CREATE TABLE delivery_item (
    delivery_item_id INTEGER PRIMARY KEY AUTOINCREMENT,
    delivery_id INTEGER NOT NULL,
    product_id INTEGER NOT NULL,
    quantity INTEGER NOT NULL,
    purchase_price NUMERIC NOT NULL,

    CONSTRAINT uq_delivery_product UNIQUE (delivery_id, product_id),

    CONSTRAINT fk_delivery_item_delivery
        FOREIGN KEY (delivery_id)
        REFERENCES delivery (delivery_id)
        ON UPDATE CASCADE
        ON DELETE CASCADE,

    CONSTRAINT fk_delivery_item_product
        FOREIGN KEY (product_id)
        REFERENCES product (product_id)
        ON UPDATE CASCADE
        ON DELETE RESTRICT,

    CONSTRAINT chk_delivery_item_quantity CHECK (quantity > 0),
    CONSTRAINT chk_delivery_item_purchase_price CHECK (purchase_price >= 0)
);

CREATE INDEX idx_delivery_supplier_id
ON delivery (supplier_id);

CREATE INDEX idx_delivery_delivery_date
ON delivery (delivery_date);

CREATE INDEX idx_delivery_item_delivery_id
ON delivery_item (delivery_id);

CREATE INDEX idx_delivery_item_product_id
ON delivery_item (product_id);

CREATE INDEX idx_product_name
ON product (name);

CREATE INDEX idx_supplier_name
ON supplier (name);