2009-07-27 76 views
2

我有一个数据库表,其中包含每年提交的应用程序表单的数据,预测负载为200万行。单独表中的可空数据库属性

有标记与自定义文本的应用程序的选项,但此功能可能只被使用的时间5-10%。稍后表格可以通过本文搜索出来。

如果这被实现为在主表可为空的属性,或者是它更好地提取这种仅含键和文字一个单独的表?

+0

“更好”?你能提供你想要优化的东西吗? “更好”是模糊的。任何事情都可能是“更好”的。什么对你很重要? – 2009-07-27 09:52:18

+0

好吧,两个表格似乎更复杂,但冗余度较低,避免了90%的空值行。当放置在单独的表格中时,搜索这些文本可能会更容易。但是,再次将主表上的可空属性看起来更简单,但可能被认为是糟糕的数据库设计。 – lox 2009-07-27 10:30:06

回答

0

如果移动到一个单独的表
2)在语义上更优雅在一间单独的表可为空的文本列会在许多方面
1越好)这不会是可空
三)参加后面会不要低效,因为您将加入父表的PK,并且将全部使用散列连接。
4)如果您决定在将来为每个应用程序添加更多可选列,它将具有可扩展性。 你可以看到类似下面这样的设计:

应用程序(APP#,日期,...)
Application_Attachments(应用#,text_col1)

1

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

具有文本单独的表的一个可能的好处是,它可能是基于文本的搜索更有效率,如果他们需要进行全表扫描(因为它只会有数量的5-10%行,并且这些行将比它们在单个表中的更小)。但是,您必须平衡这一点,否则您需要回到主表以获取其他数据。

可以肯定的唯一方法是将它设置两种方式和基准它。