在MYSQL中,将数据存储在多行还是只存储在一个json中更好?
这方面的例子可以是用户和测试的题库。未来可能会出现很多关系 当用户在一个集合中尝试提问时,有多个随机数的问题。 因此,在提交该集合时,最好将特定集合的数据存储为json或多行 方法1 QuesTable在MYSQL中,将数据存储在多行还是只存储在一个json中更好?,mysql,json,rdbms,nosql,Mysql,Json,Rdbms,Nosql,这方面的例子可以是用户和测试的题库。未来可能会出现很多关系 当用户在一个集合中尝试提问时,有多个随机数的问题。 因此,在提交该集合时,最好将特定集合的数据存储为json或多行 方法1 QuesTable id | ques id | username | setinfo id | ques id | username id | userid | setinfo id | ques id | username UserTable id | ques id | usernam
id | ques
id | username | setinfo
id | ques
id | username
id | userid | setinfo
id | ques
id | username
UserTable
id | ques
id | username | setinfo
id | ques
id | username
id | userid | setinfo
id | ques
id | username
其中,对于特定用户创建的任意数量的集合,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"
}
}
]
}
]
}
方法2
它是相同的,但我们可以为集合信息创建另一个表,并将每个集合存储为自己的id
QuesTable
id | ques
id | username | setinfo
id | ques
id | username
id | userid | setinfo
id | ques
id | username
UserTable
id | ques
id | username | setinfo
id | ques
id | username
id | userid | setinfo
id | ques
id | username
用户设置表
id | ques
id | username | setinfo
id | ques
id | username
id | userid | setinfo
id | ques
id | username
在这里,每次用户创建一个集合时,它都会使用FK userid在user_set_info中创建一个新列
每个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"
}
}
]
方法3
QuesTable
id | ques
id | username | setinfo
id | ques
id | username
id | userid | setinfo
id | ques
id | username
UserTable
id | ques
id | username | setinfo
id | ques
id | username
id | userid | setinfo
id | ques
id | username
用户设置信息
id | userid | quesid | given_ans | somekey1 | somekey2
这里的问题是,如果用户给出一个有100个问题的测试,那么它将创建100行,并且需要100个插入,那么查询可以是单个的
制作多行是个好主意吗?什么时候最好在mysql列中使用json,什么时候不是 你应该问自己的问题是:
-数据容易检索吗?
-数据是否易于更新?
-如果以后更改模型,数据的持久性如何 关系数据库回答这些问题时使用:
-选择
-更新
-更改和更新 在使用JSON存储时,您可能很难更改数据,从而大大降低数据库的耐久性,并使其更难维护
在做出关于数据存储的决定时,一定要考虑投票否决的理由。不要过早地优化。对于关系数据库——如果信息不是“不透明块”,那么最好将其规范化。如果没有正确的规范化,就不可能编写可搜索查询或强制执行直接引用完整性。(一些RDBMS引擎允许JSON/XML的切分,但这是另一种可能。)此外,SQL中的列数应该是固定的(对于某些问题,这是一个例外,但同样:仅限高级使用),就像类的成员是固定的一样。SQL多样性跨行工作;这通常超出了SO问题的范围。