【问题标题】:Sql DB Driven Web Application architecture questionSql DB Driven Web Application 架构问题
【发布时间】:2011-10-27 11:03:46
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 你的问题到底是什么?

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-19
        • 2011-05-12
        • 2015-08-18
        相关资源
        最近更新 更多