其實這篇很是簡單,由於你們都是用這個方法解決的,我決定用本身的語言來描述清楚這一個問題。javascript
假設,咱們有一個列,這個列只可以取某些有效值。好比一個用戶表,咱們有一個姓氏列,咱們須要限定裏面的值爲中國的姓氏,好比:趙錢孫李周吳鄭王馮陳褚衛蔣沈韓楊。html
對於這個問題,其實只有初學者可能會用這個方法,就是使用CHECK約束或者觸發器來限定列的值,好比:java
CHECK (lastname IN ('趙','錢','孫','李'));
這樣作的缺點以下:git
一、獲取全部可選值有困難,假設我要作個下拉列表,讓用戶選擇可供輸入的姓氏,那麼SQL語句就複雜了,你須要查詢系統視圖。數據庫
二、添加可選值,假如咱們要增長一個外國的姓氏。那麼你須要修改CHECK約束或觸發器。數據庫設計
三、刪除可選值,假設從今天起又不支持外國姓氏了,可是數據庫中又已經有了一個外國姓氏,你不得不保留這一個廢棄值。但下拉列表框中又不能再讓用戶選,這下麻煩大了。post
四、移植性差,CHECK,約束,觸發器的語法在各類數據庫不相同,移植難度大。this
建立一張檢查表,每一行包含容許姓氏出現的值,而後定義一個外鍵約束。spa
這個你懂的,再也不廢話。設計
除非,你很肯定這些值不會變時,你可使用CHECK約束或觸發器等手段實現。例如性別:男,女。不然,仍是使用檢查表的方式比較好。