-- Схема БД для элемента "Условия поверки" -- Таблица лабораторий CREATE TABLE laboratories ( id SERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, code VARCHAR(50) UNIQUE NOT NULL, -- Уникальный код лаборатории description TEXT, address TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Таблица типов условий поверки (температура, влажность, давление и т.д.) CREATE TABLE condition_types ( id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL, -- "Температура", "Влажность", "Давление" unit VARCHAR(20), -- "°C", "%", "кПа" data_type VARCHAR(20) DEFAULT 'number', -- number, string, boolean description TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Связь лаборатории с типами условий (какие условия отслеживает каждая лаборатория) CREATE TABLE laboratory_condition_types ( id SERIAL PRIMARY KEY, laboratory_id INTEGER REFERENCES laboratories(id) ON DELETE CASCADE, condition_type_id INTEGER REFERENCES condition_types(id) ON DELETE CASCADE, is_required BOOLEAN DEFAULT false, -- Обязательно ли это условие для данной лаборатории default_value VARCHAR(100), -- Значение по умолчанию min_value DECIMAL(10,3), -- Минимальное значение (для валидации) max_value DECIMAL(10,3), -- Максимальное значение (для валидации) created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, UNIQUE(laboratory_id, condition_type_id) ); -- Таблица для сохранения условий по дням CREATE TABLE daily_conditions ( id SERIAL PRIMARY KEY, laboratory_id INTEGER REFERENCES laboratories(id) ON DELETE CASCADE, date DATE NOT NULL, conditions JSONB NOT NULL, -- JSON объект с условиями: {"temperature": 23.5, "humidity": 45.2, "pressure": 101.3} created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_by VARCHAR(100), -- Кто создал запись UNIQUE(laboratory_id, date) -- Одна запись условий на день для лаборатории ); -- Индексы для оптимизации CREATE INDEX idx_daily_conditions_lab_date ON daily_conditions(laboratory_id, date); CREATE INDEX idx_daily_conditions_date ON daily_conditions(date); CREATE INDEX idx_laboratory_condition_types_lab ON laboratory_condition_types(laboratory_id); -- Вставка начальных данных -- Типы условий INSERT INTO condition_types (name, unit, data_type, description) VALUES ('Температура', '°C', 'number', 'Температура окружающей среды'), ('Влажность', '%', 'number', 'Относительная влажность воздуха'), ('Атмосферное давление', 'кПа', 'number', 'Атмосферное давление'), ('Давление среды', 'МПа', 'number', 'Давление рабочей среды'), ('Напряжение сети', 'В', 'number', 'Напряжение питающей сети'), ('Частота сети', 'Гц', 'number', 'Частота питающей сети'); -- Примеры лабораторий INSERT INTO laboratories (name, code, description) VALUES ('Лаборатория температуры', 'TEMP_LAB', 'Лаборатория поверки температурных приборов'), ('Лаборатория давления', 'PRESS_LAB', 'Лаборатория поверки приборов давления'), ('Электрическая лаборатория', 'ELEC_LAB', 'Лаборатория поверки электрических приборов'); -- Настройка условий для лабораторий -- Лаборатория температуры INSERT INTO laboratory_condition_types (laboratory_id, condition_type_id, is_required, default_value, min_value, max_value) VALUES (1, 1, true, '20', 15, 30), -- Температура (1, 2, true, '50', 30, 80), -- Влажность (1, 3, false, '101.3', 80, 120); -- Атмосферное давление -- Лаборатория давления INSERT INTO laboratory_condition_types (laboratory_id, condition_type_id, is_required, default_value, min_value, max_value) VALUES (2, 1, true, '23', 18, 28), -- Температура (2, 2, false, '45', 20, 70), -- Влажность (2, 3, true, '101.3', 90, 110), -- Атмосферное давление (2, 4, true, '0.1', 0, 100); -- Давление среды -- Электрическая лаборатория INSERT INTO laboratory_condition_types (laboratory_id, condition_type_id, is_required, default_value, min_value, max_value) VALUES (3, 1, true, '22', 20, 25), -- Температура (3, 2, true, '60', 40, 70), -- Влажность (3, 5, true, '220', 198, 242), -- Напряжение сети (3, 6, true, '50', 49.5, 50.5); -- Частота сети