2011-03-02 24 views
0

我有一個領域的數據庫表:如何將數據從數據庫中用戶定義的公式比較

  • 的PageRank
  • sites_in_google_index
  • CONVERSION_RATE
  • sites_in_google_index
  • adsense_revenue
  • yahoo_backlins
  • google_baclinks

約20多parameteres - 每天

現在我需要添加用戶posibility定義自己的鑰匙和虛擬化圖形上這個數據,例如用戶可以這樣定義某事收集的都是整數:

NEW_KEY_1 = pagerank*google_backlinks-(conversion_rate+site_in_google_index) 

NEW_KEY_2 = adsense_revenue*NEW_KEY_1 

的現在,他應該能顯示在圖表選定時間段,前此兩個數據項:01-1 2-2009至02-03-2011

什麼是存儲和評估此類數據/密鑰的最佳策略?

回答

1

最簡單的方法是讓用戶定義SQL選擇器並在查詢中用於數據庫。然而,不會這樣做,永遠不會(!),因爲它是您可以挖掘的最大的安全整體之一!

總體思路應該是爲用戶提供某種「自定義查詢語言」。然後你需要一個解析器來驗證它的表達式並創建一個抽象語法樹。然後可以將該語法樹轉換爲相應的SQL查詢部分。

在您的具體情況下,您將基本上最終解析算術表達式,以驗證用戶提供的字段僅包含此類表達式並且它們是有效的,並將相應的樹序列化回SQL算術表達式。這裏的其他好處是,您可以確保只使用有效的字段名稱,您可以限制表達式的複雜性,並且可以在稍後階段添加自定義運算符。