使用CREATETABLE語句宣告一個計算列(轉)

RegisterForBlog發表於2007-08-11
使用CREATETABLE語句宣告一個計算列(轉)[@more@]

  追溯到關聯式資料庫理論的創始人E. F. Codd,就出現了這樣一個通用原則:永遠不儲存可被計算的資料。這個原則迴避了這樣一個問題:“我們應該在什麼地方計算這個計算結果?”預設的答案是“在前臺應用程式。”

  

  假設一個表包含SubTotal 和TaxRate 兩個列。根據這一原則,“列”TaxAmount 和Total 應該是虛的。因此,將它們建立為檢視或儲存過程的一部分;或者,採用另外一種方法,將它們留給前臺應用程式來計算並將結果呈現給使用者。

  

  該原則的一個替代方案叫做計算列(computed column)。使用這個表示式,你就可以將一個計算列宣告為 CREATE TABLE 語句的一部分,然而,它還可以下達給資料庫(要麼是透過圖形使用者介面 GUI 要麼直接透過資料定義語言 DDL 指令)。

  

  假設一個資料庫包含有房子粉刷估計。忽略一些細節,比如房子的窗戶和門的數目(並假設所有的牆都粉刷成同樣的顏色),還有兩個問題需要解決:我們要將天花板粉刷成一樣的顏色嗎(一般答案都是“不要”),我們要粉刷幾層(一般答案都是“兩層”)?

  

  如果不使用計算列,我們就要把這些問題推遲到以後解決,並把結果計算任務交給前臺應用程式來完成。有了計算列,我們就可以在資料庫中嵌入公式,建立一個虛列提供給任何前臺使用。

  

  可以使用下面這樣的語句來建立表:

  

  CREATE TABLE [TestComputedColumns] (

    [PK] [int] IDENTITY (1, 1) NOT NULL ,

    [Length] [int] NOT NULL ,

    [Width] [int] NOT NULL ,

    [Height] [int] NOT NULL ,

    [Coats] [int] NOT NULL CONSTRAINT [DF_TestComputedColumns_Coats] DEFAULT

   (2),

    [IncludeCeiling] [bit] NOT NULL CONSTRAINT

   [DF_TestComputedColumns_IncludeCeiling] DEFAULT (0),

    [Area] AS ((2 * ([Height] * [Length] + [Height] * [Width]) + [Length] *

   [Width] * [IncludeCeiling]) * [Coats]),

    CONSTRAINT [PK_TestComputedColumns] PRIMARY KEY CLUSTERED

    (

      [PK]

    ) ON [PRIMARY]

  ) ON [PRIMARY]

  GO

  

  你不妨使用自己的前臺程式,插入幾行資料看其執行效果。例如,使用Access 2000 及更高版本 Access,建立一個 Access 資料專案(ADP,Access Data Project)指向你的資料庫,選擇表,然後建立一個 AutoFrom(自動窗體)。輸入一兩行資料然後翻回到你所輸入的條目,你將看到計算列已經有了正確的值。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10763080/viewspace-948377/,如需轉載,請註明出處,否則將追究法律責任。

相關文章