数据库MySQL关系模型之基本概念
1.什么是關系模型
1.1關系模型研究什么
一個關系(relation)就是一個Table
關系模型就是處理Table的,它由三個部分組成:
- 描述DB各種數據的基本結構形式(Table/Relation)
- 描述Table與Table之間所有可能發生的各種操作(關系運算)
- 描述這些操作所應遵循的約束條件(完整性約束)
1.2 關系模型的三個要素
基本結構: Relation/Table
基本操作: 并、差、廣義積、選擇、投影、交、連接、除
(其中并、差、廣義積、選擇、投影為基本運算,交、連接、除為擴展運算)
完整性約束: 實體完整性、參照完整性、用戶自定義的完整性
1.3 表的嚴格定義
域(Domain) : 是一組值的集合,這組值具有相同的數據類型,如整數的集合、字符串的集合、全體學生的集合,再比如,由8位數字組成的集合
域的基數(Cardinality) : 集合中元素的個數稱為域的基數
笛卡爾積: 一組域D1,D2,…Dn的笛卡爾積為D1 * D2 * … * Dn = {(d1,d2,…dn) | di<Di,i=1,…n}
笛卡爾積的每個元素(d1,d2,…,dn)稱作一個n-元組(n-tuple)
若Di的基數為mi,則笛卡爾積的基數,即元組的個數為m1 * m2… * mn
簡單點說: 就是從第一列取出一個,然后從第二列取一個,再從第三列取一個,所有的組合就是笛卡爾積
2. 關系
一組域D1 * D2 * … * Dn的笛卡爾積的子集
也就是從笛卡爾積中選出的具有一定意義的組合,這種意義可以用關系(表)的名字表達
2.1 關系模式
關系可用R(A1:D1,A2:D2, … An:Dn)表示,可簡記為R(A1,A2,…An),這種描述又被稱為關系模式(Schema)或標題(head) ,R是關系的名字,Ai是屬性,Di是屬性多對應的域,n是關系的度或目(degree).關系中元組的數目稱為關系的基數.
舉例如下
家庭(丈夫:男人,妻子:女人,子女:兒童)或家庭(丈夫,妻子,子女)
關系模式R(A1:D1,A2:D2, … An:Dn)中紅色部分在DBMS中一般直接說明為類型,長度等
例如 Student(Sname char(10),Ssex char(2))
2.2 關系模式與關系
關系模式是 關系的結構,關系是 關系模式在某一時刻的數據
關系模式是穩定的,而關系是某一時刻的值,是隨時間可能變化的
3. 關系特性
(1) 列是同質:每一列中的分量來自同一域,是同一類型的數據
不同的列可來自同一個域(域可以定的大一些,比如Person域)
(2) 列位置互換性:區分哪一列是靠列名,而不是所在位置
行位置互換性:區分哪一行是靠某一或某幾列的值
關系是以內容(名字或值)來區分的,而不是屬性在關系的位置來區分
(3) 關系的任意兩個元組不能完全相同,表可能并不完全遵守此特性
(4) 關系需要滿足第一范式:即屬性不可再分特性.舉例如下:
4. 候選碼與外碼
候選碼(Candidate Key): 關系中的一個屬性組,其值能唯一標識一個元組,若從該屬性組中去掉任何一個屬性,它就不具有這一性質了,這樣的屬性組稱作候選碼.
(1)例如:學生(id,Sname,Sage,Sclass),id就是一個候選碼.
(2)有時,關系中有很多組候選碼,例如:學生(id,Sname,Sage,Sclass,Saddress),其中屬性組(Sname,Saddress)也是候選碼(同名同地址的兩個學生是不存在的)
主碼
當有多個候選碼時,可以選定一個座位主碼,DBMS以主碼為主要線索管理關系中的各個元組.在上面(1)(2)例子中,選哪個作為主碼都可以.
主屬性: 包含在任何一個候選碼中的屬性被稱作主屬性,而其他屬性被稱作非主屬性.上面例子(1)中,id就是 主屬性,其他都是非主屬性.
- 最簡單的,候選碼只包含一個屬性
- 最極端的,所有屬性構成這個關系的候選碼,稱為全碼(All-Key)
外碼(Foreign Key)/外鍵
- 關系R中的一個屬性組,它不是R的候選碼,但它與另一個關系S的候選碼相對應,則稱這個屬性組為R的外碼或外鍵.
- 例如,"合同"關系中的客戶號不是候選碼,但卻是外碼.因它與客戶關系中的候選碼"客戶號"相對應.
- 兩個關系通常是靠外碼連接起來的
上述概念結構圖
5. 完整性
- 實體完整性
關系的主碼中的屬性值不能為空值 - 參照完整性
如果關系R1的外碼Fk與關系R2的主碼Pk相對應,則R1中的每一個元組的Fk值或者等于R2中某個元組的Pk值或者為空值 - 用戶自定義完整性
用戶針對具體的應用環境定義的完整性約束條件
范式
一張數據表的表結構所符合的某種設計標準的級別。就像家里裝修買建材,最環保的是E0級,其次是E1級,還有E2級等等。數據庫范式也分為1NF,2NF,3NF,BCNF,4NF,5NF。一般在我們設計關系型數據庫的時候,最多考慮到BCNF就夠。符合高一級范式的設計,必定符合低一級范式,例如符合2NF的關系模式,必定符合1NF。
1NF
符合1NF的關系中的每個屬性都不可再分。表1所示的情況,就不符合1NF的要求。
2NF
是否存在非主屬性對于碼的部分函數依賴
就是要有主鍵, 要求其他字段都依賴于主鍵. 為什么要有主鍵, 沒有主鍵就沒有唯一性, 沒有唯一性在集合中就定位不到這行記錄, 所以要主鍵.
3NF
在2NF的基礎之上,消除了非主屬性對于碼的傳遞函數依賴.
消除冗余, 就是各種信息只在一個地方存儲, 不出現在多張表中.
BCNF
在 3NF 的基礎上消除主屬性對于碼的部分與傳遞函數依賴.
數據庫三大范式的一己之見https://blog.csdn.net/qq_26683009/article/details/51170540
如何理解關系型數據庫的常見設計范式? - 駱小龍的回答 - 知乎
https://www.zhihu.com/question/24696366/answer/243381425
總結
以上是生活随笔為你收集整理的数据库MySQL关系模型之基本概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开始使用Nuxt.js
- 下一篇: Hadoop2.0新特性