0

我喜歡entity-attribute-value的東西,因爲我可以添加新字段並在外表行被刪除時自動刪除這些行,但我不喜歡這樣的事實,即我無法實施數據類型。選擇查詢很複雜。什麼是適合存儲動態字段的表結構?

是否有更好的方法不涉及爲每個屬性創建表?

如果我用各種可能的屬性創建一個非常大的表,即使大多數行在大多數列上都有NULL,該表是否佔用空間?

回答

1

您可以使用多個值字段在EAV模型中強制執行數據類型。這有點棘手,因爲您需要另一列來指定類型,然後使用附加約束來指定只填充一個值並且它與類型匹配。

在大多數數據庫中,您可以使用檢查約束來處理此問題。

此外,您可以只使用一個字符串值,然後使用檢查約束來強制執行字符串內容。這通常是足夠的。這些約束可以很好地使用支持它們的數據庫中的正則表達式。

至於你的第二個問題。每行將佔用實體/屬性列的空間。 NULL值是否佔用任何空間取決於數據庫,但該空間通常很小。

+0

謝謝!我做了更多的搜索,我找到了另一種方式 - 子類型 - http://stackoverflow.com/questions/3579079/how-can-you-represent-inheritance-in-a-database/3579462。它需要修改架構,但至少我可以在所有表​​中保留相同的ID。你認爲這是一個很好的替代eav? – thelolcat

+0

@thelolcat。 。 。更好的解決方案取決於「要求」。如果你正在使用Postgres,你也可以考慮表繼承。 –

相關問題