0

我正在開發一個數據庫模式來處理數據集合,並在稍後報告這些數據。帶有一些用戶定義字段的SQL數據庫設計

一個要求的討論後,似乎任一個實體屬性值(EAV)溶液,或平臺的解決方案將是好的 - 由於數據是有點稀疏但不高度稀疏

但是,用戶定義的字段將來會成爲必須的,但我明白用EAV表查詢和優化RDBMS可能會變得很複雜。

我看了一下討論here,我在想一個類似於選項1將是可能的。例如,有多個設置字段,然後有多個備用字段,用戶可以定義標籤。

在報告方面,使用這種方法有沒有不利之處,而不是使用EAV?

+0

在Postgres裏,要麼使用'hstore'列或'jsonb' –

回答

1

你會後悔EAV,尤其是當它涉及到報告

  1. 確保你嘗試任何事情之前,你已經意識到現有的數據模型模式:Ready to use database model patterns

  2. 熟悉表繼承: How can you represent inheritance in a database?

  3. 考慮允許用戶修改自己的方案:https://martinfowler.com/bliki/UserDefinedField.html

  4. EAV幾乎總是一個非常糟糕的主意。如果在嘗試上述操作後仍需要自定義字段,請使用帶有索引的blob類型(如JSON或XML):http://backchannel.org/blog/friendfeed-schemaless-mysql。 Postgres的的二進制jsonb速度快,並允許索引/查詢

+0

我要深入瞭解一個更進連載LOB,因爲它似乎有點在可查詢性方面更容易。 我不認爲用戶可修改的模式將是理想的,因爲字段可能非常簡單地存在(例如,下一年可能不存在的一年的新字段)。由於它們的動態特性,這使得EAV和JSON類型字段更具吸引力。 此外,我還看到了這個[EAV論文](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC346624/),它顯示了醫學數據集中相對常見的用途。 – J3Y