AI Agent 工程 · 10
10.2 客服系统的数据结构与租户边界
从商家、客户、订单和工单关系设计最小且可隔离的数据模型。
目标与结构
学习目标:为两家模拟商家建立不会串数据的最小模型。前置 07 State、08 RAG 隔离。每个业务表带 merchant_id;查询既按商家又按客户过滤,不能只凭一个订单号。
merchants ──< customers
│ └──< orders ──< tickets
└── tenant_id 是每次授权查询的必需条件
orders.customer_id 和 orders.merchant_id 是可验证关系;tickets 记录售后状态;idempotency_keys 记录已处理请求,避免网络重试重复建单。生产中还需迁移、索引、备份、加密与 RBAC;本节不把 SQLite 示例误称为完整企业库。
实践、失败与回忆
查看 V4 的参数化 SQL。正常输入是 Northwind/Amy/XB-1024;Contoso/Ben/XB-1024 必须得到 null。验收:tenant isolation 通过。常见错误是先按 ID 读出订单、再在应用层“希望”过滤;应在查询条件中限制租户。
主动回忆:为什么工单表也要带 merchant_id,即使它已经引用订单?
- 必须记:租户隔离在每一个查询边界实施。
- 建议记:外键保护关系,不能自动完成授权。
- 不用记:示例客户名。