SQL数据库,多个表共享主索引

时间:2009-11-07 09:47:57

标签: sql

我正在开发一个将数据保存到描述事件的SQL数据库的站点。存储在数据库中的事件之一有几种变化。其中一些变化相当罕见,我试图限制记录中的空白字段数。我正在讨论这两种风格:

选项A:

report_primary_key
.
.
.
standard_info
.
.(17 fields)
.
uncommon_values (8 fields)

或B:

report_primary_key
.
.
.
standard_info
.
.(17 fields)

第二张表

report_primary_key
uncommon_values (3 fields)

选项A将所有可能的信息存储在一个表中,但95%的记录将具有10个以上的空值(25个中)。选项B将具有主表的修剪版本。由于补充表将使用相同的主键,我只需要在补充表中搜索最多三次出现的该键以包含在输出中。

所以,这让我有了问题。额外的查询是否值得在表中节省空间?关于其中一个比另一个更好的想法的任何其他想法?

感谢您的帮助/建议。

2 个答案:

答案 0 :(得分:3)

作为一般规则,如果您发生的“非罕见”事件很少发生,例如:不到5%或10%的时间,我肯定会将这些额外的字段放在一个单独的表中。

在没有所有空字段的情况下,90-95%的情况下设计更简洁,而且创建带额外主键的额外表格所带来的开销很小,可以忽略不计。

答案 1 :(得分:0)

两个表 - 这是超类型/子类型关系的“标​​准”示例。另请参阅this question:和the matching model(图片)。在您的示例中,您有REPORTSPECIAL_REPORT这是一种报告。