SQL Server Table建立


建之前,查一下:

EXEC sp_helpfilegroup
--查詢目前DATABASE有什麼群,ID為何,群裡有幾個檔
SELECT * FROM sys.filegroups
--更詳細的查詢



基本建表:


CREATE TABLE 員工表
(
 員工編號 INT NOT NULL,
 姓名 NCHAR(5) NOT NULL,
 姓別 BIT,
 生日 DATE,
 電話 CHAR(10),
  地址 NCHAR(30),
 年齡 AS YEAR(GETDATE())-YEAR(生日),
 薪資 INT CHECK (薪資>19720) DEFAULT 19720,
 --預設19720,必須大於19720
 
 年資 AS 薪資*12 PERSISTED,
 --PERSISTED 算好後,直接存放硬碟上
 --如此不用每次計算,但參數需決定性
 --年齡欄位就不行,GETDATE()函數沒有決定性

 建檔時間 DATETIME DEFAULT GETDATE(),

 CHECK (電話 IS NOT NULL OR 地址 IS NOT NULL),
 CHECK (生日 < GETDATE() AND YEAR(GETDATE())-YEAR(生日) > 15)
 --檢查,可以放在整個表的最後,或是像'薪資' 欄放在後面
 --但是薪資欄中,只能放一個CHECK,整個表可以放多個


 /*補充:
 --員工相片 VARBINARY(MAX)
 --若有超大型的欄位:VARCHAR(MAX),NVERCHAR(MAX)等等
 --要記得在外面ON XXX後面加上 TEXTIMAGE_ON 超大型群 
 */
)
ON 人事群



主鍵的目的:整張表唯一且不重複的值,用意在辦視每一筆資料 (例:身份證字號)
叢集索引:整張表唯一且排序的依據,影響整張表深遠
主鍵不一定是叢集索引,但大部份


舉例:
班級成績依座號排序 (座號即是主鍵,且是叢集索引,不重複且是排序)
但是今天要找的假設成績大於60分的學生
如此座號排序一點效率也沒有

若當初是依成績排序 (叢集索引)
找的效率就快一點
但是主鍵 (座號) 是不變的

大部份時,主鍵也是索引鍵,用PRIMARY KEY即預設為主索引鍵
.UNIQUE:該欄不可重複
.主鍵可以有2個欄位串在一起當主鍵
.外來鍵預設為NO ACTION,當外來鍵的參考更動或刪除時
會不給改,除非有設定變動行為
CASCADE 是連動的意思



CREATE TABLE 訂單表
(
 訂單編號 INT PRIMARY KEY,
 訂單金額 INT,
 負責員工 INT FOREIGN KEY REFERENCES 員工表(員工編號)
  ON UPDATE CASCADE -- NO ACTION | CASCADE | SET NULL | SET DEFAULT
  ON DELETE NO ACITON,
 --這裡指的是訂單表的負責員工,參考了員工表(員工編號)  
 --外來鍵參考,SQLServer規定,參考的外來鍵
 --必須是該表的主鍵(不一定是索引鍵)

)ON 人事群


留言

熱門文章