-- 010_house_tables.sql -- 看房系统(House)核心数据模型:9 张表。 -- 约定:BIGINT UNSIGNED 自增主键;统一 created_at/updated_at/deleted_at(GoFrame 软删除); -- 经纬度 GCJ-02;价格单位(总价万元 / 单价元每平米)。 -- 幂等:CREATE TABLE IF NOT EXISTS,可重复执行。 -- 1) 楼盘/小区主档 CREATE TABLE IF NOT EXISTS house_community ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(128) NOT NULL COMMENT '小区/楼盘名', region VARCHAR(64) NOT NULL DEFAULT '' COMMENT '区县(云岩/南明/观山湖/花溪等)', business_district VARCHAR(64) NOT NULL DEFAULT '' COMMENT '板块', address VARCHAR(255) NOT NULL DEFAULT '' COMMENT '地址', lng DECIMAL(10,6) NOT NULL DEFAULT 0 COMMENT '经度(GCJ-02)', lat DECIMAL(10,6) NOT NULL DEFAULT 0 COMMENT '纬度(GCJ-02)', build_year INT NOT NULL DEFAULT 0 COMMENT '建成年份', households INT NOT NULL DEFAULT 0 COMMENT '总户数', plot_ratio DECIMAL(6,3) NOT NULL DEFAULT 0 COMMENT '容积率', green_rate DECIMAL(6,3) NOT NULL DEFAULT 0 COMMENT '绿化率', property_company VARCHAR(128) NOT NULL DEFAULT '' COMMENT '物业公司', property_fee DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT '物业费(元/月/平米)', developer VARCHAR(128) NOT NULL DEFAULT '' COMMENT '开发商', source VARCHAR(32) NOT NULL DEFAULT '' COMMENT '数据来源', created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, deleted_at DATETIME NULL, PRIMARY KEY (id), KEY idx_community_name (name), KEY idx_community_region (region, business_district), KEY idx_community_lnglat (lng, lat), KEY idx_community_deleted_at (deleted_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='楼盘/小区'; -- 2) 楼栋(具体到栋) CREATE TABLE IF NOT EXISTS house_building ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, community_id BIGINT UNSIGNED NOT NULL COMMENT '小区ID', building_no VARCHAR(32) NOT NULL DEFAULT '' COMMENT '栋号', units INT NOT NULL DEFAULT 0 COMMENT '单元数', total_floors INT NOT NULL DEFAULT 0 COMMENT '总楼层', elevator_count INT NOT NULL DEFAULT 0 COMMENT '电梯数', ladder_ratio VARCHAR(32) NOT NULL DEFAULT '' COMMENT '梯户比', building_type VARCHAR(16) NOT NULL DEFAULT '' COMMENT '板楼/塔楼', lng DECIMAL(10,6) NOT NULL DEFAULT 0 COMMENT '楼栋经度', lat DECIMAL(10,6) NOT NULL DEFAULT 0 COMMENT '楼栋纬度', created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, deleted_at DATETIME NULL, PRIMARY KEY (id), KEY idx_building_community (community_id), KEY idx_building_deleted_at (deleted_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='楼栋'; -- 3) 房源/挂牌(核心,多平台不去重) CREATE TABLE IF NOT EXISTS house_listing ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, community_id BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '小区ID', building_id BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '楼栋ID', house_no VARCHAR(64) NOT NULL DEFAULT '' COMMENT '房号', layout VARCHAR(32) NOT NULL DEFAULT '' COMMENT '户型(如3室2厅)', area DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT '建筑面积(平米)', usable_area DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT '套内面积(平米)', orientation VARCHAR(32) NOT NULL DEFAULT '' COMMENT '朝向', floor INT NOT NULL DEFAULT 0 COMMENT '所在楼层', total_floors INT NOT NULL DEFAULT 0 COMMENT '总楼层', decoration VARCHAR(32) NOT NULL DEFAULT '' COMMENT '装修', total_price DECIMAL(12,2) NOT NULL DEFAULT 0 COMMENT '总价(万元)', unit_price DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT '单价(元/平米)', list_price DECIMAL(12,2) NOT NULL DEFAULT 0 COMMENT '挂牌价(万元)', source VARCHAR(32) NOT NULL DEFAULT '' COMMENT '来源平台', source_house_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '平台侧房源ID', source_url VARCHAR(512) NOT NULL DEFAULT '' COMMENT '房源链接', match_group_id BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '疑似同房源分组(跨平台软关联)', on_market_days INT NOT NULL DEFAULT 0 COMMENT '挂牌天数', price_change_count INT NOT NULL DEFAULT 0 COMMENT '调价次数', status INT NOT NULL DEFAULT 1 COMMENT '1在售 2下架 3成交', confidence INT NOT NULL DEFAULT 0 COMMENT '可信度 0正常 1低可信', is_bargain INT NOT NULL DEFAULT 0 COMMENT '笋盘标记 0否 1是', listing_time DATETIME NULL COMMENT '挂牌时间', created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, deleted_at DATETIME NULL, PRIMARY KEY (id), UNIQUE KEY uk_listing_source_house (source, source_house_id), KEY idx_listing_community (community_id), KEY idx_listing_match_group (match_group_id), KEY idx_listing_unit_price (unit_price), KEY idx_listing_status (status), KEY idx_listing_deleted_at (deleted_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='房源/挂牌'; -- 4) 价格快照(时序,趋势分析命脉) CREATE TABLE IF NOT EXISTS house_price_snapshot ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, listing_id BIGINT UNSIGNED NOT NULL COMMENT '房源ID', community_id BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '小区ID', snap_date DATE NOT NULL COMMENT '快照日期', list_price DECIMAL(12,2) NOT NULL DEFAULT 0 COMMENT '挂牌价(万元)', deal_price DECIMAL(12,2) NOT NULL DEFAULT 0 COMMENT '成交价(万元)', created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, deleted_at DATETIME NULL, PRIMARY KEY (id), UNIQUE KEY uk_snapshot_listing_date (listing_id, snap_date), KEY idx_snapshot_community_date (community_id, snap_date), KEY idx_snapshot_deleted_at (deleted_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='价格快照'; -- 5) 成交记录 CREATE TABLE IF NOT EXISTS house_transaction ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, community_id BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '小区ID', building_id BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '楼栋ID', layout VARCHAR(32) NOT NULL DEFAULT '' COMMENT '户型', area DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT '面积(平米)', deal_price DECIMAL(12,2) NOT NULL DEFAULT 0 COMMENT '成交总价(万元)', deal_unit_price DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT '成交单价(元/平米)', list_days INT NOT NULL DEFAULT 0 COMMENT '挂牌到成交天数', deal_date DATE NULL COMMENT '成交日期', source VARCHAR(32) NOT NULL DEFAULT '' COMMENT '来源', created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, deleted_at DATETIME NULL, PRIMARY KEY (id), KEY idx_transaction_community (community_id), KEY idx_transaction_deal_date (deal_date), KEY idx_transaction_deleted_at (deleted_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成交记录'; -- 6) 配套 POI(地铁站/学校/医院/商圈) CREATE TABLE IF NOT EXISTS house_facility ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(128) NOT NULL COMMENT '配套名称', type VARCHAR(32) NOT NULL DEFAULT '' COMMENT '地铁/学校/医院/商圈', lng DECIMAL(10,6) NOT NULL DEFAULT 0 COMMENT '经度', lat DECIMAL(10,6) NOT NULL DEFAULT 0 COMMENT '纬度', line VARCHAR(32) NOT NULL DEFAULT '' COMMENT '地铁线路', created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, deleted_at DATETIME NULL, PRIMARY KEY (id), KEY idx_facility_type (type), KEY idx_facility_deleted_at (deleted_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='配套POI'; -- 7) 小区-配套关系 CREATE TABLE IF NOT EXISTS house_community_facility ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, community_id BIGINT UNSIGNED NOT NULL COMMENT '小区ID', facility_id BIGINT UNSIGNED NOT NULL COMMENT '配套ID', distance INT NOT NULL DEFAULT 0 COMMENT '距离(米)', commute_minutes INT NOT NULL DEFAULT 0 COMMENT '通勤分钟', created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, deleted_at DATETIME NULL, PRIMARY KEY (id), UNIQUE KEY uk_cf_community_facility (community_id, facility_id), KEY idx_cf_facility (facility_id), KEY idx_cf_deleted_at (deleted_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='小区-配套关系'; -- 8) 学区划片(版本化) CREATE TABLE IF NOT EXISTS house_school_district ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, school_name VARCHAR(128) NOT NULL COMMENT '学校名', community_id BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '小区ID', district_polygon TEXT NULL COMMENT '划片范围GeoJSON', district_year INT NOT NULL DEFAULT 0 COMMENT '划片年度', note VARCHAR(255) NOT NULL DEFAULT '' COMMENT '备注', created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, deleted_at DATETIME NULL, PRIMARY KEY (id), KEY idx_sd_community (community_id), KEY idx_sd_year (district_year), KEY idx_sd_deleted_at (deleted_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学区划片'; -- 9) 用户偏好画像 CREATE TABLE IF NOT EXISTS house_preference ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, budget_min DECIMAL(12,2) NOT NULL DEFAULT 0 COMMENT '预算下限(万元)', budget_max DECIMAL(12,2) NOT NULL DEFAULT 0 COMMENT '预算上限(万元)', area_min DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT '面积下限(平米)', area_max DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT '面积上限(平米)', layouts VARCHAR(255) NOT NULL DEFAULT '' COMMENT '户型偏好JSON', subway_lines VARCHAR(255) NOT NULL DEFAULT '' COMMENT '地铁线路JSON', school_required INT NOT NULL DEFAULT 0 COMMENT '是否要求学区', commute_target VARCHAR(255) NOT NULL DEFAULT '' COMMENT '通勤目标点', commute_limit_min INT NOT NULL DEFAULT 0 COMMENT '通勤上限(分钟)', region_prefer VARCHAR(255) NOT NULL DEFAULT '' COMMENT '区域偏好JSON', weights VARCHAR(512) NOT NULL DEFAULT '' COMMENT '权重JSON', created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, deleted_at DATETIME NULL, PRIMARY KEY (id), KEY idx_pref_deleted_at (deleted_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户偏好画像';