【问题标题】:Storing form data as JSON将表单数据存储为 JSON
【发布时间】:2016-04-09 22:43:57
【问题描述】:

我已经阅读了很多关于存储 json 和查询速度的限制,但是,我仍在努力设计我的数据库。

目前,我将来自 CMS(带有输入的表单)的数据作为 JSON 存储在 content 列中

存储的数据如下所示:

{
  "heading": {
    "value": "Taylor Francis"
  },
  "sub_heading": {
    "value": "photographer \/ artist \/ designer"
  },
  "button_caption": {
    "value": "View Work"
  },
  "button_link": {
    "value": "/work"
  },
  "content": {
    "value": "<p style=\"margin-top: 22px; margin-bottom: 22px; padding: 0px;\">A Brief History[...]"
  }
}

只有在用户更新页面时才需要访问和解析这些数据。

保存页面后,会创建一个缓存的 HTML 版本,因此我认为在阅读页面进行显示时不会出现速度问题。

我的问题是这会在未来产生更多问题吗?我真的不需要搜索这些数据或任何东西。只允许用户偶尔编辑它(如果需要,可以添加更多元素)

或者我应该将其转换为键->值对“元”表并在页面 id 上进行连接?

或者,或者,我考虑为每个可能的输入添加列: 标题栏、子标题栏、按钮标题栏等

谢谢!

【问题讨论】:

    标签: mysql json database database-design entity-attribute-value


    【解决方案1】:

    你可能有一个很好的设计。但是,我会考虑摆脱“缓存的 HTML 版本”。您可能可以“足够快”地从 JSON 中“构建”页面。看看这个stackoverflow页面。它没有被缓存。事实上,它是由大量组件构成的,其中许多组件可能是从数据库中动态加载的。

    拥有“每个可能输入的列”很快就会成为维护的噩梦。为您需要搜索的内容创建列;将 JSON 用于其他内容,并让应用程序处理解析/扩展/等它。也就是不要去EAV(Entity-Attribute-Value)设计。

    【讨论】:

    • 非常感谢!另外,我刚读完你的EAV Article,很高兴能减轻我的负担。我在缓存背后的原因是因为我担心 json_decoding 随着用户的增加可能比 JOINING eav 表更昂贵。我应该不带它吗?
    • 作为一种学习体验,您可以尝试两种方式。但我的猜测是解析 JSON 会比 JOINing 更快。在 PHP 中,我喜欢 json_decode(...,TRUE)json_encode(...),并没有注意到它的性能瓶颈。
    猜你喜欢
    • 2018-02-06
    • 2020-04-02
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    • 2018-11-26
    相关资源
    最近更新 更多