Sql DB驱动的Web应用程序架构问题

时间:2011-08-15 17:39:36

标签: mysql database-design web-applications architecture nosql

我正在构建中型企业Web应用程序,数据正在MySQL数据库中保存。

我正在尝试一种向该应用程序添加某些可选择的“小部件”的方法(例如,当Web应用程序可见时将显示用户指定货币的货币小部件)但是很难决定如何保存每个用户的窗口小部件数据和设置,因为窗口小部件没有共同的基础。

例如,货币小部件的设置与天气小部件完全不同。 一个将需要一个所需货币的列表,一个将需要天气的目标位置。

我想通过将所有小部件的设置数据保存在db表的“widgetData”列中来解决上述问题,该表将包含userId,widgetId和widgetData。 我选择JSON作为我的编码方式,每次用户尝试加载它的页面时,我都必须对其设置进行解码,并根据设置向用户提供所需的数据。

保存小部件本身没有公共基础的实际数据也是如此。

希望我下次可以通过使用NO-SQL数据结构来解决这个问题,但对于当前项目来说并非如此。

3 个答案:

答案 0 :(得分:1)

在这种情况下,Entity Attribute Value database model对您非常有用。

它比JSON或XML或其他类型的格式更灵活,因为它在标准SQL数据存储中工作,尽管方式不同。

答案 1 :(得分:1)

我投了EAV解决方案,因为这是使用它的正当理由之一,但不要爱上它。 EAV的一个优点是它是数据库原生的,你可以用SQL编写查询来查询它(找到我所有的小部件都缺少一些设置然后添加它),而大多数引擎都没有JSON支持。

另一方面,如果您希望/需要在包含结构化数据的列中进行查询,那么XML是比JSON(现在)更好的选择:http://dev.mysql.com/doc/refman/5.1/en/xml-functions.html#function_extractvalue

答案 2 :(得分:0)

如果您的小部件是通过浏览器中的Javascript呈现的,那么您的解决方案就完美了。您的widgetData仍为JSON字符串,在Javascript中,您使用JSON.parse()将其转换为对象并将其呈现,然后JSON.stringify()将其重新转换为字符串,然后再将其发回服务器