用于在不同业务级别处理相似/相同对象的数据库结构



场景

一家知名的taco公司希望构建一款型号为ComboComboItemIngredientOrder的Django应用程序。

  1. 总部希望用包含的物品创建各种组合,并布局原始物品的成分和价格
  2. 然后,每个特许经营店都可以选择他们将在菜单上出售的组合,并可以调整他们商店的组合商品的价格和成分
  3. 当收到订单时,组合和商品详细信息应显示在日志上,如果总部重新命名组合或特许经营更改价格/成分,则未来不应更改

用例

  1. 总部创建了"热玉米饼组合"。它有三个相关的组合项目

    • 一份墨西哥玉米卷(价格:0.99美元,配料:贝壳、牛肉、奶酪、辣酱(
    • churro螺旋(价格:.79美元(
    • 饮料(价格:1.29美元(
  2. 纽约的特许经营店在菜单上增加了热玉米饼套餐。他们将玉米卷的价格调整到1.49美元,并在玉米卷中加入生菜。

  3. 一位顾客点了墨西哥卷饼上没有奶酪的套餐。

  4. 总部将该组合的名称更改为Fiery Taco combo-纽约的组合名称更新,但该玉米卷保持不变的自定义价格,仍包括生菜。

  5. 纽约特许经营店的一位经理查看了所有订单,并查看了热玉米饼组合的一份订单,而玉米饼的配料只有外壳、肉和生菜。

问题

我正在努力决定处理这一问题的最佳方式,因为Combo在所有三个级别上基本上都是相同的对象,但其相关的ComboItem对象可能不同。HQ应该能够更新组合属性,如名称,它将更新所有特许经营组合名称,但组合项自定义应该保留。此外,为了获得准确的订单记录,销售点的组合详细信息和定制信息在记录后永远不应更改。

最初,我想为每个相关的模型和对象都有一个AbstractBaseClass,这些模型和对象在每个业务级别继承自它们,但这种结构感觉是多余的,很难维护。

然后,我想使用GenericForeignKey将组合与总部、特许经营或订单相关联,并在必要时在对象向下移动时复制对象。这感觉很奇怪而且容易出错。

有人处理过这样的案件吗?或者有什么建议吗?这只是一个复杂问题,需要一个复杂的解决方案,还是我缺少一个简单的方法?提前谢谢。

听起来,您希望使用多表继承,而不是抽象基类:https://docs.djangoproject.com/en/1.8/topics/db/models/#multi-表继承

我建议阅读整个文档部分,看看您对继承样式的选择是什么:https://docs.djangoproject.com/en/1.8/topics/db/models/#model-继承

相关内容

  • 没有找到相关文章

最新更新