0
我喜歡entity-attribute-value的東西,因爲我可以添加新字段並在外表行被刪除時自動刪除這些行,但我不喜歡這樣的事實,即我無法實施數據類型。選擇查詢很複雜。什麼是適合存儲動態字段的表結構?
是否有更好的方法不涉及爲每個屬性創建表?
如果我用各種可能的屬性創建一個非常大的表,即使大多數行在大多數列上都有NULL,該表是否佔用空間?
我喜歡entity-attribute-value的東西,因爲我可以添加新字段並在外表行被刪除時自動刪除這些行,但我不喜歡這樣的事實,即我無法實施數據類型。選擇查詢很複雜。什麼是適合存儲動態字段的表結構?
是否有更好的方法不涉及爲每個屬性創建表?
如果我用各種可能的屬性創建一個非常大的表,即使大多數行在大多數列上都有NULL,該表是否佔用空間?
您可以使用多個值字段在EAV模型中強制執行數據類型。這有點棘手,因爲您需要另一列來指定類型,然後使用附加約束來指定只填充一個值並且它與類型匹配。
在大多數數據庫中,您可以使用檢查約束來處理此問題。
此外,您可以只使用一個字符串值,然後使用檢查約束來強制執行字符串內容。這通常是足夠的。這些約束可以很好地使用支持它們的數據庫中的正則表達式。
至於你的第二個問題。每行將佔用實體/屬性列的空間。 NULL
值是否佔用任何空間取決於數據庫,但該空間通常很小。
謝謝!我做了更多的搜索,我找到了另一種方式 - 子類型 - http://stackoverflow.com/questions/3579079/how-can-you-represent-inheritance-in-a-database/3579462。它需要修改架構,但至少我可以在所有表中保留相同的ID。你認爲這是一個很好的替代eav? – thelolcat
@thelolcat。 。 。更好的解決方案取決於「要求」。如果你正在使用Postgres,你也可以考慮表繼承。 –