2

我希望我在這裏不要問太明顯的問題。當對一個計算列進行非規範化時,什麼是權衡?

對於我目前的項目,我正在設計一個使用sql server 2008的相對簡單的數據庫。對於其中一個表,我決定引入一個'計算列'(未持久化)。它的表達僅僅是其他兩個數字列的產物,其存在的唯一原因是便利(我正在對網頁進行單向數據綁定)。

但是我意識到使用計算列違反了第一範式。這讓我想知道:笏是取捨?如果我的計算列的唯一原因是便利,它是否超過了非規範化?

+4

很明顯,在數據庫服務器上有一些額外的CPU開銷,用於計算可能在另一個層中計算的內容,並通過返回附加列來略微增加網絡通信量。如果它沒有被保存,CUD操作沒有額外的開銷,並且不佔用磁盤空間,因此不會導致額外的I/O。 – 2010-11-30 15:41:00

+0

如果一個SQL表中至少有一個鍵,具有唯一的列名,並且所有列都不可爲空,則它們在1NF中。計算列不違反1NF – sqlvogel 2010-12-01 18:07:07

回答

1

「使用計算列違反第一範式」:完全沒有!它不被存儲,它隨時用最新的數據重新計算。所以這是一個很好的解決方案,就像在視圖中有一個計算列一樣。

0

其表達僅僅是2個數字列和生存的 唯一理性的產物 是 方便(我做了一些單向 數據綁定到一個網頁)。

然後把計算放到你的SELECT語句中,而不是放到數據庫中。