-- Таблица для хранения сырых документов CREATE TABLE IF NOT EXISTS raw_documents ( id SERIAL PRIMARY KEY, filename VARCHAR(255) NOT NULL, raw_text TEXT NOT NULL, extracted_json JSONB, created_at TIMESTAMP DEFAULT NOW(), updated_at TIMESTAMP DEFAULT NOW() ); -- Таблица для хранения структурированных данных о случаях CREATE TABLE IF NOT EXISTS cases ( id SERIAL PRIMARY KEY, raw_document_id INTEGER REFERENCES raw_documents(id), -- Данные о пропавшем age INTEGER, gender VARCHAR(50), has_diagnosis BOOLEAN, diagnosis_type VARCHAR(255), has_transport BOOLEAN, -- Условия season VARCHAR(50), time_of_day VARCHAR(50), elapsed_before_report_h FLOAT, -- Местоположение last_seen_direction VARCHAR(100), terrain_primary VARCHAR(100), water_nearby BOOLEAN, road_nearby BOOLEAN, -- Результаты поиска found_alive BOOLEAN, found_distance_km FLOAT, found_direction VARCHAR(100), found_location_type VARCHAR(255), search_duration_hours FLOAT, who_found VARCHAR(255), -- Метаданные created_at TIMESTAMP DEFAULT NOW(), updated_at TIMESTAMP DEFAULT NOW() ); -- Индексы для ускорения запросов CREATE INDEX IF NOT EXISTS idx_cases_age ON cases(age); CREATE INDEX IF NOT EXISTS idx_cases_season ON cases(season); CREATE INDEX IF NOT EXISTS idx_cases_terrain ON cases(terrain_primary); CREATE INDEX IF NOT EXISTS idx_cases_found_alive ON cases(found_alive); CREATE INDEX IF NOT EXISTS idx_cases_found_distance ON cases(found_distance_km); -- Индекс для JSONB поиска CREATE INDEX IF NOT EXISTS idx_raw_documents_json ON raw_documents USING gin(extracted_json); COMMENT ON TABLE raw_documents IS 'Сырые документы спецдонесений МЧС'; COMMENT ON TABLE cases IS 'Структурированные данные о случаях пропажи людей';