posts - 37,  comments - 9,  trackbacks - 0
          唯一約束

          唯一約束與創建唯一索引基本上是一回事,因為在創建唯一約束的時候,系統會創建對應的一個唯一索引,通過唯一索引來實現約束。不過唯一約束更直觀的表達了對應列的唯一性,使得對應索引的目的更加清晰,所以一般建議創建唯一約束而不是只創建唯一索引。

          在PD中創建唯一約束的操作,以教室表來說,RoomID是主鍵,必然是唯一的,RoomName如果我們也要去必須是唯一的,那么具體操作如下:

          在PD的模型設計面板中,雙擊“教室”表,打開屬性窗口,切換到"”Keys”選項卡,可以看到里面有一行數據PK_ClassRoom,這是主鍵約束。添加一行數據,命名為UQ_RoomName,不能將右邊的“P”列選上,然后單擊工具欄的“屬性”按鈕,彈出UQ_RoomName的屬性窗口,切換到列選項卡,單擊增加列按鈕,選擇將RoomName列添加到其中,然后單擊確定即可完成唯一約束的添加。



          這樣系統就會自動創建唯一約束。

          CHECK約束

          CHECK分為列約束和表約束,列約束是只對表中的某一個列進行的約束,可以在列的屬性中進行設置,而表約束是對多個列進行的約束,需要在表的屬性中進行設置(其實列約束也可以在表約束中設置)。

          1.標準CHECK約束

          對于一些常用的CHECK約束,可以直接通過設置界面來完成。以班級表為例,ClassName每個學校有自己的命名規則,假設這里規定ClassName必須以2開頭,那么需要在ClassName列上定義CHECK約束,使得其滿足命名規范。具體操作是在PD中雙擊Class表,打開Class的屬性窗口,切換到列選項卡,選擇ClassName列,單擊工具欄的“屬性”按鈕,彈出ClassName的屬性窗口,切換到StandardChecks選項卡如圖:



          在這個選項卡可以定義屬性的標準檢查約束,窗口中每項的參數的含義,如下:

          參數 說明
          Minimum 屬性可接受的最小數
          Maximum 屬性可接受的最大數
          Default 屬性不賦值時,系統提供的默認值
          Unit 單位,如公里、噸、元
          Format 屬性的數據顯示格式
          Lowercase 屬性的賦值全部變為小寫字母
          Uppercase 屬性的賦值全部變為大寫字母
          Cannot modify 該屬性一旦賦值不能再修改
          List Of Values 屬性賦值列表,除列表中的值,不能有其他的值
          Label 屬性列表值的標簽
          2.直接編寫SQL語句的CHECK約束

          在前面彈出ClassName屬性窗口中,單擊左下角的“More”按鈕,系統將彈出更多的選項卡,切換到“Additional Checks”選項卡,可以設置約束名和具體的約束內容,如圖所示:



          表級的CHECK約束與列級的CHECK約束設置類似,單擊表屬性窗口左下角的“More”按鈕,切換到Check選項卡,設置CHECK約束的命名和SQL語句內容。



          3.使用Rule創建約束

          同樣以班級名必須以2開頭為例,通過Rule創建CHECK約束。首先需要創建一個Rule,雙擊Class表,打開表的屬性窗口,切換到Rules選項卡,單擊“Create a Object”按鈕,系統將打開一個業務規則屬性窗口,修改規則名,并將規則的類型修改為Constraint,如圖所示:



          然后切換到Expression選項卡,設置規則的內容為“ClassName LIKE '2%'”,單擊確定按鈕即可完成Rule的設置。切換到表屬性的Check選項卡,默認約束內容中的“%RULES%”就是用來表示Rule中設置的內容,如果我們還有一些其他的CHECK約束內容,不希望在Rule中設置,而是在Check選項卡中設置,那么只需要刪除%RULES%將CHECK約束內容添加進去,也可以保留%RULES%,然后在與%RULES%之間添加一個and即可。比如規定ClassID必須小于10000,那么我們可以將Check內容設置如下:



          生成的腳本如下:

          create table Class (
             ClassID              int                  not null,
             ClassName            varchar(20)          not null,
             constraint PK_CLASS primary key nonclustered (ClassID),
             constraint CKT_CLASS check (ClassID<10000),
             constraint ClassNameRule check (ClassName LIKE '2%')
          )
          go

          可以看到,根據Rule生成的CHECK約束與在Check選項卡中設置的約束將分別創建一個約束,相互并不影響。

          默認約束

          默認約束是用戶在沒有輸入值的情況下,系統給出默認的值。最常用的是CreateTime字段,設置默認值為getdate(),在用戶創建一行數據時記錄下創建時間。例如對于選課表,需要記錄下選課的時間,則可以設置ApplyTime的默認值為getdate()函數。



          設置默認值約束的操作如下:雙擊選課表,打開表屬性窗口,選擇ApplyTime字段,單擊工具欄的屬性按鈕,打開列的屬性窗口,切換到Standard Checks選項卡,在Default下拉列表框中選擇getdate()即可。



          至此我們所有的約束在PD中的設置都介紹完了,下一篇將介紹視圖、存儲過程等數據庫對象。

          from: http://www.cnblogs.com/studyzy/archive/2009/12/17/1626650.html
          posted on 2011-02-14 20:32 wawlian 閱讀(1698) 評論(0)  編輯  收藏 所屬分類:

          <2011年2月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272812345
          6789101112

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 高尔夫| 长汀县| 察隅县| 五寨县| 浦北县| 灵璧县| 玉树县| 克什克腾旗| 安岳县| 鄂州市| 昆明市| 玉屏| 锦州市| 鄢陵县| 龙州县| 湘乡市| 永丰县| 武夷山市| 新乡县| 大田县| 赤峰市| 鲜城| 桃园市| 彝良县| 浦江县| 镇远县| 弋阳县| 碌曲县| 登封市| 黄平县| 财经| 大连市| 彰化县| 土默特右旗| 永济市| 衡南县| 娄底市| 广水市| 武城县| 沭阳县| 浦城县|