2010-08-31 170 views
1

我正在寻找一些关于在django中创建动态模型的最佳方法的建议/意见。Django:关于设计不同领域的模型的建议

该结构需要描述产品的数据。有大约60个不同的可能数据点可能相关,每个产品根据其ProductType选择大约20个点(具有很多重叠)。大约有二十种不同的产品类型,每种产品类型都属于六个类别之一。

显而易见的方法是只将所有100个数据点放入产品模型中,然后选择并忽略任何空白字段。优点:很明显。缺点:它很丑,如果我需要添加更多的数据点,它需要更新数据库。

我的想法是让每个产品都完全抽象,只定义产品类型和其他一些识别特征。

class Product(models.Model): 
    productType = models.ForeignKey(ProductType) 

我将不得不为每一种数据点(数字,文本,日期等)这将是这样一个单独的模型:

class TextData(models.Model): 
    fieldName = models.CharField(etc) 
    verboseName = models.CharField(etc) 
    data = models.CharField(etc) 
    product = models.ForeignKey(Product) 

最后,我会做一个模型它定义了每种产品类型的相关数据类型,以及每个数据点应该被调用的内容。

class ProductType(models.Model): 
    name = models.CharField(etc) 
    .... 

所以今天的主要问题是:什么是填写一个产品类型的相关领域的最好方式,当他们可以改变?也许是另一种保存数据点名称/类型的模型,以及ProductType和该模型之间的ManyToManyField?一个带有XML的文本字段?定义结构的外部XML字段?放弃这一整个追求并采取更好的做法?

感谢您的帮助!

回答

1

这是普通的关系数据库设计。不要使用面向对象和继承技术来过度优化它。

您有一个产品类别表(可能)只是名称。

您有一个产品类型表,没有太多FK的类别信息。

您有一个与产品类型具有FK关系的产品表。

您的产品功能表包含您的数据点和FK产品。

要使用产品,请查询产品。如果您需要这些功能,则只需使用“feature_set”即可。 Django为你提取它们。

这项工作非常好,并且是关系数据库和ORM层的成熟功能。数据库缓存和ORM缓存使得这些查询非常快速。