Files
hotels/db_schema.sql

154 lines
4.8 KiB
MySQL
Raw Normal View History

-- Схема базы данных для хранения информации об отелях
-- Префикс: hotel_
-- Основная информация об отелях
CREATE TABLE IF NOT EXISTS hotel_main (
id UUID PRIMARY KEY,
full_name TEXT,
short_name TEXT,
status_id INTEGER,
status_name TEXT,
category_id INTEGER,
category_name TEXT,
region_id INTEGER,
region_name TEXT,
hotel_type_id INTEGER,
hotel_type_name TEXT,
register_record TEXT,
register_record_date DATE,
owner_full_name TEXT,
owner_ogrn TEXT,
owner_inn TEXT,
phone TEXT,
email TEXT,
website_address TEXT,
addresses JSONB,
photo_ids TEXT[],
has_seasonal BOOLEAN,
activation_datetime TIMESTAMP,
updated TIMESTAMP,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Дополнительная информация о владельце
CREATE TABLE IF NOT EXISTS hotel_additional_info (
hotel_id UUID PRIMARY KEY REFERENCES hotel_main(id),
owner_ogrn TEXT,
owner_inn TEXT,
owner_kpp TEXT,
owner_short_name TEXT,
owner_phone TEXT,
owner_email TEXT,
resort_full_name TEXT,
owner_address_name TEXT,
owner_legal_type_id INTEGER,
phone TEXT,
email TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Санаторная информация (для санаториев)
CREATE TABLE IF NOT EXISTS hotel_sanatorium (
hotel_id UUID PRIMARY KEY REFERENCES hotel_main(id),
oid TEXT,
full_name TEXT,
short_name TEXT,
ogrn TEXT,
inn TEXT,
legal_address TEXT,
actual_address TEXT,
phone TEXT,
email TEXT,
web_site TEXT,
medical_license TEXT,
farm_license TEXT,
terrenkur BOOLEAN,
resort_name TEXT,
has_water_supply BOOLEAN,
has_heating BOOLEAN,
has_sewage BOOLEAN,
has_air_conditioning BOOLEAN,
has_elevator BOOLEAN,
has_telephone BOOLEAN,
has_internet BOOLEAN,
has_mobility_lift BOOLEAN,
has_gym BOOLEAN,
has_conference_room BOOLEAN,
swimming_pool_info JSONB,
plage_info JSONB,
land_document_info JSONB,
rooms_info JSONB,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Услуги отелей (из drawer)
CREATE TABLE IF NOT EXISTS hotel_services (
id SERIAL PRIMARY KEY,
hotel_id UUID REFERENCES hotel_main(id),
service_category_id INTEGER,
service_category_name TEXT,
service_id INTEGER,
service_name TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE(hotel_id, service_id)
);
-- Информация о номерах
CREATE TABLE IF NOT EXISTS hotel_rooms (
id SERIAL PRIMARY KEY,
hotel_id UUID REFERENCES hotel_main(id),
room_category_id INTEGER,
room_category_name TEXT,
apartment_count INTEGER,
number_seats INTEGER,
equipment_list JSONB,
family_room_count INTEGER,
disability_room_count INTEGER,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Сырые JSON для backup (опционально)
CREATE TABLE IF NOT EXISTS hotel_raw_json (
hotel_id UUID PRIMARY KEY REFERENCES hotel_main(id),
main_data JSONB,
additional_info JSONB,
sanatorium_data JSONB,
drawer_data JSONB,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Прогресс парсинга
CREATE TABLE IF NOT EXISTS hotel_parsing_progress (
id SERIAL PRIMARY KEY,
page_number INTEGER,
total_pages INTEGER,
processed_count INTEGER,
total_count INTEGER,
status TEXT, -- 'in_progress', 'completed', 'failed'
error_message TEXT,
started_at TIMESTAMP,
completed_at TIMESTAMP,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Индексы для быстрого поиска
CREATE INDEX IF NOT EXISTS idx_hotel_main_region ON hotel_main(region_id);
CREATE INDEX IF NOT EXISTS idx_hotel_main_status ON hotel_main(status_id);
CREATE INDEX IF NOT EXISTS idx_hotel_main_category ON hotel_main(category_id);
CREATE INDEX IF NOT EXISTS idx_hotel_main_type ON hotel_main(hotel_type_id);
CREATE INDEX IF NOT EXISTS idx_hotel_main_full_name ON hotel_main(full_name);
CREATE INDEX IF NOT EXISTS idx_hotel_services_hotel_id ON hotel_services(hotel_id);
CREATE INDEX IF NOT EXISTS idx_hotel_rooms_hotel_id ON hotel_rooms(hotel_id);
-- Полнотекстовый поиск по названию и адресу
CREATE INDEX IF NOT EXISTS idx_hotel_main_fulltext ON hotel_main
USING gin(to_tsvector('russian', coalesce(full_name, '') || ' ' || coalesce(short_name, '')));
COMMENT ON TABLE hotel_main IS 'Основная информация об отелях из tourism.fsa.gov.ru';
COMMENT ON TABLE hotel_parsing_progress IS 'Контрольные точки для возобновления парсинга';