我知道这通常是个坏主意,我已经读完了-特别是这个问题。
但是,总归一化路线似乎更复杂,这将给我和我的代码带来更多麻烦。这是我的情况:
我正在构建一个测试创建系统,用户可以在其中创建测试,问题和答案,并将它们全部关联在一起,即,将答案与问题相关联,将问题与测试相关联。这种方法意味着无需将任何一种数据硬链接到任何其他数据。例如,给定的问题可以是两个或多个测试的一部分。所以,我在想(简化):
测试表:
问题表:
答案表:
因此,tests表中的给定行可能如下所示:
---------------------------------------
| ID | NAME | QUESTIONS |
---------------------------------------
| 1 | SOME TEST | 1,4,7,8,11,19 |
---------------------------------------
然后,当我获取一个测试及其问题时,我只是用做一些魔术group concat
。
问题:这都是一个坏主意吗?看起来比选择另一个简单得多,后者有两个专用的表分别用于记录测试和问题以及问题和答案之间的关联,这意味着在任何查询中都涉及更多的表。
当然,在某些情况下值得进行非规范化。
但请记住,非规范化有助于简化针对您的数据的查询子集,而以牺牲所有其他查询为代价。
我对在数据库列中存储定界列表的回答中列出的方案真的那么糟糕吗?显示您可能需要对数据执行多少其他类型的查询或更新。搜索,排序,插入,删除...此外,依靠引用完整性来避免您的数据转向孤儿集合。
但是,如果您知道获取或更新id的整个列表是唯一需要优化的事情,并且它永远不会改变(著名的最后一句话),那么就去使用非规范化。
如果您希望其他任何类型的查询都方便或高效,请坚持使用标准化设计。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句