我有一個模型,說,項目。我想存儲任意數量的屬性,如標題,描述,release_date。我希望他們不只是字符串,但有python類型,所以字符串,布爾,日期時間等。在Django模型中的任意類型的數據
我在這裏有什麼選擇?帶有單獨名稱 - 值表的EAV模式將不起作用,因爲所有值都具有相同的數據庫類型。例如,JSONField可能可以提供幫助,但它不知道日期時間。另外我在看PickeField,它非常適合,但我對性能有點擔心。
我有一個模型,說,項目。我想存儲任意數量的屬性,如標題,描述,release_date。我希望他們不只是字符串,但有python類型,所以字符串,布爾,日期時間等。在Django模型中的任意類型的數據
我在這裏有什麼選擇?帶有單獨名稱 - 值表的EAV模式將不起作用,因爲所有值都具有相同的數據庫類型。例如,JSONField可能可以提供幫助,但它不知道日期時間。另外我在看PickeField,它非常適合,但我對性能有點擔心。
你有幾個選項,沒有一個很好。其中一些已經在Stack Overflow上討論過before。
首先,如您所建議的那樣,您擁有entity-attribute-value設計模式。
一個更好的方法這樣的做法是有一個表,其模式的變化和元數據表描述表中的一些相當大的規模商用產品。對於大多數項目具有大多數屬性的密集數據,這比EAV有很多優勢。這種方法有時稱爲動態表或動態行。
如果您不需要根據這些動態屬性執行查找,那麼一種好方法是將動態數據存儲在JSONField中,或者更好地將模式存儲在經過模式驗證的XMLField中。但是,如果您必須根據屬於您的JSON或XML的動態屬性進行查找,查找將會很痛苦。
最好的方法取決於您的數據稀疏程度以及您將如何查找該數據。另外,要問的一個很好的問題是,如果你絕對需要這種靈活性。我曾參與過一些我們決定需要EAV的項目,但自項目投入生產以來,屬性很少被添加,很少被刪除,所以我們得到了所有的缺點,而且沒有任何好處。