-- V1.0
-- 时间维度表
CREATE TABLE dim_date (
date_id INT PRIMARY KEY COMMENT '日期ID (YYYYMMDD)',
full_date DATE NOT NULL COMMENT '完整日期',
year SMALLINT NOT NULL COMMENT '年份',
quarter TINYINT NOT NULL COMMENT '季度 (1-4)',
month TINYINT NOT NULL COMMENT '月份 (1-12)',
week TINYINT NOT NULL COMMENT '年内周数 (1-53)',
day_of_week TINYINT NOT NULL COMMENT '星期几 (1=周一,7=周日)',
is_holiday BOOLEAN DEFAULT 0 NOT NULL COMMENT '是否节假日',
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录修改时间',
INDEX idx_full_date (full_date),
INDEX idx_year_month (year, month)
) ENGINE=InnoDB COMMENT '时间维度表';
-- 个人乘车信息表
CREATE TABLE fact_transport (
transport_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '乘车ID',
date_id INT NOT NULL COMMENT '日期ID',
vehicle_type VARCHAR(20) NOT NULL COMMENT '交通工具类型',
start_location VARCHAR(50) COMMENT '出发地',
end_location VARCHAR(50) COMMENT '目的地',
cost DECIMAL(10,2) COMMENT '费用',
distance_km DECIMAL(6,2) COMMENT '距离(公里)',
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录修改时间',
FOREIGN KEY (date_id) REFERENCES dim_date(date_id),
INDEX idx_vehicle_type (vehicle_type)
) ENGINE=InnoDB COMMENT '乘车信息表';
-- 饮食记录表
CREATE TABLE fact_diet (
diet_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '饮食ID',
date_id INT NOT NULL COMMENT '日期ID',
meal_type VARCHAR(10) NOT NULL COMMENT '餐别',
food_items TEXT NOT NULL COMMENT '食物清单',
calories INT COMMENT '卡路里',
location VARCHAR(50) COMMENT '用餐地点',
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录修改时间',
FOREIGN KEY (date_id) REFERENCES dim_date(date_id),
INDEX idx_meal_type (meal_type)
) ENGINE=InnoDB COMMENT '饮食记录表';
-- 健身运动记录表
CREATE TABLE fact_exercise (
exercise_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '运动ID',
date_id INT NOT NULL COMMENT '日期ID',
activity_type VARCHAR(20) NOT NULL COMMENT '运动类型',
duration_min INT NOT NULL COMMENT '时长(分钟)',
calories_burned INT COMMENT '消耗卡路里',
equipment VARCHAR(50) COMMENT '使用器材',
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录修改时间',
FOREIGN KEY (date_id) REFERENCES dim_date(date_id),
INDEX idx_activity (activity_type)
) ENGINE=InnoDB COMMENT '健身运动表';
-- 购物记录表
CREATE TABLE fact_shopping (
purchase_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '购物ID',
date_id INT NOT NULL COMMENT '日期ID',
item_name VARCHAR(100) NOT NULL COMMENT '商品名称',
category VARCHAR(30) NOT NULL COMMENT '商品类别',
quantity INT NOT NULL COMMENT '数量',
price DECIMAL(10,2) NOT NULL COMMENT '单价',
store VARCHAR(50) COMMENT '商店名称',
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录修改时间',
FOREIGN KEY (date_id) REFERENCES dim_date(date_id),
INDEX idx_category (category)
) ENGINE=InnoDB COMMENT '购物记录表';
-- 消费记录表
CREATE TABLE fact_expense (
expense_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '消费ID',
date_id INT NOT NULL COMMENT '日期ID',
amount DECIMAL(10,2) NOT NULL COMMENT '金额',
payment_method VARCHAR(20) NOT NULL COMMENT '支付方式',
expense_type VARCHAR(30) NOT NULL COMMENT '消费类型',
description TEXT COMMENT '详细描述',
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录修改时间',
FOREIGN KEY (date_id) REFERENCES dim_date(date_id),
INDEX idx_expense_type (expense_type)
) ENGINE=InnoDB COMMENT '消费记录表';
-- 学习记录表
CREATE TABLE fact_learning (
learning_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '学习ID',
date_id INT NOT NULL COMMENT '日期ID',
content_type VARCHAR(20) NOT NULL COMMENT '内容类型',
title VARCHAR(100) NOT NULL COMMENT '标题/书名',
duration_min INT COMMENT '时长(分钟)',
rating TINYINT COMMENT '评分 (1-5)',
notes TEXT COMMENT '笔记/感想',
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录修改时间',
FOREIGN KEY (date_id) REFERENCES dim_date(date_id),
INDEX idx_content_type (content_type)
) ENGINE=InnoDB COMMENT '学习记录表';
-- 每日事实表
CREATE TABLE fact_daily_summary (
summary_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '汇总ID',
date_id INT NOT NULL COMMENT '日期ID',
total_transport INT DEFAULT 0 COMMENT '当日乘车次数',
total_calories INT DEFAULT 0 COMMENT '当日摄入总卡路里',
total_exercise_min INT DEFAULT 0 COMMENT '当日运动总时长',
total_expense DECIMAL(10,2) DEFAULT 0 COMMENT '当日消费总额',
learning_hours DECIMAL(4,1) DEFAULT 0 COMMENT '当日学习时长(小时)',
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录修改时间',
FOREIGN KEY (date_id) REFERENCES dim_date(date_id),
UNIQUE KEY unique_date (date_id)
) ENGINE=InnoDB COMMENT '每日汇总表';