90 lines
5.2 KiB
SQL
90 lines
5.2 KiB
SQL
-- Схема БД для элемента "Условия поверки"
|
||
|
||
-- Таблица лабораторий
|
||
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); -- Частота сети |