在MYSQL中将数据存储在多行还是只存储在一个json中更好?

时间:2016-10-01 17:31:38

标签: mysql json rdbms nosql

一旦这样的例子可以成为用户和测试的问题库。将来可能会出现很多关系。

当用户尝试集合中的问题时,存在多个随机数的问题。 因此,在提交该集合时,最好将特定集合的数据存储为json或多行

方法1

QuesTable

id | ques 

用户表

id | username | setinfo

其中setinfo可以作为特定用户的json存储为他创建的任意数量的集合, 当用户创建一个集合时,我们可以在这个json中附加数据。

{
  "sets": [
    {
      "set1": [
        {
          "q1": {
            "given_answer": "a",
            "some_key1": "some_value1",
            "some_key2": "some_value2"
          },
          "q2": {
            "given_answer": "c",
            "some_key1": "some_value1",
            "some_key2": "some_value2"
          },
          "q3": {
            "given_answer": "b",
            "some_key1": "some_value1",
            "some_key2": "some_value2"
          }
        }
      ]
    },
    {
      "set2": [
        {
          "q1": {
            "given_answer": "a",
            "some_key1": "some_value1",
            "some_key2": "some_value2"
          },
          "q2": {
            "given_answer": "c",
            "some_key1": "some_value1",
            "some_key2": "some_value2"
          },
          "q3": {
            "given_answer": "b",
            "some_key1": "some_value1",
            "some_key2": "some_value2"
          }
        }
      ]
    }
  ]
}

APPROACH 2

同样但我们可以为set info创建另一个表,并将每个集存储为自己的id

QuesTable

id | ques 

用户表

id | username

user_set_table

id | userid | setinfo

每次用户创建一个集合时,它都会在user_set_info中创建一个新列并使用FK userid 每个setinfo是

[
  {
    "q1": {
      "given_answer": "a",
      "some_key1": "some_value1",
      "some_key2": "some_value2"
    },
    "q2": {
      "given_answer": "c",
      "some_key1": "some_value1",
      "some_key2": "some_value2"
    },
    "q3": {
      "given_answer": "b",
      "some_key1": "some_value1",
      "some_key2": "some_value2"
    }
  }
]

APPROACH3

QuesTable

id | ques 

用户表

id | username

User_Set_Info

id | userid | quesid | given_ans | somekey1 | somekey2

这里的问题是,如果用户提供了100个问题的测试,那么它将创建100行并且需要100次插入,查询可以是单个。

制作多行是个好主意吗?什么时候应该最好在mysql列中使用json而不是什么时候?

1 个答案:

答案 0 :(得分:1)

您应该问自己的问题是:
- 数据是否易于检索? - 数据是否易于更新?
- 如果我稍后更改模型,我的数据的持久性是多少?

关系数据库用以下方式回答这些问题:
- 选择
- 更新
- ALTER和UPDATE

使用JSON存储时,您可能无法更改数据,从而大大降低了数据库的持久性,并使维护更加困难。

在决定数据存储时,请始终考虑CRUDACID