Files
protoc-frontend/database-schema.sql

90 lines
5.2 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- Схема БД для элемента "Условия поверки"
-- Таблица лабораторий
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); -- Частота сети