資料庫關係模型有哪三類完整性約束?
一、實體完整性
實體完整性要求每個表都有唯一識別符號,每一個表中的主鍵欄位不能為空或者重複的值。
二、參照完整性
參照完整性要求關係中不允許引用不存在的實體。設定相應的更新刪除插入規則來更新參考表。
例如表sutdent(有id,username,password),表sutdent_info(有id,name,age,sex)。其中表sutdent_info參照了表student。id作為外來鍵。那麼當student表刪除一行時,表student_info對應的id那一列將被刪除或者置空(根據設定的規則而定)。同樣,表student_info增加一行,其中的id必須等於student表中的id。
三、使用者自定義完整性
使用者自定義完整性是針對某一具體關係資料庫的約束條件,它反映某一具體應用所涉及的資料必須滿足的語義要求。
也就是說:某個表你設定這一列為null,not null,default,check等。包括:非空約束、唯一約束、檢查約束、主鍵約束 、外來鍵約束
1、非空約束(Not Null Constraint) 這個可能大家都瞭解,就是我們在新增那個表 userinfo,在id、name後面都添加了not null,就是有些列不能把它設為空,相信大家都理解,我就說下我在一個英文資料看到的一段英文:The not null specification prohibits the insertion of a null value for this attribute.Any database modifucation that would cause a null to be inserted in an attribute declared to be not null generates an error diagnostic.(大家就得自己翻譯了)
2、唯一約束(Unique Constraint) 一個唯一約束並不包括一個NULL值。直接在欄位定義後加入UNIQUE即可定義該唯一約束。 1) 一個表只能建立一個主鍵約束,但一個表可以根據需要對不同的列建立若干unique約束 2)主鍵欄位不允許為null ,unique允許為空 3)一般建立主鍵約束時,系統自動產生簇索引,unique約束自動產非簇索引
3、檢查約束(The Check Clause) 通過在定義資料庫表裡,在欄位級或者是在表級加入的檢查約束,使其滿足特定的要求。 我來舉一個例子 create table student ( name varchar(15) not null, student_id varchar(15), degree_level varchar(15), primary key(student_id), check(degree_level in('Bachelors','Masters','Doctorate'))); Here ,we use the check clause to simulate an enumerated type by specifying that degree_level must to be one of 'Bachelors','Masters','Doctorate';
4、主鍵約束(Primary Key Constraint) 其實主鍵約束就是一張表只能建立一個主鍵約束,其實就是唯一約束+非空約束。大家通過上課討論那麼多關於“依賴”的事情,估計大家都能理解了
5、外健約束( Foreign Key Constraint) Foreign Key Constraint主要是確保同一個表或者不同表之間的引用完整性,所以必須引用一個PRIMARY KEY或者UNIQUE約束,使用者必須在應用表上具有REFERENCES許可權;一個表中最多可以有31個外部鍵約束; 在臨時表中,不能使用外部鍵約束; 主鍵和外部鍵的資料型別必須嚴格匹配 。