存在两个指向相同数据表的关联时,我的DB模型应当如何设计?
方案可行性评估与优化建议
现有方案可行性
你当前的设计可以正常跑通,但存在两个相似关联表会带来明显的维护冗余:后续修改产品关联规则时需要同时同步两张表的逻辑,很容易出现数据不一致的问题,也会增加多表联查的复杂度。
更优的重构方案
1. 统一用户身份标识
在用户表新增user_type字段,设为枚举类型,可选值为trader(交易员)、customer(客户),不需要拆分用户表即可快速区分两类用户身份,后续如果新增用户角色直接加枚举值即可,改造成本极低。
2. 合并重复关联表
删掉两张相似的关联表,只用一张product_relation表承载所有关联逻辑,字段设计如下:
id主键product_id产品IDtarget_user_id关联的用户IDrelation_type关联类型,枚举值:owner:表示该用户是产品的所有者(仅user_type=trader的用户可以有这个类型的关联)visible:表示该用户可查看对应的特殊产品
product_type产品类型,枚举值normal/special,用于区分关联的是普通产品还是Special_product表中的特殊产品
3. 订单表逻辑优化
Order_table表保留原有结构的基础上,新增product_type字段,下单时直接标记订单对应的产品类型,查询订单关联产品时可以直接路由到对应产品表,不需要额外关联判断。
方案优势
- 彻底消除冗余表,所有产品关联逻辑统一在一张表维护,不会出现数据不同步的问题
- 扩展性更强,后续如果要新增普通产品的可见权限、产品多所有者等需求,只需要新增
relation_type枚举值即可,不需要调整表结构 - 查询逻辑更简洁,查用户持有的产品、可见的特殊产品都只需要关联单张关联表即可,性能更优
内容的提问来源于stack exchange,提问作者N0ne
相关产品推荐
相关产品推荐

