gendesign/data/sql/10_schema_domrf.sql
2026-04-26 22:30:52 +03:00

67 lines
3.3 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.

-- DOM.RF (наш.дом.рф) portal-analytics dashboard data.
-- Source: https://xn--80az8a.xn--d1aqf.xn--p1ai/portal-analytics/api/*
-- Coverage: aggregate of construction-stage flats in МКД (multi-apartment buildings).
-- ⚠ NOT historical: this is a SNAPSHOT of "currently being built" state. Updated continuously.
-- We store snapshot_date so we can rebuild trend over time by re-pulling.
-- 1. Federal districts + regions dictionary (from /dictionaries/regions)
CREATE TABLE IF NOT EXISTS domrf_regions (
region_id INT PRIMARY KEY,
region_name TEXT NOT NULL,
federal_district TEXT NOT NULL
);
-- 2. Developers dictionary (from /dictionaries/developers, 2734 entries as of 2026-04-26)
CREATE TABLE IF NOT EXISTS domrf_developers (
developer_id TEXT PRIMARY KEY, -- '6208_0' (PRINZIP), '5655_0' (ПИК), '0_14583' etc.
developer_name TEXT NOT NULL
);
-- 3. Snapshot metadata
CREATE TABLE IF NOT EXISTS domrf_snapshots (
snapshot_date DATE PRIMARY KEY,
fetched_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
notes TEXT
);
-- 4. By-region aggregates with breakdown by room count
-- One row per (region, room_count_type, snapshot)
CREATE TABLE IF NOT EXISTS domrf_region_aggregates (
region_id INT NOT NULL,
snapshot_date DATE NOT NULL,
room_count_type TEXT NOT NULL, -- 'ONE'|'TWO'|'THREE'|'FOUR' or 'TOTAL' for region totals
flat_count INT NOT NULL,
area_sqm NUMERIC(14, 2) NOT NULL,
percent SMALLINT, -- % within region for room_count breakdown
PRIMARY KEY (region_id, snapshot_date, room_count_type)
);
-- 5. By-flat-area distribution (RF-wide, не работает фильтр по региону)
CREATE TABLE IF NOT EXISTS domrf_flat_area_distribution (
snapshot_date DATE NOT NULL,
region_id INT NOT NULL DEFAULT 0, -- 0 = вся РФ (api ignores ?regionId on this page)
area_bucket TEXT NOT NULL, -- 'FROM_0_TO_25', 'FROM_25_TO_35', ..., 'FROM_100'
room_count_type TEXT NOT NULL, -- 'ONE'|'TWO'|'THREE'|'FOUR' or 'TOTAL'
flat_count INT NOT NULL,
area_sqm NUMERIC(14, 2) NOT NULL,
percent SMALLINT,
PRIMARY KEY (snapshot_date, region_id, area_bucket, room_count_type)
);
-- 6. By-developer aggregates with breakdown by room count
-- Topology: developer × snapshot × room_count_type
CREATE TABLE IF NOT EXISTS domrf_developer_aggregates (
developer_id TEXT NOT NULL,
snapshot_date DATE NOT NULL,
region_id INT NOT NULL DEFAULT 0, -- 0 = РФ агрегат (api ignores ?regionId on this page)
room_count_type TEXT NOT NULL,
flat_count INT NOT NULL,
area_sqm NUMERIC(14, 2) NOT NULL,
percent SMALLINT,
PRIMARY KEY (developer_id, snapshot_date, region_id, room_count_type)
);
-- Indexes
CREATE INDEX IF NOT EXISTS idx_domrf_region_aggregates_room ON domrf_region_aggregates (room_count_type);
CREATE INDEX IF NOT EXISTS idx_domrf_developer_aggregates_room ON domrf_developer_aggregates (room_count_type);
CREATE INDEX IF NOT EXISTS idx_domrf_developer_aggregates_dev ON domrf_developer_aggregates (developer_id);