2011-08-15 47 views
1

我正在構建中型企業Web應用程序,數據正在保存在MySQL數據庫中。Sql數據庫驅動的Web應用程序體系結構問題

我試圖想出一種方法來爲該應用程序添加某些可選擇的「窗口小部件」(例如,一個貨幣窗口小部件 - 當Web應用程序可見時將顯示用戶指定的貨幣),但卻很難決定如何由於小部件沒有共同的基礎,因此保存每個用戶的小部件數據和設置。

例如,貨幣小部件的設置完全不同於天氣小部件。 其中一個需要所需貨幣的清單,一個需要天氣的目標位置。

我想通過將所有小部件的設置數據編碼在db表的「widgetData」列中來解決上述問題,該表中將包含userId,widgetId和widgetData。 我選擇了JSON作爲我的編碼方式,每次用戶嘗試加載它的頁面時,我都必須解碼它的設置並根據設置向用戶提供所需的數據。

保存窗口小部件的實際數據也是如此,這些數據本身沒有共同的基礎。

希望下次我可以通過使用NO-SQL數據結構解決此問題,但目前的項目並非如此。

+0

你的問題到底是什麼? – Mat

回答

1

在這種情況下,Entity Attribute Value database model對您非常有用。

它比JSON或XML或其他類型的格式靈活得多,因爲它可以在標準SQL數據存儲中工作,儘管方式不同。

1

我投了EAV解決方案,因爲這是使用它的有效原因之一,但不要愛上它。 EAV的一個優點是,它的數據庫本地化程度可以讓您在SQL中編寫查詢來查詢它(找到我所有缺少某些設置並添加它的小部件),而大多數引擎不支持JSON。

在另一方面,如果你想/需要包含結構化數據的列中查詢,XML比JSON一個更好的選擇(現在):http://dev.mysql.com/doc/refman/5.1/en/xml-functions.html#function_extractvalue

0

如果你的部件是在通過JavaScript渲染瀏覽器,那麼你的解決方案非常好。您的widgetData仍然是JSON字符串,在Javascript中,您使用JSON.parse()將其轉換爲對象並將其呈現,並且JSON.stringify()在將其發回服務器之前將其重新轉換爲字符串。

相關問題