我正在为作物仓储公司撰写应用程序,该公司购买收获的作物并将其存储在一个或多个仓库中。到目前为止,Google App Engine/Datastore的局限性对我没有任何问题。我对这个项目非常深入,很难回归。与谷歌数据存储/ Python NDB的交易系统中的多对多关系
我必须建立两个种类之间的多对多关系,它们本质上是事务性的(意味着父/祖先查询)。我不确定什么是正确的做法。这是业务逻辑:
仓库发出特定数量(PO)的采购订单。所以我们为每个采购订单(PO)在PO种类中创建一个实体。
货物在仓库收到。所以我们在GRN种类中创建一个实体。 (GRN =收货单)。
这是多对多的关系。
可能需要一个GRN来完成一个PO。
可能需要一个GRN来完成许多PO。
许多GRN可能需要完成一个采购订单。
许多GRN可能需要完成许多PO。
这是代码的相关快照。
class Warehouse(ndb.Models):
name = ndb.TextProperty()
capacity = ndb.FloatProperty()
current_stock = ndb.FloatProperty()
class PurchaseOrder(ndb.Models):
quantity = ndb.FloatProperty()
remaining = ndb.FloatProperty()
is_complete = ndb.BooleanProperty()
grn = ndb.KeyProprty(repeated=True, kind=GRN)
class GRN(ndb.Models):
quantity = ndb.FloatProperty()
remaining = ndb.FloatProperty()
is_complete = ndb.BooleanProperty()
po = ndb.KeyProprty(repeated=True, kind=PurchaseOrder)
实体组关系
仓库 - > GRN
仓库 - > PO
要建立多 - 到 - 多关系我认为所有相关GRN键在PO记录, GRN记录中所有相关的PO密钥。这对我来说工作得很好。
但是,如果我必须在回复日期编辑GRN或PO,那么我无法处理可能影响其他GRN和PO的级联变化的复杂性。
- 我读过的地方我应该使用第三个模型来保存多对多的关系,而不是存储相关的键。我无法想象应该包含哪些第三个表。 *
我知道我的问题非常具体,我没有弄清所有的细节。但只是帮助我采用正确的方法处理这种问题模式。我会处理其余的。或者提供任何链接,如果这已经记录在某处。
它是否像你应该保持像PO和GRN之间的同步数量属性或什么? – 2014-10-20 14:55:02
是的,两者需要在重量上保持平衡。 – 2014-10-20 15:26:54
假设一个PO由100KG组成,那么它可以链接到5个20KG的GRN实例。 PO和GRN只有在它们之间的多对多关系由重量平衡时才被认为是完整的。 – 2014-10-20 15:28:17