我一直在爲即將到來的項目進行大量的數據庫設計研究。替代EAV模型vs混合策略與簡化和改進版本
這是典型的inner platform problem,我們的客戶基本上想要無限定製,並能夠在實體上創建表單和屬性,從最終用戶收集值,並能夠在圖表上顯示收集到的信息。
這將是臨牀醫生用來幫助監測患者的東西,爲什麼即使使用EAV也是一個問題,我們需要爲不同的試運行收集不同的信息。有時候可能是他們那天吃的東西。其他可能是血糖或血壓(這實際上是兩個數字),而其他情況可能是多個問題(你今天的疼痛情況如何,從1-10開始?),所有這些想法都是我們永遠不會知道的推進最終客戶的要求究竟是什麼,或者真正接受的價值是什麼。
我們還會在整個計劃中一致地繪製這些數據,並在不太經常的基礎上生成更大的報告。
理想情況下,我希望能夠儘可能多地編寫代碼,因爲我們使用的是SQL,並且堅持關係數據庫最佳實踐將簡化數據庫設計和應用程序設計(這兩者都是我「寫作)。
我們正在做一些試運行,我的第一個想法是從客戶那裏獲得儘可能多的信息,硬編碼數據庫中的表,然後從那裏進行編譯。如果我們發現我們需要使用一個屬性表和一個attribue_value表來收集這些屬性(以及有趣的實現表單生成器,比如下拉菜單,因此需要下拉菜單選項和驗證),我們可以這樣做後來啓動。
我已經經歷了基本上所有相關的堆棧溢出帖子;大多數人說避免EAV,更好地理解應用程序的需求,並且在某些時候,如果客戶真的需要EAV實施,那麼繼續做下去。
有沒有人曾經使用混合動力車型?你可以討論它嗎?
有沒有人成功實施過EAV模型,你可以討論它嗎?
你有沒有做過類似的決定,決定不實施一個看起來可能是候選人的項目的EAV?結果如何?
這裏有一些有趣的閱讀,我一路上發現:
http://decipherinfosys.wordpress.com/2007/01/29/name-value-pair-design/ Storing time-series data, relational or non? Database EAV Pros/Cons and Alternatives Alternatives to Entity-Attribute-Value (EAV)?
And the link that really gave me a ton of insight.
[更多食物的思考](http://www.slideshare.net/billkarwin/sql-antipatterns-strike-back) - 從幻燈片16開始進行EAV討論。 –
另請參閱我的演示文稿[可擴展數據建模](http://www.slideshare.net/billkarwin/extensible-data-modeling)瞭解不同備選方案的優缺點。 –
對於任何人來說這個 - 我讀了這個評論主題中的兩個鏈接。他們都寫得很好,信息豐富,並強烈建議,如果你踩着這條道路。 – Squadrons