EAV完全忠誠或嚴重不同; 5NF由技術熟練的人員或無知者完成。
第六範式是不可簡化的範式(不需要進一步的標準化)。它消除了很多常見的問題,如The Null Problem,並提供了識別缺失值的最終方法。這是在學術和技術上強大的NF。沒有產品可以支持它,它不常用。要正確和一致地實施,它需要一個元數據的目錄來實施。當然,導航它所需的SQL變得更加繁瑣(SQL重新連接繁瑣),但是通過從元數據中自動生成SQL可以輕鬆解決這個問題。
EAV是6NF的部分集合或子集。問題在於,通常是爲了某種目的(允許添加列而無需進行DDL更改)以及不知道6NF的人以及不實現元數據的人員完成的。重點是,6NF和EAV作爲原則和概念提供了實質性的好處,並且性能提高;但通常它沒有得到正確執行,而且沒有實現好處。不少EAV的實施都是災難性的,不是因爲EAV不好,而是因爲實施效果差。
例如,有些人認爲從6NF/EAV數據庫構建3NF行所需的SQL很複雜:不,這很麻煩但不復雜。更重要的是,可以提供普通的SQL VIEW,這樣所有的用戶和報表工具都只能看到直接的3NF VIEW,而6NF/EAV問題對他們來說是透明的。最後,所需的SQL可以自動化,因此很多人忍受的人工成本是不必要的。
所以答案的確是,第六範式,是EAV的父親,是一個更純粹的形式,是它的替代品。注意事項是,確保它正確完成。我有一個大的6NF數據庫,它沒有任何人員發佈的問題,它執行得很漂亮,客戶很高興(沒有進一步的工作是完全功能滿意的標誌)。
我已經發布了一個非常詳細的回答另一個問題,它適用於你的問題還有,你可能會感興趣。
Other EAV Question
與其取代你所擁有的東西,因爲它確實滿足特定的需求,你應該考慮用隨時間存儲變化的東西來擴充你的基本EAV模型。 – RibaldEddie 2010-10-29 05:24:29
我同意RibaldEddie,它不會很簡單,但爲您的Attribute定義添加日期/版本可能會比完全重構構建在當前架構上的所有代碼更容易。 – JeremyWeir 2010-10-29 05:47:03
有沒有可能關閉這個?無論是評論和進展,還是投票和選擇答案。謝謝。 – PerformanceDBA 2011-01-25 12:32:33