在项目宪章中新增第九条原则"数据库设计原则",明确禁止使用数据库外键约束和ORM关联标签。 主要变更: - 新增原则IX:数据库设计原则(Database Design Principles) - 强制要求:数据库表不得使用外键约束 - 强制要求:GORM模型不得使用ORM关联标签(foreignKey、hasMany等) - 强制要求:表关系必须通过ID字段手动维护 - 强制要求:关联数据查询必须显式编写,避免ORM魔法 - 强制要求:时间字段由GORM处理,不使用数据库触发器 设计理念: - 提升业务逻辑灵活性(无数据库约束限制) - 优化高并发性能(无外键检查开销) - 增强代码可读性(显式查询,无隐式预加载) - 简化数据库架构和迁移流程 - 支持分布式和微服务场景 版本升级:2.3.0 → 2.4.0(MINOR)
31 lines
817 B
Go
31 lines
817 B
Go
package model
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
// Order 订单实体
|
|
type Order struct {
|
|
BaseModel
|
|
|
|
// 业务唯一键
|
|
OrderID string `gorm:"uniqueIndex:uk_order_order_id;not null;size:50" json:"order_id"`
|
|
|
|
// 关联关系 (仅存储 ID,不使用 GORM 关联)
|
|
UserID uint `gorm:"not null;index:idx_order_user_id" json:"user_id"`
|
|
|
|
// 订单信息
|
|
Amount int64 `gorm:"not null" json:"amount"` // 金额(分)
|
|
Status string `gorm:"not null;size:20;default:'pending';index:idx_order_status" json:"status"`
|
|
Remark string `gorm:"size:500" json:"remark,omitempty"`
|
|
|
|
// 时间字段
|
|
PaidAt *time.Time `gorm:"column:paid_at" json:"paid_at,omitempty"`
|
|
CompletedAt *time.Time `gorm:"column:completed_at" json:"completed_at,omitempty"`
|
|
}
|
|
|
|
// TableName 指定表名
|
|
func (Order) TableName() string {
|
|
return "tb_order"
|
|
}
|