gpt4 book ai didi

php - 我应该为我的案例将 com-sep 数据存储在数据库中吗?

转载 作者:搜寻专家 更新时间:2023-10-30 22:12:16 27 4
gpt4 key购买 nike

我知道这通常是个坏主意,我已经阅读了 - 特别是 this question .

然而,总的规范化路线似乎更复杂,并且会给我和我的代码更多的障碍来跳过。这是我的场景:

我正在构建一个测试创建系统,用户可以在其中创建测试、问题和答案,并将它们关联在一起,即将答案与问题关联,将问题与测试关联。这种方法意味着没有任何一种数据与其他任何一种数据的硬链接(hard link);例如,给定的问题可以是两个或多个测试的一部分。所以,我在想(简化):

测试表:

  • 身份证(主键)
  • 名称(可变字符)
  • 问题(com-sep 问题 ID 列表)

问题表:

  • 身份证(主键)
  • 问题文本(varchar)
  • 答案(com-sep 答案 ID 列表)

答案表:

  • 身份证(主键)
  • 回答文本(varchar)

因此测试表中的给定行可能如下所示:

---------------------------------------
| ID | NAME | QUESTIONS |
---------------------------------------
| 1 | SOME TEST | 1,4,7,8,11,19 |
---------------------------------------

然后,当我获取测试及其问题时,我只需使用 group concat 来施展魔法。

问题:这都是个坏主意吗?这似乎比另一种方法简单得多,后者有另外两个表,分别专门用于记录测试和问题以及问题和答案之间的关联,这意味着任何查询都涉及更多表。

最佳答案

是的,这可能是个坏主意。

为什么您认为再拥有两张完整的 table (哇!!)是件大事?真的不是。

无论如何,如果您真的绝对不想做类似“找出问题 3 出现在哪些测试中”这样的事情,那就发疯吧,但一旦您发现自己必须做这样的事情,您会希望你刚刚以正确的方式做到了。

您将如何确保您的数据是合理的?如果 564 作为一个条目出现在您的逗号分隔列表中,您是否确定问题表中肯定有编号为 564 的问题,并且此后一直没有被删除?避免创建两个表有多少额外的复杂性。如果您不喜欢键入 SQL 来执行连接,您可以只使用 ORM。

关于php - 我应该为我的案例将 com-sep 数据存储在数据库中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24211676/

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