gpt4 book ai didi

php - MySQL模式,哪种方式性能更高? M-N 关系还是将所有相关 ID 保存为字符串?

转载 作者:可可西里 更新时间:2023-11-01 07:36:27 25 4
gpt4 key购买 nike

我正在为词汇考试设计 MySQL 数据库。

表:userswordsresults

参与者选择他/她知道其含义的所有单词。所有考试彼此不同,即考试是从数据库中随机生成的。每次考试大约 350 单词

现在我想存储每次考试的结果以及参与者选择的所有单词。如您所见,每次考试都会保存很多 ids(单词)!我的想法有两种:

result_word 表中的 1- 多对多关系(每次考试最多 350 行):

result_id | word_id   
--------------------
1 | 33
1 | 12
. | .
. | .

2- 作为 results 表中 answered_ids 列中的字符串:

    id    | answered_ids   
-------------------------
1 | "12,33,..."

结果 1 的所有 ID:answered_ids : "33,12,..."

然后当我需要它们时,用 php explode() 它们!

我认为第二种方式更好,因为第一种方式可能会很快变成数据库中的数千行。我对吗?或者有更好的方法吗?

更新:

在这次考试中,用户可以看到从 words 表中随机选择的 English words 列表,除此之外什么都没有!用户点击他认为他知道其含义的每一个词!此外,还有一个 fake_words 表,除了 actual words 之外,还会随机选择 50 个单词,如果用户点击 fake words 超过 3 次,测试将失败。最终结果将告诉用户他有多少词汇技能。

我正在使用 VueJs2 创建这个应用程序。除了他的考试成绩外,我还想存储用户选择的所有单词。然后当一个用户想要查看他的结果时,他可以看到他点击的每一个字!

我担心的是:如果考试的次数多了会不会有问题?以 5000 为例。此外,如有任何有关如何实现此应用程序的一般性建议,我们将不胜感激。

最佳答案

现代 DBMS,包括 MySQL,可以处理表中的数百万行。你说的是非常少量的数据。因此,您应该采用解决方案 1。

  1. 这将允许您自动扩大或缩小考试规模,而无需修改您的 PHP 代码。
  2. 数据库中的文本字段将受到长度限制,因此您可能无法填写所需的所有 word_id
  3. 您可以构造 SQL 查询来对数据做一些有趣的事情,例如人们知道的平均单词数等,而无需为此编写 PHP 代码。

如果您担心大型表的查询速度,数据索引将确保您的查询运行速度足够快,与 native 对象无法区分,即使跨越多个表JOIN 操作也是如此。我会建议 Use The Index, Luke ,它提供了几个不同 DBMS 的重要分析和示例,以及如何最好地索引您的数据。

关于php - MySQL模式,哪种方式性能更高? M-N 关系还是将所有相关 ID 保存为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45128755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com