收藏
回答

请教小程序chooseAddress和地址数据库的开发?

小程序chooseAddress没有ID的概念,返回的是一堆的数据。如果是一个电商程序,不可能每个订单都完整保存这么一份地址数据。所以还是需要一个地址数据库来保持所有的地址,然后使用外键的方式关联。那么问题来了:

chooseAddress中,有可能是新增的地址,也可能是已经使用过的地址。在下单过程中,服务器拿到这个地址数据,先要判断这个地址时候已经添加在数据库中。如果已经添加,那么直接找到对应ID即可。如果没有添加,那么首先需要添加,再返回对应ID。所以这个时候就产生一个查询的问题,但是地址本身是一个对象,而且对象中的每个属性似乎都会影响唯一性。所以我们是不是必须逐个字段匹配,只有所有字段匹配才算查询成功。有什么更好的解决办法吗?数据库是MongoDB。而且还有一个问题,就是微信返回的数据随着版本更新可能也会有变更,这个时候似乎无解。只要返回的数据格式有变化,那么之前在数据库中保存的地址其实都是无效的(每次选择一个地址,不管有无添加,都视为新地址)。

请问有没有比较好的设计方式?

回答关注问题邀请回答
收藏

3 个回答

  • zooble
    zooble
    05-23

    从产品设计的角度考虑,你不可能让你的用户每次下单都重新选地址,所以必须要自己存一下,但是因为没有 ID,导致每次用户变更了地址都只能是新增。

    希望微信团队出个直接获取上次使用地址的 API 或者给下发地址 ID。

    05-23
    有用
    回复
  • 老张
    老张
    2022-02-03

    1、设计思路错误。

    如果是历史订单100个,用了地址A(北京)的外链,如果用户今天编辑修改了地址A(上海),那么100个历史订单的地址都变成了上海,而实际上这些已完成的订单都已寄到了北京。

    2022-02-03
    有用
    回复 6
    • Junwei
      Junwei
      2022-02-03
      这个可以解决,修改了地址A,可以新建一个地址即可。这样可以保证原来的地址在数据库中还是有效的,且不变的。
      2022-02-03
      回复
    • Junwei
      Junwei
      2022-02-03
      刚刚我提到另外两个问题:


      1. 那如果订单中包含商品信息或者其他一些数据量比较大的信息,也都是以对象形式保存不做关联?这样如果数据量比较大的话对数据库感觉不太友好啊。


      2. 淘宝,京东都有个收货地址管理。里面很多地址,难道是从订单中查询出来的?这个也不合理吧。肯定有一个专门为地址设计的表格,那如果表格有了,订单中的地址信息也没有理由保存整个对象了吧。虽然说是不会变了,但是一个用户下单可能一个地址下单几百上千次,使用外键也可以有效降低冗余。
      2022-02-03
      回复
    • 老张
      老张
      2022-02-03回复Junwei
      既然是Mongo,订单中的地址写死保持不变完事,唯一正确方式,不需要讨论的问题。既然唯一方式,什么数据冗余啥的不需要考虑和讨论。
      2022-02-03
      回复
    • 老张
      老张
      2022-02-03回复Junwei
      猜你是个mongo新手;对在mongo中用外链啊,联表啊,完全没有体会。建议你大胆用吧,最后总会变成:宁愿数据冗余,也不用联表的。
      2022-02-03
      回复
    • Junwei
      Junwei
      2022-02-03
      技术讨论,自然要分析其利弊。我也提出了我的几点疑虑,暂时还没有还得到合理解答。至于你提到的编辑问题,我也给出了解决方案(至少从我的目前的认知来看是可行的)。所以至少目前看来似乎还是使用外键的方案更合理。如果这是唯一的正确方式,还望不吝赐教。
      2022-02-03
      回复
    查看更多(1)
  • 神经蛙
    神经蛙
    2022-02-03

    订单里直接保存地址信息,不要用外键关联

    2022-02-03
    有用
    回复 9
    • Junwei
      Junwei
      2022-02-03
      这样数据冗余太多了吧。。。
      2022-02-03
      回复
    • 神经蛙
      神经蛙
      2022-02-03回复Junwei
      这是正确的设计,订单这里都是快照数据,没有人做外键关联的。订单里的数据下单以后就不能变了。
      2022-02-03
      回复
    • Junwei
      Junwei
      2022-02-03
      那默认地址就直接以对象形式保存在用户信息中了?
      2022-02-03
      回复
    • Junwei
      Junwei
      2022-02-03
      那如果订单中包含商品信息或者其他一些数据量比较大的信息,也都是以对象形式保存不做关联?这样如果数据量比较大的话对数据库感觉不太友好啊。
      2022-02-03
      回复
    • Junwei
      Junwei
      2022-02-03
      淘宝,京东都有个收货地址管理。里面很多地址,难道是从订单中查询出来的?这个也不合理吧。肯定有一个专门为地址设计的表格,那如果表格有了,订单中的地址信息也没有理由保存整个对象了吧。虽然说是不会变了,但是一个用户下单可能一个地址下单几百上千次,使用外键也可以有效降低冗余。
      2022-02-03
      回复
    查看更多(4)
登录 后发表内容