小程序chooseAddress没有ID的概念,返回的是一堆的数据。如果是一个电商程序,不可能每个订单都完整保存这么一份地址数据。所以还是需要一个地址数据库来保持所有的地址,然后使用外键的方式关联。那么问题来了:
在chooseAddress中,有可能是新增的地址,也可能是已经使用过的地址。在下单过程中,服务器拿到这个地址数据,先要判断这个地址时候已经添加在数据库中。如果已经添加,那么直接找到对应ID即可。如果没有添加,那么首先需要添加,再返回对应ID。所以这个时候就产生一个查询的问题,但是地址本身是一个对象,而且对象中的每个属性似乎都会影响唯一性。所以我们是不是必须逐个字段匹配,只有所有字段匹配才算查询成功。有什么更好的解决办法吗?数据库是MongoDB。而且还有一个问题,就是微信返回的数据随着版本更新可能也会有变更,这个时候似乎无解。只要返回的数据格式有变化,那么之前在数据库中保存的地址其实都是无效的(每次选择一个地址,不管有无添加,都视为新地址)。
请问有没有比较好的设计方式?
从产品设计的角度考虑,你不可能让你的用户每次下单都重新选地址,所以必须要自己存一下,但是因为没有 ID,导致每次用户变更了地址都只能是新增。
希望微信团队出个直接获取上次使用地址的 API 或者给下发地址 ID。
1、设计思路错误。
如果是历史订单100个,用了地址A(北京)的外链,如果用户今天编辑修改了地址A(上海),那么100个历史订单的地址都变成了上海,而实际上这些已完成的订单都已寄到了北京。
1. 那如果订单中包含商品信息或者其他一些数据量比较大的信息,也都是以对象形式保存不做关联?这样如果数据量比较大的话对数据库感觉不太友好啊。
2. 淘宝,京东都有个收货地址管理。里面很多地址,难道是从订单中查询出来的?这个也不合理吧。肯定有一个专门为地址设计的表格,那如果表格有了,订单中的地址信息也没有理由保存整个对象了吧。虽然说是不会变了,但是一个用户下单可能一个地址下单几百上千次,使用外键也可以有效降低冗余。
订单里直接保存地址信息,不要用外键关联