如何判断 业务实体 ,设计实体用 2表 还是 3表;

如何判断是  2表 还是 3表;

 

Ad material

然后现在有个需求需要保存他们的快照;;

ad下面有三种关系  1.1 List<materials> getCurrentMaterials() 

1.2  List<Materials> getHistoryAndCurrentMaterial(); 允许ad增加物料,删除物料,个数不限制;

这个关系组合, 1.1 1.2 可以用 两个关系表(两个外键, 可以 两个实体表,一个中间表实现 ,也可以把外键附属在N侧实体) ,或者 用一个@where注解+ 一个外键+一个类型字段( 可以)

 

另外一个是  2.  <Date , List<Material> > getMaterialsSnapShots() ;   每隔1天存储一次当时的物料list ;;

和  1.1 和 1.2的关系组合的后一种实现一样; 一个外键+一个类型字段Date ,或者是 一个外键+ list.Size()个外键字段

 

对于1.1 来说: 当前的materials ,  即使material的内容变,无所谓,当前的materials不影响;; 引用没变;

对于1.2 来说: 可以考虑 和1的外键进行捆绑,新增一个字段, ,,实体世界可以是用一个where进行区分;; 或者用< tyep , List<Materials>> getmaterials() 来代替(  List<materials> getCurrentMaterials()  和 List<Materials> getHistoryAndCurrentMaterial();  type的类型可以是 1. 当前物料, 2. 所有的物料 ) 实现比较好, 避免脏的设计, 类型过多的时候;;

对于2来说: materials变不变对这个都没有影响;materials内容变了,存储的materials 不会改变;; 即使 getCurrentMaterials的个数变了,也不会影响到getMaterialsSnapShots指向的引用物料;;

 

避免一个关系就需要用一个外键来实现,或者一个关系表来实现的OO设计技巧;;

 

 

对于简单的 

List<material> getMaterials

List<material> getHistoryMaterials 来说比较简单 ;

 

=======

但是增加了一个 @where 就复杂了;;

或者 Map<Date,List<Material>> getMaterialsSnapShot

 

用一个Date 对应多少个Material ,一个Material能否属于多个Date 来考虑是否需要用关联表;;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值