DB Schema:为什么不为每个实体创建新表?

时间:2014-08-05 14:08:50

标签: sql database

对于模糊的标题感到抱歉。 一个例子:我猜测SO有一个大表,列出所有答案,在一个模式中,如: [问题不,答案否,文字,分] [22,0,“胜利”,3], [22,1,“锡”,4], [23,0,“Pin”,2]

我的问题是,如果有两个表会更好吗:Table_Ques22和Table_Ques23?有人可以列出优缺点吗?

我想到了什么: 多个表的缺点:元存储的开销。 多个表的优点:快速回答查询,查找问题22的所有答案。(我知道有索引,但它们需要时间来构建和维护空间)。

2 个答案:

答案 0 :(得分:4)

数据库旨在处理大型表。具有相同结构的多个表引入了许多问题。想到这些:

  • 跨越多行的查询(示例中的“问题”)变得更加复杂,性能也会受到影响。
  • 维护类似实体非常麻烦。添加索引或分区单个表是一回事。对数百个表格进行操作要困难得多。
  • 维护触发器很麻烦。
  • 当出现新行时(新问题),您必须承担创建表的开销,而不是仅仅添加到现有表。
  • 更改表格,比如添加新列或重命名现有列,非常麻烦。

尽管将所有问题都放在一个表中确实使用了少量额外的存储空间,但您必须将其与使用非常小的表的开销进行平衡。无论数据是10字节还是10千兆字节,包含数据的表必须占用至少一个数据页。如果一个数据页是16千字节,那就是为了支持单个实体的多个表而浪费的大量空间。

至于数据库限制。我甚至不确定数据库是否可以为Stack Overflow上的每个问题支持单独的表。

有一种情况是并行表结构很有用。这就是安全要求要求数据分离的时候,可能是出于客户机密性的原因。但是,这通常是单独的数据库的参数,而不仅仅是单独的

答案 1 :(得分:0)

怎么样:SQL Server不是为忽视关系定理基础的人而设的。

你的交叉问题查询存在很多问题,这将完全扼杀所有收益。典型的初学者错误 - 我建议一本关于SQL基础知识的好书。