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


CREATE DATABASE IF NOT EXISTS production_accounting;
USE production_accounting;

-- 1. Сборочные участки
CREATE TABLE assembly_sections (
    section_id INT PRIMARY KEY AUTO_INCREMENT,
    section_name VARCHAR(100) NOT NULL
);

-- 2. Сотрудники
CREATE TABLE employees (
    employee_id INT PRIMARY KEY AUTO_INCREMENT,
    full_name VARCHAR(150) NOT NULL,
    position VARCHAR(100) NOT NULL
);

-- 3. Продукция
CREATE TABLE products (
    product_id INT PRIMARY KEY AUTO_INCREMENT,
    serial_number VARCHAR(100) NOT NULL UNIQUE,
    product_type VARCHAR(100) NOT NULL,
    production_date DATE NOT NULL
);

-- 4. Детали
CREATE TABLE parts (
    part_id INT PRIMARY KEY AUTO_INCREMENT,
    batch_number VARCHAR(100) NOT NULL,
    part_name VARCHAR(150) NOT NULL
);

-- 5. Операции монтажа
CREATE TABLE assembly_operations (
    operation_id INT PRIMARY KEY AUTO_INCREMENT,
    product_id INT NOT NULL,
    section_id INT NOT NULL,
    employee_id INT NOT NULL,
    start_time DATETIME NOT NULL,
    end_time DATETIME,
    status VARCHAR(50) NOT NULL,
    result VARCHAR(255),

    FOREIGN KEY (product_id)
        REFERENCES products(product_id),

    FOREIGN KEY (section_id)
        REFERENCES assembly_sections(section_id),

    FOREIGN KEY (employee_id)
        REFERENCES employees(employee_id),

    CHECK (end_time IS NULL OR end_time >= start_time)
);

-- 6. Состав продукции
-- Связывает продукцию и детали (N:M)
CREATE TABLE product_parts (
    product_id INT NOT NULL,
    part_id INT NOT NULL,
    quantity INT NOT NULL DEFAULT 1,

    PRIMARY KEY (product_id, part_id),

    FOREIGN KEY (product_id)
        REFERENCES products(product_id)
        ON DELETE CASCADE,

    FOREIGN KEY (part_id)
        REFERENCES parts(part_id)
        ON DELETE CASCADE,

    CHECK (quantity > 0)
);