2009-07-27 77 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%行,並且這些行將比它們在單個表中的更小)。但是,您必須平衡這一點,否則您需要回到主表以獲取其他數據。

可以肯定的唯一方法是將它設置兩種方式和基準它。