单独表中可为空的数据库属性

时间:2009-07-27 09:49:24

标签: database-design

我有一个数据库表,其中包含已提交的申请表的数据,预计每年负载为200万行。

可以选择使用自定义文本标记应用程序,但此功能可能仅在5-10%的时间内使用。稍后可以通过本文搜索表格。

这应该作为主表上的可空属性实现,还是最好将其解压缩到只包含密钥和文本的单独表?

2 个答案:

答案 0 :(得分:1)

答案可能取决于您将使用的特定DBMS。例如,空文本列在DBMS上占用多少空间?此外,这个文本列有多大 - 只有几个字符,或者可能有几千个字符?

为文本设置单独的表的一个可能的优点是,如果它们需要全表扫描(因为它只有行数的5-10%),基于文本的搜索可能更有效,这些行将小于它们在单个表中的行数。但是,您必须平衡这一点,然后您需要加入主表以获取其他数据。

唯一可以确定的方法是双向设置并对其进行基准测试。

答案 1 :(得分:0)

将可空文本列放在单独的表中会在很多方面更好 1)如果移动到单独的表中,它将不可为空 2)它在语义上更优雅 3)加入将不会效率低,因为您将加入父表的PK并且将尽可能使用散列连接。
4)如果您决定将来每个应用程序都有更多此类可选列,那么它将是可扩展的。 您可以查看类似于以下内容的设计:

申请表(app#,date,...)
Application_Attachments(app#,text_col1)