0

我正在尝试构建一个长生不老药模型,其中我有一个带有(可变大小)元组列表的类。

一个例子是食谱

虽然我可以做这样的事情:

class Recipe(Entity):
    ingrediants = OneToMany('IngrediantList')
    cooking_time = Field(Integer)
    ...

class IngrediantList(Entity):
    ingrediant = ManyToOne('Ingrediant')
    quantity = Field(Number(3,2))

class Ingrediant(Entity):
    name = Field(String(30))
    ...

它有许多缺点。一方面,我不喜欢为成分列表创建一个实体,我对域没有任何意义;从抽象中汲取乐趣。

另一个问题是,如果不向模型添加更多的关系和/或字段,从而使模型变得混乱,那么我可以使用这种成分准备哪些项目之类的查询会变得非常混乱并且可能效率低下。

另一个例子是带有面额和数量列表的银行存款单。

设计这种模型的最佳方法是什么?

4

2 回答 2

0

使用 sqlalchemy 关联代理的解决方案 这是来自 sqlalchemy 文档。

于 2009-08-11T02:03:18.533 回答
0

这是对复合对象建模的正确方法。我唯一要更改的是成分列表类的名称。像 RecipeEntry 或 IngredientQuantity 这样的东西会更合适。将其称为元组只是试图避免需要命名配方需要一定数量的某种成分的事实。

如果对于大多数代码你不想考虑关联的细节,你可以使用 sqlalchemy associationproxy 扩展来创建一个代理属性来隐藏细节。

于 2009-08-10T09:38:20.827 回答