sql - 数据库可扩展性 : Which is more important, 表的大小或查询的数量?

标签 sql database-design scalability scaling

我将以一个简化的 StackOverflow 系统为例。

虽然限制了一些功能,但可以将问题和答案放在同一个表中:

(Django-esque pseudo-code)

QA table:
    parent = ForeignKey(self)
    category = ForeignKey(Category)
    title = CharField()
    description = TextField()

然后,要获取 ID 为 1 的问题的问题和答案,将对 id==1parent==1 执行 SQL SELECT。缺点是答案不使用 tagstitle 字段

当然,替代方案是两个表:

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/

相关文章:

sql - 如何在雪花中将日期截断为每月的第一天?

mysql - SQL难题非常接近解决但无法获得parentid

algorithm - 开发用于高效搜索的数据库模式

java - 特定应用种子数据群

database - 用于(游戏)服务器通信的 Web 服务或共享数据库?

sql - 通过 Visual Studio 运行时查询失败,在其他地方工作正常

SQL递归索引查找查询

mysql - 学生出勤表结构

concurrency - 将无状态 session Bean 转换为 POJO 的可扩展性影响

ruby-on-rails - 使用 Heroku 扩展 Dynos