SPB Git

spb/qwhpi Public

QHPI — Quebec Housing Price Index: quality-adjusted, hierarchically pooled housing price indexes.

Python 63.9% TypeScript 25.4% CSS 5.5% TeX 3.5% SQL 0.8% Makefile 0.5% Dockerfile 0.5%
3.0 KB · 75 lines sql
Raw Blame History
1-- =============================================================================2-- QWHPI — Quebec Weekly Housing Price Index3-- Author  : Simon-Pierre Boucher4-- Contact : contact@spboucher.ai5-- File    : db/schema.sql6-- Purpose : Relational schema serving the API (loaded by engine export.py).7-- =============================================================================89CREATE TABLE IF NOT EXISTS geographies (10    geography_id    TEXT PRIMARY KEY,11    geography_name  TEXT NOT NULL,12    geography_level TEXT NOT NULL CHECK (geography_level IN ('province','region','municipality')),13    parent_id       TEXT REFERENCES geographies(geography_id)14);1516CREATE TABLE IF NOT EXISTS series (17    series_id       TEXT PRIMARY KEY,          -- '<geography_id>:<property_type>'18    geography_id    TEXT NOT NULL REFERENCES geographies(geography_id),19    property_type   TEXT NOT NULL CHECK (property_type IN ('all','unifamilial','condo','plex')),20    base_period     TEXT NOT NULL DEFAULT '2021 average = 100',21    UNIQUE (geography_id, property_type)22);2324CREATE TABLE IF NOT EXISTS model_runs (25    run_id          SERIAL PRIMARY KEY,26    model_version   TEXT NOT NULL,27    data_vintage    DATE NOT NULL,28    input_row_count BIGINT,29    input_hash      TEXT,30    created_at      TIMESTAMPTZ NOT NULL DEFAULT now(),31    UNIQUE (model_version, data_vintage)32);3334CREATE TABLE IF NOT EXISTS observations (35    series_id            TEXT NOT NULL REFERENCES series(series_id),36    week                 DATE NOT NULL,37    index                DOUBLE PRECISION,38    index_smoothed       DOUBLE PRECISION NOT NULL,39    representative_value DOUBLE PRECISION,40    transactions         INTEGER NOT NULL,41    effective_sample_size DOUBLE PRECISION,42    weekly_pct           DOUBLE PRECISION,43    four_week_pct        DOUBLE PRECISION,44    thirteen_week_pct    DOUBLE PRECISION,45    twenty_six_week_pct  DOUBLE PRECISION,46    yoy_pct              DOUBLE PRECISION,47    lower_95             DOUBLE PRECISION NOT NULL,48    upper_95             DOUBLE PRECISION NOT NULL,49    reliability_grade    CHAR(1) NOT NULL CHECK (reliability_grade IN ('A','B','C','D','E')),50    shrinkage_weight     DOUBLE PRECISION,51    is_partial_week      BOOLEAN NOT NULL DEFAULT FALSE,52    model_version        TEXT NOT NULL,53    data_vintage         DATE NOT NULL,54    PRIMARY KEY (series_id, week)55);56CREATE INDEX IF NOT EXISTS idx_obs_week ON observations (week);5758CREATE TABLE IF NOT EXISTS liquidity (59    series_id    TEXT NOT NULL REFERENCES series(series_id),60    week         DATE NOT NULL,61    transactions INTEGER NOT NULL,62    PRIMARY KEY (series_id, week)63);6465CREATE TABLE IF NOT EXISTS vintages (66    series_id                     TEXT NOT NULL REFERENCES series(series_id),67    week                          DATE NOT NULL,68    first_release_index           DOUBLE PRECISION,69    first_release_index_smoothed  DOUBLE PRECISION NOT NULL,70    first_release_vintage         DATE NOT NULL,71    PRIMARY KEY (series_id, week)72);7374-- Author credit: Simon-Pierre Boucher — contact@spboucher.ai75