我将以一个简化的 StackOverflow 系统为例。
虽然限制了一些功能,但可以将问题和答案放在同一个表中:
(Django-esque pseudo-code)
QA table:
parent = ForeignKey(self)
category = ForeignKey(Category)
title = CharField()
description = TextField()
然后,要获取 ID 为 1 的问题的问题和答案,将对 id==1
或 parent==1
执行 SQL SELECT。缺点是答案不使用 tags
和 title
字段
当然,替代方案是两个表:
Questions:
category = ForeignKey(Category)
title = CharField()
description = TextField()
Answers:
parent = ForeignKey(Questions)
description = TextField()
这需要两个查询才能获得问题和答案。
直觉说前者是一个可怕的想法,但我不确定为什么。
哪个更快且更具可扩展性?
最佳答案
直接回答你的问题,你的直觉是正确的。将实体(问题和答案)混合到一个表中几乎总是一个坏主意。从逻辑上讲,它们是两个独立的实体,从物理上讲,它们应该保持独立。
您的第二个解决方案是正确的。使用索引和外键通过问题 ID 链接 2 个表将允许您选择任何问题的所有答案。这会更快,并且可以更好地扩展,并且对于将来必须使用该结构的任何人来说都更容易理解。
关于sql - 数据库可扩展性 : Which is more important, 表的大小或查询的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6180375/