Files
junhong_cmp_fiber/migrations/000001_init_schema.up.sql
huang 984ccccc63 docs(constitution): 新增数据库设计原则(v2.4.0)
在项目宪章中新增第九条原则"数据库设计原则",明确禁止使用数据库外键约束和ORM关联标签。

主要变更:
- 新增原则IX:数据库设计原则(Database Design Principles)
- 强制要求:数据库表不得使用外键约束
- 强制要求:GORM模型不得使用ORM关联标签(foreignKey、hasMany等)
- 强制要求:表关系必须通过ID字段手动维护
- 强制要求:关联数据查询必须显式编写,避免ORM魔法
- 强制要求:时间字段由GORM处理,不使用数据库触发器

设计理念:
- 提升业务逻辑灵活性(无数据库约束限制)
- 优化高并发性能(无外键检查开销)
- 增强代码可读性(显式查询,无隐式预加载)
- 简化数据库架构和迁移流程
- 支持分布式和微服务场景

版本升级:2.3.0 → 2.4.0(MINOR)
2025-11-13 13:40:19 +08:00

81 lines
2.7 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.
-- migrations/000001_init_schema.up.sql
-- 初始化数据库 Schema
-- 创建 tb_user 和 tb_order 表、索引
-- 注意: 表关系和 updated_at 更新在代码中处理
-- 用户表
CREATE TABLE IF NOT EXISTS tb_user (
id SERIAL PRIMARY KEY,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted_at TIMESTAMP,
-- 基本信息
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
password VARCHAR(255) NOT NULL,
-- 状态字段
status VARCHAR(20) NOT NULL DEFAULT 'active',
-- 元数据
last_login_at TIMESTAMP,
-- 唯一约束
CONSTRAINT uk_user_username UNIQUE (username),
CONSTRAINT uk_user_email UNIQUE (email)
);
-- 用户表索引
CREATE INDEX idx_user_deleted_at ON tb_user(deleted_at);
CREATE INDEX idx_user_status ON tb_user(status);
CREATE INDEX idx_user_created_at ON tb_user(created_at);
-- 订单表
CREATE TABLE IF NOT EXISTS tb_order (
id SERIAL PRIMARY KEY,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted_at TIMESTAMP,
-- 业务唯一键
order_id VARCHAR(50) NOT NULL,
-- 关联关系 (注意: 无数据库外键约束,在代码中管理)
user_id INTEGER NOT NULL,
-- 订单信息
amount BIGINT NOT NULL,
status VARCHAR(20) NOT NULL DEFAULT 'pending',
remark VARCHAR(500),
-- 时间字段
paid_at TIMESTAMP,
completed_at TIMESTAMP,
-- 唯一约束
CONSTRAINT uk_order_order_id UNIQUE (order_id)
);
-- 订单表索引
CREATE INDEX idx_order_deleted_at ON tb_order(deleted_at);
CREATE INDEX idx_order_user_id ON tb_order(user_id);
CREATE INDEX idx_order_status ON tb_order(status);
CREATE INDEX idx_order_created_at ON tb_order(created_at);
CREATE INDEX idx_order_order_id ON tb_order(order_id);
-- 添加注释
COMMENT ON TABLE tb_user IS '用户表';
COMMENT ON COLUMN tb_user.username IS '用户名(唯一)';
COMMENT ON COLUMN tb_user.email IS '邮箱(唯一)';
COMMENT ON COLUMN tb_user.password IS '密码bcrypt 哈希)';
COMMENT ON COLUMN tb_user.status IS '用户状态active, inactive, suspended';
COMMENT ON COLUMN tb_user.deleted_at IS '软删除时间';
COMMENT ON TABLE tb_order IS '订单表';
COMMENT ON COLUMN tb_order.order_id IS '订单号(业务唯一键)';
COMMENT ON COLUMN tb_order.user_id IS '用户 ID在代码中维护关联无数据库外键';
COMMENT ON COLUMN tb_order.amount IS '金额(分)';
COMMENT ON COLUMN tb_order.status IS '订单状态pending, paid, processing, completed, cancelled';
COMMENT ON COLUMN tb_order.deleted_at IS '软删除时间';