【发布时间】:2014-08-04 09:19:15
【问题描述】:
我知道这通常是个坏主意,而且我已经阅读完毕 - 特别是 this question。
但是,整个规范化路线似乎更复杂,并且会给我和我的代码更多的障碍。这是我的场景:
我正在构建一个测试创建系统,用户可以在其中创建测试、问题和答案,并将它们全部关联在一起,即将答案与问题关联,将问题与测试关联。这种方法意味着没有任何一种数据与任何其他数据的硬链接;例如,一个给定的问题可以是两个或多个测试的一部分。所以,我在想(简化):
测试表:
- id (PK)
- 名称(varchar)
- 问题(com-sep 问题 ID 列表)
问题表:
- id (PK)
- 问题文本(varchar)
- 答案(答案 ID 的 com-sep 列表)
答案表:
- id (PK)
- 回答文本(varchar)
所以测试表中的给定行可能如下所示:
---------------------------------------
| ID | NAME | QUESTIONS |
---------------------------------------
| 1 | SOME TEST | 1,4,7,8,11,19 |
---------------------------------------
然后,当我获取测试及其问题时,我只是用group concat 施展魔法。
问题:这都是个坏主意吗?这似乎比另一种方法要简单得多,即另外有两个表专门用于记录测试和问题以及问题和答案之间的关联,意味着任何查询都涉及更多表。
【问题讨论】:
-
就我个人而言,我更喜欢另外两张桌子。随着数据集的增长,由于您必须解析
questions和answers字段,因此您的设计的查询运行时间会更长。连接到子表会更快、更容易管理。