程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQLServer2005Beta2Transact-SQL功能(3)

SQLServer2005Beta2Transact-SQL功能(3)

編輯:關於SqlServer
在開放架構方案中,您需要用事先不知道或因實體類型而異的屬性集來維護實體。應用程序的用戶動態定義這些屬性。您將屬性拆分到不同的行中,並且只為每個實體實例存儲相關的屬性,而不是在表中預定義很多列並存儲很多空值。
  
  PIVOT 使您可以為開放架構和其他需要將行旋轉為列的方案生成交叉分析報表,並且可能同時計算聚合並且以有用的形式呈現數據。
  
  開放架構方案的一個示例是跟蹤可供拍賣的項目的數據庫。某些屬性與所有拍賣項目有關,例如,項目類型、項目的制造日期以及它的初始價格。只有與所有項目有關的屬性被存儲在 AuctionItems 表中:
  
  CREATE TABLE AuctionItems
  (
   itemid    INT     NOT NULL PRIMARY KEY NONCLUSTERED,
   itemtype   NVARCHAR(30) NOT NULL,
   whenmade   INT     NOT NULL,
   initialprice MONEY    NOT NULL,
   /* other columns */
  )
  CREATE UNIQUE CLUSTERED INDEX idx_uc_itemtype_itemid
   ON AuctionItems(itemtype, itemid)
  INSERT INTO AuctionItems VALUES(1, N'Wine',   1822,   3000)
  INSERT INTO AuctionItems VALUES(2, N'Wine',   1807,    500)
  INSERT INTO AuctionItems VALUES(3, N'Chair',  1753,  800000)
  INSERT INTO AuctionItems VALUES(4, N'Ring',   -501,  1000000)
  INSERT INTO AuctionItems VALUES(5, N'Painting', 1873,  8000000)
  INSERT INTO AuctionItems VALUES(6, N'Painting', 1889,  8000000)
  
  其他屬性特定於項目類型,並且不同類型的新項目被不斷地添加。這樣的屬性可以存儲在不同的 ItemAttributes 表中,其中每個項屬性都存儲在不同的行中。每個行都包含項目 ID、屬性名稱和屬性值:
  
  CREATE TABLE ItemAttributes
  (
   itemid  INT     NOT NULL REFERENCES AuctionItems,
  
   attribute NVARCHAR(30) NOT NULL,
   value   SQL_VARIANT NOT NULL,
   PRIMARY KEY (itemid, attribute)
  )
  INSERT INTO ItemAttributes
   VALUES(1, N'manufacturer', CAST(N'ABC'       AS NVARCHAR(30)))
  INSERT INTO ItemAttributes
   VALUES(1, N'type',     CAST(N'Pinot Noir'    AS NVARCHAR(15)))
  INSERT INTO ItemAttributes
   VALUES(1, N'color',    CAST(N'Red'       AS NVARCHAR(15)))
  INSERT INTO ItemAttributes
   VALUES(2, N'manufacturer', CAST(N'XYZ'       AS NVARCHAR(30)))
  INSERT INTO ItemAttributes
   VALUES(2, N'type',     CAST(N'Porto'      AS NVARCHAR(15)))
  INSERT INTO ItemAttributes
   VALUES(2, N'color',    CAST(N'Red'       AS NVARCHAR(15)))
  INSERT INTO ItemAttributes
   VALUES(3, N'material',   CAST(N'Wood'       AS NVARCHAR(15)))
  INSERT INTO ItemAttributes
   VALUES(3, N'padding',
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved