- 帖子
- 1194
- 主題
- 395
- 精華
- 113
- 積分
- 1747
- 點名
- 0
- 作業系統
- Vista
- 軟體版本
- Office 2003
- 閱讀權限
- 200
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2010-5-1
- 最後登錄
- 2025-3-25
      
|
[教學] (PHP+IIS+MsSQL教學第25篇) 資料庫庫的基礎觀念 下篇
建立資料表
資料庫只是一個儲存資料的空間,要如何讓儲存於其中的資料能格式化分門別類的放置?那就必須透過資料表「Table」來處理了,例如學生的聯絡資料存放在「學生通訊錄」資料表、客戶的訂單資料存放在「訂單」資料表中,將不同類別的資料集中放置於不同的資料表裡加以管理!
一張資料表在SQL Server中視為資料庫的一個物件,而SQL資料庫可擁有2,147,483,647個物件,因此,在SQL資料庫中是可同時存在多張資料表的。
資料表的結構
資料表中有兩項基礎的單元:欄位(Column)與列(Row),欄位用以儲存不同性質的資料,例如學號、姓名…等,而每一列中的各個欄位則構成一筆資料記錄(Record):
要資料表能夠存放資料,首先要定義資料表的規格,所謂的規格就是決定資料表中有幾個存放資料的欄位,還有這些欄位存放資料時的資料型態、資料長度…等限制規定。
欄位的命名
每張資料表最多可有1,024個欄位,每個欄位負責存放不同類型的資料,為了辨識這些欄位,所以必須為資料表中的欄位訂立一個識別名稱,命名基本原則如下:
- 同一張資料表中的欄位名稱不可重複。
- 欄位名稱可用中文。
- 欄位名稱最多為128個字元。
- 欄位名稱不得為SQL 2000內的Transact-SQL保留字。
欄位的資料型態與儲存大小
在SQL Server2000中提供了多種資料型態:
1. 字元資料類(Character Data)
資料類型 | 資料範圍 | 儲存空間大小 | Char(n) | 最多可儲存8000個字元 | n個位元組 | varChar(n) | 最多可儲存8000個字元 | 依實際輸入字數而定 |
Char(n):用來儲存固定長度且非Unicode的字元資料,一般用來儲存固定長度的資料,例如身分證字號,設定為Char(n)的欄位其使用的空間大小就是n個位元組,當輸入的資料長度未達指定的n個位元組時,將會在資料後面補上空白字元(Space)直到該欄位設定的最大長度。
varChar(n):用來儲存非固定長度且非Unicode的字元資料,設定為Char(n)的欄位其使用的空間大小並非就是n個位元組,使用的空間大小視輸入的資料長度而,當輸入的資料長度未達指定的n個位元組時,不會在資料後面補上空白字元(Space)。
提示!!
「Unicode(萬國字元編碼)」:就是每一個字元都是以2個位元組的型式表示,不管是繁體中文字、英文字母、簡體中文字…等,都視為一個字元,存放資料的空間一律給予2個位元組的長度。
2. Unicode文字串類(Unicode Data)
資料類型 | 資料範圍 | 儲存空間大小 | nChar(n) | 最多可儲存4000個字元 | 2*n個位元組 | nvarChar(n) | 最多可儲存4000個字元 | 2*實際輸入字數 | nText | 最多可儲存1,073,741,823個字元(2^30 - 1) | 2*實際輸入字數 |
nChar(n):用來儲存固定長度且是Unicode的字元資料,由於Unicode的每個字元佔用2個位元組,因此,設定為Char(n)的欄位其使用的空間大小就是2*n個位元組。
nvarChar(n):用來儲存非固定長度且是Unicode的字元資料,其資料欄位長度可以是0。
nText:用來儲存非固定長度且是Unicode的字元資料,用來彌補nvarChar(n)的不足,因其可存放超過4000個Unicode字元資料。
3. 二進制資料類(Binary Data)
資料類型 | 資料範圍 | 儲存空間大小 | Binary(n) | 最多可儲存8000個位元組 | n+4個位元組 | varBinary(n) | 最多可儲存8000個位元組 | 輸入資料的實際長度 +4個位元組 |
Binary(n):用來儲存n個位元組且固定長度的二進制資料。
varBinary(n):用來儲存n個位元組且非固定長度的二進制資料,其資料欄位長度可以是0。
4. 日期時間資料類(Date / Time Data)
資料類型 | 資料範圍 | 儲存空間大小 | DateTime | 1753/1/1到9999/12/31 | 8個位元組 | smallDateTime | 1900/1/1到2079/6/6 | 4個位元組 |
DateTime:儲存日期、時間或日期時間的欄位,精確度達1/300秒。
smallDateTime:可存放的日期時間資料範圍較小,精確度僅為「分鐘」,故儲存資料所需的空間為DateTime的一半。
5. 貨幣資料類(Money Data)
資料類型 | 資料範圍 | 儲存空間大小 | Money | -922,337,203,685,477.5808到
922,337,203,685,477.5807 | 8個位元組 | smallMoney | -214,748.3648 到 214,748.3647 | 4個位元組 |
此二種資料型態皆用於儲存貨幣資料,例如費用、價格…等,Money資料型態的精確度達萬分之一貨幣單位,而smallMoney資料型態的精確度只有千分之十的貨幣單位。
6. 整數資料類(Fixed Numeric Data)
資料類型 | 資料範圍 | 儲存空間大小 | bigint | -9,223,372,036,854,775,808 到
9,223,372,036,854,775,807 | 8個位元組 | int | -2,147,483,648到2,147,483,647 | 4個位元組 | smallint | -32,768 到 32,767 | 2個位元組 | tinyint | 0 到 255 | 1個位元組 |
以上資料型態皆用於儲存整數資料,請依可能的資料內容選定適當的資料型態。
7. 精確數值類(Exact Numeric Data)
資料類型 | 資料範圍 | 儲存空間大小 | Decimal[(p[,s])] | -10^38+1 到 10^38-1 | 2~17個位元組 | Numeric[(p[,s])] | -10^38+1 到 10^38-1 | 2~17個位元組 |
基本上,此兩種資料型態是一樣的,最大有效位數值為38,應用上應該使用Decimal,因為Numeric是為了向前相容的原因而存在。
p:指定小數點左方及右方可儲存的十進位數總和的上限,就是指整數與小數的總合位數。
s:指定小數點右方可儲存的十進位個數總和的上限,即指定小數點後的小數位數,其值可介於0~p之間。
Decimal與Numeric資料型態的欄位不需指定長度,其使用空間視精確度高低自動調整。
精確度 | 儲存區位元組 | 1 - 9 | 5 | 10-19 | 9 | 20-28 | 13 | 29-38 | 17 |
8. 浮點數值類(Approximate Numeric Data)
資料類型 | 資料範圍 | 儲存空間大小 | Float[(n)] | -1.79E +308 到 1.79E +308 | 最大8個位元組 | Real | -3.40E +38 到 3.40E +38 | 4個位元組 |
浮點資料是近似值,其資料型別範圍無法正確代表所有的值,因此上表兩種資料型態適用於有誤差的數值資料。
Real資料型態的來為固定使用4個位元組空間,而Float[(n)]資料型態的使用空間,則視精確度n而定:
n | 精確度 | 儲存大小 | 1-24 | 7 位數 | 4 位元組 | 25-53 | 15 位數 | 8 位元組 |
9. 大量資料類(Text and Image Data)
資料類型 | 資料範圍 | 儲存空間大小 | Text | 最大長度為
2^31-1(2,147,483,647)個字元 | | Image | 最大長度為
2^31-1(2,147,483,647)個位元組 | |
Text:用來儲存非固定長度且非Unicode的字元資料,用來彌補varChar(n)的不足,因其可存放超過4000個字元資料,此資料類型是有一個16位元的指標用於資料分頁上,還另外使用8K位元組的分頁來儲存實際的資料,指標資料與實際資料表欄位的資料是分開儲存的。
Image:用來儲存n個位元組且非固定長度的二進制資料,非指儲存於該類型欄位的資料集僅為影像資料,亦可以是Word文件、OLE物件…等,此資料類型是有一個16位元的指標用於資料分頁上,還另外使用8K位元組的分頁來儲存實際的資料,指標資料與實際資料表欄位的資料是分開儲存的。
10. 特殊資料類
資料類型 | 資料範圍 | 儲存空間大小 | Bit | 0 或 1 | | timestamp | 全資料庫唯一的數字 | 8個位元組 | Sql_variant | text、ntext、timestamp與sql_variant以外的各種SQL Server支援的資料型別 | 不定 | Table | 資料查詢結果集 | 依資料表定義 | cursor | 指標參考 | | uniqueidentifier | 唯一識別碼(GUID) | 16個位元組 |
Bit資料類型欄位適合儲存布林值的資料(成立為1,不成立為0),同一資料表中的Bit資料類型欄位共用一個位元組空間,資料表中若有1~8個Bit資料類型欄位,則佔用1個位元組的儲存空間;資料表中若有9~16個Bit資料類型欄位,則佔用2個位元組的儲存空間,以此類推。
timestamp:每一張資料表僅能有一個timestamp資料類型欄位,欄位所儲存的值與日期時間無關,而每一次新增或修改資料表時,資料庫自動設定的一個二進位值,此值在同一個資料庫中是唯一的。
uniqueidentifier:唯一識別碼(GUID),是由機器中的網路卡號加上CPU回傳之獨一數值所組成。 |
|