2010-11-18 130 views
3

在我真正瞭解它的名字之前,我在很多環境中都看到了Entity Attribute Value。它的這種技術經常出現,而不是將數據存儲在數據庫列中,而是將數據庫中的數據列「翻轉」,並且使用Entity,Attrbute,Value列以及每個數據段成爲該表中的一行。有時它也被稱爲「開放架構」。實體屬性值(EAV)框架?

它對一些事物有好處,對其他事物不好。這個wikipedia article對它背後的理論有一個很好的討論。

這似乎是一種經常使用的技術,應該有框架或引擎或NoSQL數據庫或通用軟件工具來構建和支持它。

那麼,你知道嗎?我對Microsoft堆棧(.Net,SQL Server等)特別感興趣,但也對其他技術堆棧感興趣。

例如,這是一個項目到build an ASP.NET EAV engine這正是我正在尋找,但顯然從來沒有開始。

回答

6

如果您可以忍受NoSQL數據庫的缺點,那麼處理EAV模式的最好方法是使用NoSQL替代方案,如CouchDB或MongoDB。這些數據庫提供了一種「無模式」設計,允許每行都有自己的模式。使用傳統的RDBMS來做EAV會造成麻煩,因爲查詢變得非常困難,並且性能會受到數據集越大的影響。

我過去成功使用的另一種方法是將RDBMS與NOSQL變體(MySql和MongoDB)結合使用。我使用MySQL來存儲EAV數據(獲得事務完整性),並且我使用MongoDB作爲報告存儲來解決EAV模型中的查詢問題。

0

我會得到球與一個滾動我通過this blog post發現:

的早期測試版的SQL Server的EAV框架:

http://eav.codeplex.com/
「帶有SQL Server的一個樣品EAV模式:表和索引,部分參照完整性,部分數據類型,可更新視圖(像普通SQL表)「

提供一些SQL腳本下載,here

1

你可以將它存儲在SQL-XML中,但是你可以在.NET中執行de/serialization,然後X-LINQ將它加入。

性能也將是一個巨大的問題。