【问题标题】:How to Store Key-Value or One to Many User Settings in database (Xml, Json)?如何在数据库(Xml,Json)中存储键值或一对多用户设置?
【发布时间】:2023-03-12 12:34:01
【问题描述】:

我们是否应该将应用程序键值设置数据以 XML 或 JSON 格式的 db 序列化方式保存。 例如用户设置数据可以以序列化方式保存在单个 nvarchar(2000) 列中

或者我应该将它们保留为带有 BELOW 之类的列的表格

用户 ID、设置名称、设置值

  1. 123,AssignedQuiz,科学
  2. 123,分配测验,数学
  3. 456,AssignedQuiz,Geo

【问题讨论】:

  • 我认为更好的表结构会比以序列化方式存储更好。

标签: mysql xml json database-design setting


【解决方案1】:

虽然以序列化方式存储,但很难更新其中的单个值。相反,您需要每次都更新该列。
如果您存储在表库中,则可以轻松更新单行或从表中检索它。

您可以将结构定义为:
表:setting
列(设置ID,设置名称,设置值)

表:user_settings
列(用户 ID,设置 ID)

【讨论】:

  • 但是 ms sql server 支持 XML 数据类型和对它的索引和查询,还有 xpath 更新,选择 so 怎么样...?
  • 根据您的要求列出所有优点和缺点,然后再决定。在这里很难决定,因为我不知道你有什么,你没有。
  • 将此标记为答案...将在另一个线程中询问其他问题(我们何时使用数据库 XML 数据类型..???)。
  • 我同意 Surersh 的观点。使用表格方法可以减少工作量。
  • @abksharma:是的,当然,这种结构适用于更多的 10M 用户及其设置。
【解决方案2】:

我的最终结构 但是这个结构会不会扩展到1000万用户*100个设置=10亿个设置Mysql?? 是的,它会的!!!

设置类型表

   SettingTypeId    UNSIGNED SMALLINT(2)
    SettingName VARCHAR(100)
    SettingDescription  VARCHAR(300)
    Created DATETIME
    LastUpdated TIMESTAMP
    CreatedBy   UNSIGNED INT(4)
    ModifiedBy  UNSIGNED INT(4)
    Deleted BIT
    Disabled    BIT
    RecordVersion   UNSIGNED INT(4)

最终结构:-

设置表格

   SettingId    UNSIGNED INT(4)
    SettingTypeId   UNSIGNED SMALLINT(2)
    UserId  UNSIGNED INT(4)
    SettingValue    VARCHAR(1000)
    Created DATETIME
    LastUpdated TIMESTAMP
    CreatedBy   UNSIGNED INT(4)
    ModifiedBy  UNSIGNED INT(4)
    Deleted BIT
    Disabled    BIT
    RecordVersion   UNSIGNED INT(4)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    • 2016-03-21
    • 2012-03-09
    • 2019-05-01
    • 1970-01-01
    相关资源
    最近更新 更多