2010-08-31 164 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緩存使得這些查詢非常快速。