4.8 KiB
4.8 KiB
02 关系与 ER(文字版)
本节用“文字版 ER + 基数(1:1 / 1:N)”描述核心表关系,并提示哪些约束来自数据库(唯一约束/外键/触发器)。
1. 统一用户体系(复用 ak_users)
ak_users作为统一用户主表,商城域表通过user_id/merchant_id外键关联。
重要前提:RLS 策略通过
auth.uid()映射ak_users.auth_id(详见05_rls_permissions_matrix.md)。因此ak_users必须具备auth_id字段并保持唯一性(建议unique index)。
2. 用户域
2.1 ak_users 1:1 ml_user_profiles
- 关系:一用户一商城档案
- 依据:
ml_user_profiles.user_id UNIQUE NOT NULL REFERENCES ak_users(id)
2.2 ak_users 1:N ml_user_addresses
- 关系:一个用户多个地址
- 默认地址约束:同一用户最多一个
is_default = true- 依据:触发器
ensure_single_default_address()(数据库层自动维护)
- 依据:触发器
3. 店铺/商家域
3.1 ak_users(merchant) 1:1 ml_shops
- 关系:一个商家一个店铺(当前模型)
- 依据:
ml_shops.merchant_id UNIQUE NOT NULL REFERENCES ak_users(id)
影响:订单主表可直接记录
merchant_id,无需子订单拆分即可查询店铺信息。
4. 商品域
4.1 ml_categories 1:N ml_categories(自关联分类树)
- 关系:父分类包含多个子分类
- 依据:
ml_categories.parent_id REFERENCES ml_categories(id)
4.2 ml_categories 1:N ml_products
- 关系:一个分类包含多个商品
- 依据:
ml_products.category_id NOT NULL REFERENCES ml_categories(id)
4.3 ml_brands 1:N ml_products
- 关系:一个品牌对应多个商品
- 依据:
ml_products.brand_id REFERENCES ml_brands(id)(可空)
4.4 ml_products 1:N ml_product_skus
- 关系:一个商品(SPU)有多个 SKU
- 依据:
ml_product_skus.product_id NOT NULL REFERENCES ml_products(id) ON DELETE CASCADE
4.5 ml_products 1:N ml_product_specs
- 关系:一个商品定义多个规格项
- 依据:
ml_product_specs.product_id NOT NULL REFERENCES ml_products(id) ON DELETE CASCADE
4.6 库存汇总(触发器关系)
- 事件:
ml_product_skusINSERT/UPDATE/DELETE - 结果:触发器
update_product_stock()汇总更新ml_products.total_stock/available_stock
5. 交易域
5.1 ak_users(customer) 1:N ml_orders
- 关系:用户有多个订单
- 依据:
ml_orders.user_id NOT NULL REFERENCES ak_users(id)
5.2 ak_users(merchant) 1:N ml_orders
- 关系:商家有多个订单
- 依据:
ml_orders.merchant_id NOT NULL REFERENCES ak_users(id)
当前订单模型为“单商家订单”(
ml_orders直接记录merchant_id)。若要支持“一单多商家”,通常需要主/子订单拆分。
5.3 ml_orders 1:N ml_order_items
- 关系:订单包含多个明细
- 依据:
ml_order_items.order_id NOT NULL REFERENCES ml_orders(id) ON DELETE CASCADE
5.4 ml_orders 1:1 ml_delivery_tasks(当前)
- 关系:一个订单最多一个配送任务
- 依据:
ml_delivery_tasks.order_id UNIQUE NOT NULL REFERENCES ml_orders(id)
6. 营销域
6.1 ml_coupon_templates 1:N ml_user_coupons
- 关系:一个模板可被多个用户领取
- 依据:
ml_user_coupons.template_id NOT NULL REFERENCES ml_coupon_templates(id)
6.2 ml_user_coupons N:1 ml_orders(可选关联)
- 关系:券在使用时关联订单
- 依据:
ml_user_coupons.order_id REFERENCES ml_orders(id)(可空)
7. 评价域
7.1 ml_orders 1:N ml_product_reviews(概念上)
- 关系:订单可产生多个评价(通常按明细评价)
- 依据:
ml_product_reviews.order_id NOT NULL REFERENCES ml_orders(id)
7.2 ml_order_items 1:1/N ml_product_reviews
- 关系:明细可对应评价(实现上可以 1:1,也可以允许追评,取决于业务约束)
- 依据:
ml_product_reviews.order_item_id NOT NULL REFERENCES ml_order_items(id)
8. 行为域
ak_users1:Nml_user_favoritesak_users1:Nml_browse_historyak_users0..Nml_search_history(可匿名搜索时 user_id 为空)
9. 订阅域
9.1 ml_subscription_plans 1:N ml_user_subscriptions
- 关系:一个套餐对应多个用户订阅实例
- 依据:
ml_user_subscriptions.plan_id REFERENCES ml_subscription_plans(id)
9.2 ak_users 1:N ml_user_subscriptions
- 关系:一个用户可有多个订阅记录(例如历史续费、升级降级)
- 依据:
ml_user_subscriptions.user_id(当前脚本未声明外键到ak_users,建议在项目侧补齐或在应用层保证一致性)