【数据库】数据库入门(二): 关系型数据库
定義
- 屬性(Attribute): 表的每一列具有固定的屬性類別。
- 如姓名(Name)、年齡(Age)、地址(Address)、電話號(hào)碼(PhoneNumber)等。
- 域(Domain):?每個(gè)屬性所限定的數(shù)據(jù)類型及其取值范圍。
- 常用的域有字符串(STRING)、日期(DATE)、整型數(shù)(INT)等。
- 元組(Tuple): 表的每一行稱為一個(gè)元組,用來(lái)標(biāo)識(shí)一個(gè)實(shí)體,表中不能出現(xiàn)相同的兩個(gè)元組。
- 單個(gè)元組的取值必然是所有域的笛卡爾積(Cartesian Product)的一個(gè)元素。
- 如 {'Sunday', ‘2019-08-02‘, 100} 是?{STRING, DATE, INT} 的一個(gè)元素。
- 關(guān)系(Relation): 由行和列交錯(cuò)形成的二維表(Table),它表示一類數(shù)據(jù)關(guān)系。
- 單個(gè)二維表的取值必然是所有域的笛卡爾積(Cartesian Product)的一個(gè)子集。
- 關(guān)系模式(Relation Schema): 定義的多個(gè)二維表及其包含的所有屬性。
- 它包括表名和一系列的屬性
- 每個(gè)屬性都跟域相關(guān)聯(lián)
- 關(guān)系數(shù)據(jù)庫(kù)模式(Relational Database Schema):?
- 它是多個(gè)關(guān)系模式的集合(包括表名和所有屬性);
- 它是一個(gè)關(guān)于完整性約束(Integrity Constraints,IC)的集合。
- 關(guān)系數(shù)據(jù)庫(kù)狀態(tài)(Relational Database State):?
- 它是多個(gè)關(guān)系 / 表的集合;
- 在某一個(gè)具體時(shí)刻,一種關(guān)系數(shù)據(jù)庫(kù)模式只存在一種關(guān)系;
- 所有的關(guān)系 / 表都滿足完整性約束 (IC)。
?
關(guān)系型數(shù)據(jù)庫(kù)的完整性約束
1、域約束(Domain Constraints)
元組中的每一個(gè)值必須是在其屬性的取值范圍之中,即既要符合定義的數(shù)據(jù)類型,又要在取值范圍之中。
?
2、關(guān)鍵字約束(Key Constraints)
超鍵(SuperKey):在一個(gè)關(guān)系 / 表中,不存在兩個(gè)獨(dú)立元組的超鍵有相同的取值,即每一個(gè)獨(dú)立元組超鍵的取值必不相同。
候選鍵(Candidate Key):當(dāng)一個(gè)超鍵不存在它的子集仍然為超鍵時(shí),這個(gè)超鍵被稱為最小超鍵(minimal),也稱候選鍵。
主鍵(Primary Key):取候選鍵集合中的其中一個(gè),可作為當(dāng)前關(guān)系 / 表的主鍵(主鍵是惟一的)。
?
舉幾個(gè)例子說(shuō)明一下
- {DoB} 是關(guān)系 STUDENT 的一個(gè)超鍵嗎?
- 不是,因?yàn)椴煌脑M可能在 DoB 這個(gè)屬性上取相同的值,即可能存在出生日期相同的兩個(gè)學(xué)生。
- {StudentID, DoB} 是關(guān)系 STUDENT 的一個(gè)超鍵嗎?
- 是的,因?yàn)橥ㄟ^(guò)這一組屬性,能唯一區(qū)分出一個(gè)獨(dú)立的元組。
- {StudentID, DoB} 是關(guān)系 STUDENT 的一個(gè)候選鍵嗎?
- 不是,因?yàn)榇嬖谒淖蛹?{StudentID} 也同樣是一個(gè)超鍵,同時(shí)這還是一個(gè)最小的超鍵,因此是一個(gè)候選鍵。
- {StudentID} 是關(guān)系 STUDENT 的一個(gè)候選鍵嗎?
- 是的,理由如上。
- {DoB} 是可以選為關(guān)系 STUDENT 的主鍵嗎?
- 不是,DoB本身不是一個(gè)超鍵,更不會(huì)是一個(gè)候選鍵,所以不能作為主鍵。
?
3、實(shí)體完整性約束(Entity Integrity Constraints)
實(shí)體完整性約束主要是對(duì)主鍵取值的約束。由于主鍵是用于獨(dú)立區(qū)別同一個(gè)關(guān)系中的不同元組,因此每一個(gè)元組的主鍵取值不能為 NULL,即不能為空。通常在定義關(guān)系或者定義屬性的時(shí)候,使用 NOT NULL 關(guān)鍵字對(duì)主鍵進(jìn)行修飾。
注意:關(guān)系表 R 中的其他屬性也有可能被限定不能為空(NULL),即便它們并不是當(dāng)前關(guān)系表的主鍵,但是主要一個(gè)屬性是關(guān)系表的主鍵,那它的取值絕對(duì)不能為 NULL。
?
4、引用完整性約束(Referential Integrity Constraints)
通過(guò)觀察發(fā)現(xiàn),在存在多個(gè)關(guān)系表的關(guān)系數(shù)據(jù)庫(kù)模式中,數(shù)據(jù)實(shí)體并不會(huì)獨(dú)立存在于單一的關(guān)系表中。意思就是,任意一個(gè)元組(一個(gè)數(shù)據(jù)實(shí)體)必然在各個(gè)關(guān)系表中存在引用關(guān)系。
前面討論到的三種約束類型,都是針對(duì)單一的關(guān)系表;引用完整性約束針對(duì)的是兩個(gè)關(guān)系表之間的關(guān)系,要求指定兩個(gè)關(guān)系表中間的引用關(guān)系。
外鍵(Foreign?Key):對(duì)于一個(gè)關(guān)系表 R1 中的屬性 A,取任意一個(gè) R1 中元組,在另一個(gè)關(guān)系表 R2 中都會(huì)存在一個(gè)元組,其屬性 B 的取值與 A 相等。這種情況下,我們把屬性 A 叫做關(guān)系表 R1 的外鍵,R1 叫做引用關(guān)系(Referencing Relation),R2叫做依賴關(guān)系(Referenced Relation)。
?
舉個(gè)例子說(shuō)明一下
在上面的關(guān)系數(shù)據(jù)庫(kù)模式中,我們可以找出關(guān)系表 ENROL 的兩個(gè)外鍵:
?
容易違反約束條件的幾種情況
- 插入操作(Insert)
- 刪除操作(Delete)
- 更新操作(Update / Modify)
總結(jié)
以上是生活随笔為你收集整理的【数据库】数据库入门(二): 关系型数据库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: c语言贾宗璞答案,c语言答案 贾宗璞、许
- 下一篇: 快速部署PHP Web环境(docker