Files
shensheshou/开发文档/7、数据库/_智能展开.md

9.9 KiB
Raw Blame History

💾 数据库智能展开引擎 (Database Auto-Expand)

角色激活: 将此文件拖入 AI即刻激活 DBA 角色 核心能力: MongoDB 设计、向量索引、ER 图、查询优化


📋 一、快速启动指令

1.1 需求转数据库

@数据库引擎 请根据以下需求,生成完整的数据库设计:

【模块名称】:[模块名]
【核心实体】:[主要数据对象]
【AI需求】[是否需要向量检索]
【数据规模】:[预估数据量]

1.2 展开输出清单

输出项 说明 格式
ER 图 实体关系图 Mermaid erDiagram
集合设计 MongoDB 集合结构 JSON Schema
索引策略 索引定义 MongoDB 命令
向量配置 向量索引(如需) Atlas 配置
查询示例 常用查询 MongoDB 聚合

🛠️ 二、数据库选型

2.1 卡若数据库策略

┌─────────────────────────────────────────────────────────────────────┐
│                        数据库选型策略                                │
├─────────────────────────────────────────────────────────────────────┤
│  📦 MongoDB (首选)                                                  │
│  ├── 适用:业务数据、用户数据、日志数据                              │
│  ├── 优势:灵活 Schema、内置向量索引、JSON 原生                      │
│  └── 部署Atlas 云服务 / 自建副本集                                │
├─────────────────────────────────────────────────────────────────────┤
│  🔍 向量能力                                                        │
│  ├── MongoDB Atlas Vector Search (推荐)                            │
│  ├── ChromaDB (轻量本地)                                            │
│  └── Pinecone (大规模云端)                                          │
├─────────────────────────────────────────────────────────────────────┤
│  💰 MySQL (可选)                                                    │
│  ├── 适用:强事务场景(资金流水、订单)                              │
│  └── 部署:腾讯云 CDB                                               │
├─────────────────────────────────────────────────────────────────────┤
│  ⚡ Redis                                                           │
│  ├── 适用缓存、Session、限流计数                                   │
│  └── 部署:云 Redis / 自建                                          │
└─────────────────────────────────────────────────────────────────────┘

📊 三、集合设计规范

3.1 命名规范

集合命名:
  格式: 复数、小写、下划线分隔
  示例: 
    ✅ users, traffic_pools, order_records
    ❌ User, trafficPool, OrderRecord

字段命名:
  格式: 小写、下划线分隔
  示例:
    ✅ user_id, created_at, is_deleted
    ❌ userId, createdAt, isDeleted

特殊字段:
  _id: 主键MongoDB 自动生成)
  created_at: 创建时间
  updated_at: 更新时间
  is_deleted: 软删除标记

3.2 核心集合模板

users (用户表)

{
  _id: ObjectId,
  mobile: "15880802661",           // 手机号(加密存储)
  password_hash: "xxx",            // 密码哈希
  nickname: "卡若",
  avatar: "https://...",
  role: "user",                    // user/admin/partner
  status: "active",                // active/disabled
  
  // 云阿米巴字段
  inviter_id: ObjectId,            // 邀请人 ID
  team_count: 0,                   // 团队人数
  total_earnings: 0.00,            // 累计收益
  withdrawable: 0.00,              // 可提现金额
  
  // 元数据
  created_at: ISODate,
  updated_at: ISODate,
  last_login_at: ISODate,
  is_deleted: false
}

// 索引
db.users.createIndex({ mobile: 1 }, { unique: true })
db.users.createIndex({ inviter_id: 1 })
db.users.createIndex({ created_at: -1 })

traffic_pools (流量池)

{
  _id: ObjectId,
  user_id: ObjectId,               // 所属用户
  name: "抖音本地生活",
  description: "厦门本地餐饮流量",
  
  // 统计数据
  total_count: 1234,               // 总流量数
  today_count: 56,                 // 今日新增
  conversion_rate: 0.05,           // 转化率
  
  // 向量字段AI 检索)
  embedding: [0.1, 0.2, ...],      // 1536 维向量
  
  // 状态
  status: "active",                // active/paused/deleted
  
  // 元数据
  created_at: ISODate,
  updated_at: ISODate,
  is_deleted: false
}

// 索引
db.traffic_pools.createIndex({ user_id: 1 })
db.traffic_pools.createIndex({ status: 1 })
db.traffic_pools.createIndex({ created_at: -1 })

earnings (收益记录)

{
  _id: ObjectId,
  user_id: ObjectId,
  
  // 收益信息
  amount: 12.50,                   // 金额(精确到分)
  type: "order_commission",        // 收益类型
  source_id: ObjectId,             // 来源 ID
  source_type: "order",            // 来源类型
  
  // 描述
  description: "用户 A 下单佣金",
  
  // 元数据
  created_at: ISODate
}

// 索引
db.earnings.createIndex({ user_id: 1, created_at: -1 })
db.earnings.createIndex({ type: 1 })

🔍 四、向量索引配置

// 创建向量索引Atlas UI 或 API
{
  "mappings": {
    "dynamic": true,
    "fields": {
      "embedding": {
        "type": "knnVector",
        "dimensions": 1536,
        "similarity": "cosine"
      }
    }
  }
}

4.2 向量搜索查询

// 语义搜索
db.knowledge_base.aggregate([
  {
    "$vectorSearch": {
      "index": "vector_index",
      "path": "embedding",
      "queryVector": [0.1, 0.2, ...],  // 查询向量
      "numCandidates": 100,
      "limit": 10
    }
  },
  {
    "$project": {
      "content": 1,
      "score": { "$meta": "vectorSearchScore" }
    }
  }
])

📈 五、常用查询模板

5.1 分页查询

// 流量池列表(分页 + 搜索)
db.traffic_pools.aggregate([
  { $match: { user_id: ObjectId("xxx"), is_deleted: false } },
  { $match: { name: { $regex: "关键词", $options: "i" } } },
  { $sort: { created_at: -1 } },
  { $facet: {
      data: [{ $skip: 0 }, { $limit: 20 }],
      total: [{ $count: "count" }]
  }}
])

5.2 统计查询

// 用户收益统计
db.earnings.aggregate([
  { $match: { user_id: ObjectId("xxx") } },
  { $group: {
      _id: null,
      today: { $sum: { $cond: [
        { $gte: ["$created_at", ISODate("今天")] },
        "$amount", 0
      ]}},
      this_month: { $sum: { $cond: [
        { $gte: ["$created_at", ISODate("本月1日")] },
        "$amount", 0
      ]}},
      total: { $sum: "$amount" }
  }}
])

📊 六、ER 图模板

erDiagram
    User ||--o{ TrafficPool : owns
    User ||--o{ Earning : has
    User ||--o{ Withdrawal : requests
    User ||--o{ User : invites
    
    TrafficPool ||--o{ TrafficItem : contains
    TrafficPool {
        ObjectId _id
        ObjectId user_id
        string name
        array embedding "Vector[1536]"
        int total_count
        string status
    }
    
    User {
        ObjectId _id
        string mobile
        string nickname
        ObjectId inviter_id
        float total_earnings
        float withdrawable
    }
    
    Earning {
        ObjectId _id
        ObjectId user_id
        float amount
        string type
        datetime created_at
    }
    
    Withdrawal {
        ObjectId _id
        ObjectId user_id
        float amount
        string status
        datetime created_at
    }

🔗 七、跨目录联动

graph LR
    A[5、接口] -->|数据结构| B[7、数据库]
    C[6、后端] -->|Model| B
    B -->|备份策略| D[8、部署]

联动指令

@联动 接口→数据库:基于 [请求响应] 生成集合设计
@联动 数据库→后端:基于 [集合设计] 生成 Pydantic 模型

🤖 八、AI 协作指令

指令 功能 示例
@生成集合 生成集合结构 @生成集合 订单模块
@生成ER图 生成关系图 @生成ER图 用户相关
@生成索引 生成索引策略 @生成索引 流量池集合
@生成查询 生成聚合查询 @生成查询 用户收益统计
@向量配置 生成向量索引 @向量配置 知识库

⚠️ 九、注意事项

9.1 安全规范

必须做:
  - [ ] 敏感字段加密存储(手机号、身份证)
  - [ ] 密码必须 HashArgon2
  - [ ] 所有查询参数化
  - [ ] 定期备份

禁止做:
  - [ ] 明文存储密码
  - [ ] 在日志中打印敏感数据
  - [ ] 直接拼接查询条件

9.2 性能优化

索引原则:
  - 查询字段必建索引
  - 复合索引注意顺序
  - 避免过多索引

查询优化:
  - 避免 $where 和 $regex无索引
  - 大数据量用游标分批处理
  - 统计查询加缓存

下一步: 数据库设计完成后,拖入 8、部署/_智能展开.md 进行部署配置