数据库笔记——数据模型
1 概念數(shù)據(jù)模型與基本數(shù)據(jù)模型
1.1?概念數(shù)據(jù)模型
獨(dú)立于計(jì)算機(jī)系統(tǒng)的數(shù)據(jù)模型,它完全不涉及信息在計(jì)算機(jī)系統(tǒng)中的表示,只是用來(lái)描述某個(gè)特定組織所關(guān)心的信息結(jié)構(gòu),這類(lèi)模型稱(chēng)為 “概念數(shù)據(jù)模型”。
概念數(shù)據(jù)模型用于建立信息世界的數(shù)據(jù)模型,強(qiáng)調(diào)其語(yǔ)義表達(dá)能力,概念應(yīng)該簡(jiǎn)單,清晰,易于用戶(hù)理解,它是現(xiàn)實(shí)世界的第一層抽象,是用戶(hù)和數(shù)據(jù)庫(kù)人員之間進(jìn)行交流的工具。最著名的是“實(shí)體聯(lián)系模型”。(ER模型)
1.2?基本數(shù)據(jù)模型
直接面向數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)的數(shù)據(jù)模型,它是現(xiàn)實(shí)世界的第二層抽象。這類(lèi)模型涉及到計(jì)算機(jī)系統(tǒng)和數(shù)據(jù)庫(kù)管理系統(tǒng),又稱(chēng)為“基本數(shù)據(jù)模型”或“結(jié)構(gòu)數(shù)據(jù)模型”。
?? 例如, 層次、網(wǎng)狀、關(guān)系、面向?qū)ο髷?shù)據(jù)模型”。這類(lèi)模型有嚴(yán)格的形式化定義,以便在計(jì)算機(jī)系統(tǒng)中實(shí)現(xiàn)。
2?Hierarchical Data Model層次模型
2.1 兩個(gè)概念
record (記錄): 現(xiàn)實(shí)世界的實(shí)體,表達(dá)成“記錄”的形式
field (字段): 每一個(gè)記錄有若干個(gè)域,用來(lái)表示實(shí)體的不同特征
2.2?Parent-Child relationship (PCR)
層次結(jié)構(gòu)最基本的數(shù)據(jù)關(guān)系,兩個(gè)數(shù)據(jù)類(lèi)型之間的1對(duì)多的關(guān)系.
| RCR的定義 | PCR的實(shí)例 |
2.3 Hierarchical Data Schema 層次數(shù)據(jù)模式
每一個(gè)PCR都是1對(duì)多,N個(gè)PCR組成起來(lái).
每個(gè)記錄類(lèi)型只能有一個(gè)parent.
| 定義 | 實(shí)例 |
2.4?Virtual Record虛記錄
在真實(shí)世界中,很多數(shù)據(jù)并不是層次化結(jié)構(gòu)的,很難用PCR來(lái)直接表達(dá)這種結(jié)構(gòu).
?
舉幾個(gè)例子:
| 多對(duì)多關(guān)系 | |
| ? | ? ? |
| 多對(duì)一關(guān)系 | |
| ? | ? |
| 多元關(guān)系 | |
| ? |
為了避免冗余,同時(shí)又要保證PCR的樹(shù)形結(jié)構(gòu),我們就引入了虛記錄的概念.
只存一份記錄,其他引用該記錄的地方用指針代替(用指針代替的記錄——虛擬記錄)[下圖中下標(biāo)v表示的記錄就是虛記錄](méi)
?
| 多對(duì)多關(guān)系 | ||
| 多對(duì)一關(guān)系 | ? | |
| 多元關(guān)系 |
以多對(duì)多關(guān)系為例,我們定義了兩個(gè)虛記錄類(lèi)型,一個(gè)代表學(xué)生一個(gè)代表課程。
那么我們就分別定義了課程-學(xué)生,學(xué)生-課程的一對(duì)多關(guān)系
但是此時(shí)的子女節(jié)點(diǎn)都是虛記錄,這個(gè)虛記錄記錄類(lèi)型并不是真正地存儲(chǔ)數(shù)據(jù),只是存儲(chǔ)了一個(gè)指向真正數(shù)據(jù)的指針。
2.5 層次數(shù)據(jù)的線(xiàn)性表示
由于存儲(chǔ)器是線(xiàn)性的,層次數(shù)據(jù)必須變換成線(xiàn)性形式才能存儲(chǔ),層次數(shù)據(jù)模式的實(shí)例對(duì)應(yīng)一棵層次樹(shù)(或森林),對(duì)層次樹(shù)(或森林)按先序遍歷生成的序列稱(chēng)為層次序列(hierarchical sequence),規(guī)定以此作為存儲(chǔ)次序。
2.6?層次數(shù)據(jù)模型的特點(diǎn)
2.6.1 約束
(1)除了根記錄外,任何其它記錄不能離開(kāi)其雙親記錄而孤立存在;
(2)任何記錄,不管虛實(shí),只允許有一個(gè)雙親記錄(保證層次數(shù)據(jù)模式及其實(shí)例是樹(shù)形);
(3)虛擬記錄的指針必須指向一個(gè)實(shí)際存在的記錄,有虛擬記錄指向的記錄不得刪除;
(4)虛擬記錄不得為根記錄。
2.6.2 優(yōu)點(diǎn)
記錄之間的聯(lián)系通過(guò)指針來(lái)實(shí)現(xiàn),查詢(xún)效率較高(針對(duì)層次結(jié)構(gòu))。
2.6.3 缺點(diǎn)
1、只能表示1:N聯(lián)系,雖然可以采用虛擬記錄描述非層次數(shù)據(jù)關(guān)系,但較復(fù)雜,用戶(hù)不易掌握,并且非層次結(jié)構(gòu)的查詢(xún)效率比較低;
2、由于層次順序的嚴(yán)格和復(fù)雜,引起數(shù)據(jù)的查詢(xún)和更新很復(fù)雜,因此應(yīng)用程序的編寫(xiě)也比較復(fù)雜;
3、模式描述語(yǔ)言較復(fù)雜,數(shù)據(jù)獨(dú)立性差。
3 Network Data Model 網(wǎng)狀數(shù)據(jù)模型
網(wǎng)狀數(shù)據(jù)模型的基本數(shù)據(jù)結(jié)構(gòu)是set(系),代表了兩個(gè)記錄型之間的一個(gè)一對(duì)多的關(guān)系。?一這邊是主記錄;多這邊是屬記錄。
一個(gè)記錄類(lèi)型可以是多個(gè)系的主記錄,也可以是多個(gè)系的屬記錄。
具有多種類(lèi)型屬記錄的系——“多屬系”。
一個(gè)記錄型不能同時(shí)是一個(gè)系的首記錄,又是這個(gè)系的屬記錄。
data item:網(wǎng)狀數(shù)據(jù)結(jié)構(gòu)中對(duì)于記錄的描述,有點(diǎn)類(lèi)似于層次數(shù)據(jù)結(jié)構(gòu)中的field,但是這里的‘field’可以是向量(復(fù)合類(lèi)型)。
在網(wǎng)狀數(shù)據(jù)結(jié)構(gòu)中,系值不再是樹(shù)了,而是鏈表
| ? |
|
?
3.1 Link記錄類(lèi)型
在網(wǎng)狀數(shù)據(jù)結(jié)構(gòu)中,如何表達(dá)自聯(lián)結(jié)呢?(因?yàn)橐粋€(gè)記錄類(lèi)型不能同時(shí)是主記錄和屬記錄)
比如我們要表示公式上下級(jí)關(guān)系的數(shù)據(jù)模式,我們引入一個(gè)LINK記錄類(lèi)型:
| 類(lèi)型 | 實(shí)例 |
| 1:1表示一人擔(dān)任一個(gè)領(lǐng)導(dǎo)崗位 1:N表示一個(gè)人可以領(lǐng)導(dǎo)N個(gè)人 |
因?yàn)樽约汉妥约阂彩穷I(lǐng)導(dǎo)與被領(lǐng)導(dǎo)的關(guān)系,所以我們引入LINK類(lèi)型進(jìn)行輔助。
員工->相應(yīng)LINK是一個(gè)一對(duì)一的關(guān)系,換句話(huà)說(shuō),每一個(gè)LINK就相當(dāng)于員工的一個(gè)“替身”,用它和其他的員工產(chǎn)生聯(lián)系。
s2表達(dá)的就是領(lǐng)導(dǎo)與被領(lǐng)導(dǎo)的關(guān)系。
如果想要找某一個(gè)員工的下屬,先用S1鏈表找到他對(duì)應(yīng)的S,然后用S2鏈表找到除了自己之外的元素,遍歷這個(gè)鏈表。遍歷到的人就是這個(gè)員工的直接下屬
3.2 網(wǎng)狀數(shù)據(jù)結(jié)構(gòu)表達(dá)多對(duì)多關(guān)系
| 也是引用了Link記錄,link記錄有SL鏈表,是和student之間的關(guān)系;CL鏈表,和course之間的關(guān)系 ? ? 當(dāng)我們要看一個(gè)學(xué)生選了幾門(mén)課的時(shí)候,我們從這個(gè)指定的學(xué)生出發(fā),先沿著SL到Link去,然后 再?gòu)腖ink出發(fā),沿著相應(yīng)的CL到course ? 如果要看一門(mén)課那幾個(gè)學(xué)生選呢?那么就反過(guò)來(lái),從課程出發(fā),先沿著相應(yīng)的CL到link,然后從link出發(fā),沿著SL找到所有的學(xué)生 | 本表格中靠上的圖這樣的表示方式是不行的(一個(gè)記錄不能出現(xiàn)在同一系型的多個(gè)系值中,如果需要,那么必須使用Link記錄) 需要這樣,L5之后,沿著CL可以到DB,也可以到L6(C) ? |
4 Relational Data Model 關(guān)系數(shù)據(jù)網(wǎng)絡(luò)
關(guān)系模型(relaction data model)的主要特征是用表格結(jié)構(gòu)表達(dá)實(shí)體集,用外鍵表示實(shí)體間聯(lián)系。與層次模型和網(wǎng)狀模型相比,關(guān)系模型比較簡(jiǎn)單.
?關(guān)系模型是由若干個(gè)關(guān)系模式組成的集合。每個(gè)關(guān)系實(shí)際上是一張表格,記錄之間聯(lián)系是通過(guò)各個(gè)關(guān)系模式的鍵體現(xiàn)的。
關(guān)系模型最基本的數(shù)據(jù)結(jié)構(gòu)是“表”。現(xiàn)實(shí)世界中的實(shí)體、實(shí)體和實(shí)體之間的關(guān)系都是用“表”來(lái)表示(以示區(qū)別,之前的層次和網(wǎng)狀,實(shí)體和實(shí)體之間的關(guān)系是用層次和網(wǎng)絡(luò)來(lái)表示的)
4.1 和層次結(jié)構(gòu)、網(wǎng)狀結(jié)構(gòu)的區(qū)別
關(guān)系模型和層次、網(wǎng)狀模型的最大差別是用鍵而不是用指針導(dǎo)航數(shù)據(jù),其表格簡(jiǎn)單,用戶(hù)易懂,用戶(hù)只需用簡(jiǎn)單的查詢(xún)語(yǔ)句就可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,并不涉及存儲(chǔ)結(jié)構(gòu)、訪(fǎng)問(wèn)技術(shù)等細(xì)節(jié)。
4.2 特點(diǎn)
這時(shí)候存儲(chǔ)的東西,查詢(xún)的東西,所有的東西都是表格,她們形成了一個(gè)封閉的空間,我們可以借此定義一個(gè)代數(shù)系統(tǒng)(關(guān)系代數(shù))。
基于集合論,擁有更高的抽象級(jí)別。
計(jì)算機(jī)底層實(shí)現(xiàn)的一些細(xì)節(jié)將被屏蔽。
非過(guò)程化的查詢(xún)語(yǔ)言(SQL)(用戶(hù)只需要提供他要什么;而不用像之前的層次數(shù)據(jù)模型和網(wǎng)狀數(shù)據(jù)模型一樣,需要詳細(xì)說(shuō)明他需要怎么查詢(xún)【遍歷鏈表or遍歷樹(shù)等到】)
4.2.1 軟連接
之前的兩種數(shù)據(jù)模型中,多對(duì)多是復(fù)雜的(要么需要虛記錄、要么需要LINK記錄).
在關(guān)系數(shù)據(jù)模型中,我們只需要再做一張表(如下圖的elective),里面的s#和C#就是student和course的id,可以看成這兩個(gè)的邏輯指針(即軟連接)。
4.3?關(guān)系數(shù)據(jù)模型的一些概念
屬性(attribute):實(shí)體的性質(zhì)用屬性描述(eg,學(xué)生的姓名、學(xué)號(hào)。。。)
域(domain):每一個(gè)屬性都有一個(gè)取值范圍,這個(gè)范圍就是域。
4.3.1 域的性質(zhì)
1范式限制(1NF):每一個(gè)屬性都是原子的,不能再分;即每一個(gè)屬性不能是結(jié)構(gòu)啊數(shù)組啊什么的;換句話(huà)說(shuō),不允許出現(xiàn)表中套表。
允許某一個(gè)記錄里面的值是空值(NULL,不知道,表示該屬性值空缺)
同一關(guān)系中,不允許有同名屬性,但不同屬性可有相同的域。
4.3.2?關(guān)系
任何一個(gè)實(shí)體都是一個(gè)或者多個(gè)關(guān)系
如果一個(gè)關(guān)系R,有n個(gè)屬性A1,A2,…..An,相對(duì)應(yīng)的域是D1,D2,……Dn,那么關(guān)系R可以表示為R = (A1/D1, A2/D2, … An/Dn),簡(jiǎn)化為R = (A1, A2, … An) ——>這個(gè)就是關(guān)系的模式(schema)
n是關(guān)系的度/目(degree)
在關(guān)系R中,元組的次序無(wú)關(guān),但不能允許有相同的二個(gè)元組
在關(guān)系R中,屬性的次序無(wú)關(guān)。
4.3.3?元組
元組是關(guān)系R的一個(gè)實(shí)例
一個(gè)關(guān)系R可以被表示成 r 或 r(R),r = {t1, t2, …, tm}
每一個(gè)元組可以表示為t = <v1, v2, …, vn>, vi∈Di, 1≤i ≤n ( t ∈ D1×D2×, …, ×Dn, 1≤i ≤n)
relation也被叫做表格,attribute被叫做列,tuple被叫做行。
4.4 鍵
4.4.1?候選鍵(candidate key)
對(duì)一個(gè)關(guān)系而言,一組屬性被稱(chēng)之為候選鍵,當(dāng)他滿(mǎn)足以下條件:
1,任意兩個(gè)元組,這組屬性里面的值都不一樣
2,這組屬性里面的任何一個(gè)子集都不具備上一條特點(diǎn)
那么這一組屬性就被稱(chēng)之為候選鍵 candidate key(eg,身份證號(hào)碼)
(說(shuō)白了就類(lèi)似于極大無(wú)關(guān)組)
4.4.2 超鍵(super key)
如果不滿(mǎn)足候選鍵的條件2,也就是說(shuō)有冗余的屬性,那么這樣的一組屬性被稱(chēng)之為超鍵 super key。
4.4.3 主鍵(primary key)與全鍵(all key)
極大無(wú)關(guān)組不唯一,所以候選鍵也不唯一,那么我們可以選定其中一組為主鍵 primary key,其他的是候選鍵alternate key。
如果主鍵包括了關(guān)系中所有的屬性,那么我們稱(chēng)之為全鍵all key。
4.4.4?外鍵(foreign key)
如果這一張表里面的屬性是用來(lái)引用另一張表的元組(即另一張表的主鍵),那么這一張表里面的這個(gè)屬性被稱(chēng)為外鍵
在students里面sid是主鍵,在enrolled里面,sid是外鍵
4.5?約束
4.5.1 域完整性約束(Domain integrity constraint)
每條元組的每個(gè)屬性的值均符合值域的要求.
4.5.2 實(shí)體完整性約束(Entity integrity constraint )
主鍵的屬性不允許為空
如果這個(gè)值一定要為NULL,那么就不把它設(shè)置為主鍵.
4.5.3 引用完整性約束
外鍵要么空缺,要么引用實(shí)際存在的主鍵值
5 關(guān)系代數(shù)
5.1?這一小節(jié)會(huì)使用到的表格
水手信息的表格(rating是水手的級(jí)別)
?
船信息的表格
預(yù)定關(guān)系(這時(shí)候水手的id和船的id加起來(lái)的這個(gè)屬性組并不是主鍵,因?yàn)橥粋€(gè)水手可以在不同時(shí)間預(yù)定船,所以此時(shí)的主鍵是全鍵)。
5.2 基本運(yùn)算符
如果一個(gè)系統(tǒng)支持以下五個(gè)基本操作,那么這個(gè)系統(tǒng)是關(guān)系完備的(關(guān)系模型上的所有操作都可以通過(guò)這五個(gè)操作導(dǎo)出)。
因?yàn)檫@些操作的結(jié)果也都是關(guān)系,所以這些運(yùn)算符是可以相互組合的。
一元操作(單目)優(yōu)先級(jí)高于二元操作。
5.2.1 選擇
1-Selection? (σ):選擇是一種單目運(yùn)算,即對(duì)一個(gè)關(guān)系施加的運(yùn)算,按給定條件從關(guān)系中挑選滿(mǎn)足條件的元組組成的集合 。
5.2.2 投影
Projection? (Π) :投影操作是單目運(yùn)算,從關(guān)系中挑選指定的屬性組成的新關(guān)系。即把不需要的域(列)去掉
理論上投影操作需要去除重復(fù)元素(面向?qū)ο蟮哪P屠锩?#xff0c;哪怕所有屬性都一樣,只要兩個(gè)元素id不同,就不是一個(gè)元素;但是在關(guān)系模型里面,如果所有的屬性都相等,那么我們認(rèn)為它們表達(dá)的是同一個(gè)元素)。
但在實(shí)際的數(shù)據(jù)庫(kù)操作里面,是不主動(dòng)去除同樣的元素的,除非用戶(hù)顯示地要求刪去(因?yàn)閿?shù)據(jù)庫(kù)并不知道用戶(hù)的應(yīng)用開(kāi)發(fā)需要什么樣的數(shù)據(jù),刪除了可能反而無(wú)法滿(mǎn)足用戶(hù)的需求)。
5.2.3 笛卡爾積
Cross-product? (笛卡爾乘積):把兩個(gè)關(guān)系拼接在一起,兩張表拼成一張大表
笛卡爾乘積的結(jié)果包含原來(lái)兩張表的所有屬性。
結(jié)果由參加運(yùn)算的兩個(gè)表格的每一條元組兩兩拼接而成。
? <t,g>為t和g的拼接,即R × S仍為一個(gè)關(guān)系,它的目為nr+ns、元組數(shù)為|R|×|S|。
以S1×R1為例:
但因?yàn)镾1和R1都有sid這個(gè)屬性,而同一張表里面不允許有兩個(gè)相同的屬性;于是我們要對(duì)屬性進(jìn)行重命名:
結(jié)果為
5.2.4 集合差
et-difference? (-):集合差,A-B:屬于關(guān)系A(chǔ),但是不屬于關(guān)系B的記錄
交運(yùn)算可以用差運(yùn)算表示。設(shè)A、B為兩個(gè)集合,則A和B的交可表示為:A∩B≡A-(A-B)
5.2.5 集合并
Union(∪) 集合并 由屬于A或?qū)儆贐的所有元組組成的集合。即兩個(gè)表合并成一個(gè)
參與并、差操作的兩個(gè)關(guān)系的元組必須限制為同類(lèi)型的,即具有相同的目(屬性數(shù)),且對(duì)應(yīng)的屬性的域相同——并兼容(union compatibility);
5.3 連接
5.3.1 條件連接 condition join
笛卡爾乘積是兩兩拼接,這就可能會(huì)出來(lái)很多沒(méi)有意義的元組,導(dǎo)致數(shù)據(jù)冗余。
條件鏈接就是在笛卡爾乘積的基礎(chǔ)上,對(duì)結(jié)果按照條件C進(jìn)行選擇操作。
有的時(shí)候,條件連接也叫做θ連接。
連接條件為兩關(guān)系中對(duì)應(yīng)屬性的比較,對(duì)應(yīng)屬性不一定同名,但要有相同的域。其普遍表示形式為:<條件1>and<條件2>and…and<條件k>。
5.3.2 等值連接 equi-join
特殊的條件鏈接,只有做笛卡爾乘積的兩個(gè)表格,某一個(gè)/幾個(gè)屬性相同的才會(huì)被選擇
等值連接的結(jié)果相比于條件鏈接和笛卡爾乘積的結(jié)果,把等值的屬性去掉一個(gè)。
5.3.3 自然連接 natural join
做笛卡爾乘積的兩個(gè)表格,所有公共屬性相同的才會(huì)被選擇.
5.4 完備性
5.5 除法
結(jié)果的x集合滿(mǎn)足什么條件呢?對(duì)于B中的每一個(gè)y,都可以在A中找到一條記錄,使得<x,y>在A中
舉一個(gè)例子,A是由sno和pno兩個(gè)屬性組成,A/B的結(jié)果只有sno屬性,因?yàn)閜no屬性被除掉了。
我們要找 原來(lái)關(guān)系A(chǔ)中,和B中的每一條元素都有聯(lián)系的xno。
我們舉A/B2為例,為什么不選s2呢?因?yàn)樵贏中有<s2,p2>,但沒(méi)有<s2,p4>,所以不滿(mǎn)足除法條件(對(duì)于B中的每一個(gè)y,都可以在A中找到一條記錄)
5.5.1 除法的表示
因?yàn)槌ú皇腔具\(yùn)算符,所以我們要看一下怎么把除法用五個(gè)基本運(yùn)算符表示。
直接看“滿(mǎn)足和所有B中元素都有聯(lián)系”這個(gè)約束條件比較繁瑣,所以我們可以從”否定之否定“的角度來(lái)看這個(gè)問(wèn)題。即先看不滿(mǎn)足除法條件的點(diǎn),然后把這些點(diǎn)剔除就可以了。
我們先看
A中所有的x和B兩兩拼接,進(jìn)行笛卡爾乘積,那么所有可能的A_x與B 的組合都有了。
接著是
把所有A中有的<x,y>對(duì)去掉,那么剩下的就是不滿(mǎn)足除法條件的所有<x,y>對(duì)了(不在原來(lái)A中的<x,y>對(duì))
把所有不滿(mǎn)足除法條件的<x,y>對(duì)中的x提出來(lái),這些x就是不滿(mǎn)足除法條件的點(diǎn)(因?yàn)槿绻骋粋€(gè)x滿(mǎn)足除法條件的話(huà),那么所有這個(gè)x的<x,y>對(duì)在前面-A的時(shí)候應(yīng)該都消掉了,留下來(lái)的都是至少有一個(gè)<x,y>對(duì)不在A中的)
于是我們得到了A/B(剔除上一步的x即可)
5.6 外連接
一般的連接是自然連接,那么不滿(mǎn)足連接操作的元組都會(huì)被丟棄。
如果我們一定要這些元素呢?那我們就要用外連接了。
外連接一共分成左外連接、右外連接和全外連接,分別是把左操作數(shù)、右操作數(shù)、兩個(gè)操作數(shù)的所有元組保留。能匹配的匹配,匹配不到的屬性對(duì)應(yīng)的值為空值NULL
5.7 外并
執(zhí)行基本操作并,需要滿(mǎn)足的條件是屬性模式需要相同。但實(shí)際應(yīng)用中,不滿(mǎn)足并兼容關(guān)系的也要合并在一起的話(huà),那就需要使用外并了。結(jié)果的屬性集是參與運(yùn)算的屬性集的并。沒(méi)有值的元素填NULL。
6?關(guān)系演算Relational Calculus
用關(guān)系代數(shù)表示的操作,需要我們指定運(yùn)算的順序【因而以關(guān)系代數(shù)為基礎(chǔ)的DB語(yǔ)言是過(guò)程性語(yǔ)言(procedural language)】,而關(guān)系演算只需要指明需要滿(mǎn)足的邏輯條件(基于謂詞演算的邏輯表達(dá)式)【只要說(shuō)明所要得到的結(jié)果,而不必標(biāo)明操作的過(guò)程,因而以關(guān)系演算為基礎(chǔ)的數(shù)據(jù)庫(kù)語(yǔ)言是說(shuō)明性語(yǔ)言(declarative language)】。
換言之,關(guān)系演算只用謂詞公式告知“做什么”,而不告訴“怎么做”。
目前,面向用戶(hù)的關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言基本上都以關(guān)系演算為基礎(chǔ)。
關(guān)系演算分為元組關(guān)系演算(以元組為單位定義變量)和域關(guān)系演算 (以屬性為單位定義變量),他們唯一的區(qū)別是變量的定義。
關(guān)系演算中的布爾表達(dá)式稱(chēng)為公式,所有讓布爾表達(dá)式為真的結(jié)果就是我們要的答案。
6.1?安全查詢(xún)
我們可以寫(xiě)出一個(gè)句法上是正確的,但是滿(mǎn)足結(jié)果的條件是無(wú)限多的關(guān)系演算。這樣的查詢(xún)是不安全的。
還是以水手為例,比如這樣的一個(gè)關(guān)系演算
意思為找出所有不在sailer表里面的水手,這個(gè)關(guān)系演算句法上是對(duì)的,但是是不安全的,因?yàn)槲覀兛梢哉业綗o(wú)限個(gè)這樣的滿(mǎn)足條件的水手。
6.2 表達(dá)能力完備性
關(guān)系代數(shù)可以表達(dá)的,我們也可以用一個(gè)安全的域關(guān)系演算或者元組關(guān)系演算表達(dá)(兩者表達(dá)能力等價(jià))。
6.3 域關(guān)系演算 Domain Relational Calculus
變量定義在域,也就是屬性上面。形式如下:
‘|’號(hào)右邊的公式可以有更多的域變量,但對(duì)于結(jié)果我只需要n個(gè)就夠了。
6.3.1 DRC中的原子公式
其中X,Y都是域變量,op是比較運(yùn)算符。
6.3.2 DRC中的公式
后兩行“free”的意思是,在p(X)里面,X沒(méi)有被任取和存在限制。
還是以之前的水手為例,那么如果我們要找到等級(jí)在7以上的水手的id,名字等級(jí)和年齡,我們用關(guān)系演算可以這么寫(xiě):
6.4 元組關(guān)系演算Tuple Relational Calculus
有如下的格式:
t是元組變量,既可以用整個(gè)t作為查詢(xún)對(duì)象,也可查詢(xún)t中的某些屬性。
如果查詢(xún)整個(gè)t,則可省去<屬性表>。
還是以水手為例,我們要找到所有等級(jí)在7以上,年齡在50以下的水手的名字,我們可以這么寫(xiě)
6.5 關(guān)系操作用關(guān)系演算表達(dá)
6.5.1?投影
6.5.2?選擇
6.5.3?減法
6.5.4 (自然)連接
7?傳統(tǒng)數(shù)據(jù)結(jié)構(gòu)的評(píng)價(jià)
傳統(tǒng)數(shù)據(jù)結(jié)構(gòu)是我們之前討論過(guò)的層次、網(wǎng)狀、關(guān)系數(shù)據(jù)結(jié)構(gòu)的統(tǒng)稱(chēng)。
7.1 特點(diǎn)
●都繼承了文件中的記錄、字段等概念。
●物理級(jí)也借鑒了文件的索引、散列等存取方法。
●向用戶(hù)提供了統(tǒng)一的數(shù)據(jù)模型和相應(yīng)的數(shù)據(jù)庫(kù)語(yǔ)言。
●都在記錄的基礎(chǔ)上定義了數(shù)據(jù)的基本結(jié)構(gòu)、約束和操作
7.2 不足
以記錄為基礎(chǔ),基于結(jié)構(gòu)化數(shù)據(jù)實(shí)現(xiàn),把現(xiàn)實(shí)數(shù)據(jù)表示成規(guī)范化的內(nèi)容,但這樣就不能很好地面向用戶(hù)和應(yīng)用。
不能很自然地表達(dá)實(shí)體和實(shí)體之間的聯(lián)系。
缺乏語(yǔ)義信息(以關(guān)系為例,把實(shí)體表達(dá)成一張一張的表,從邏輯上講,表之間的地位是平等的。表之間的相互引用、繼承關(guān)系等內(nèi)在聯(lián)系,則需要約束、應(yīng)用程序、數(shù)據(jù)庫(kù)的文檔等才能看出來(lái)。單獨(dú)從模型的角度,是看不出來(lái)的)。
支持的數(shù)據(jù)類(lèi)型太少(結(jié)構(gòu)、字典、列表這種都不行)。
8 ER模型
E-R數(shù)據(jù)模型不是面向?qū)崿F(xiàn),而是面向現(xiàn)實(shí)世界。其設(shè)計(jì)的出發(fā)點(diǎn)是有效自然的模擬現(xiàn)實(shí)世界,而不是首先考慮它在機(jī)器中的實(shí)現(xiàn)問(wèn)題。
?E-R模型提供了實(shí)體、屬性和聯(lián)系三個(gè)抽象概念。這三個(gè)概念簡(jiǎn)單、明了、直觀(guān)易懂,用以模擬現(xiàn)實(shí)世界比較自然,且可方便地轉(zhuǎn)換關(guān)系、層次、網(wǎng)狀數(shù)據(jù)模式。
用E-R表示數(shù)據(jù)模式時(shí),我們只關(guān)心有哪些數(shù)據(jù)(即有哪些實(shí)體以及屬性)以及數(shù)據(jù)間的關(guān)系(實(shí)體關(guān)系),而不必關(guān)心這些數(shù)據(jù)在計(jì)算機(jī)內(nèi)如何表示和用什么DBMS。
在E-R模型中,實(shí)體和聯(lián)系均可有屬性,如選課聯(lián)系的屬性可有成績(jī)、選課時(shí)間等。
ER模型的實(shí)體大部分特點(diǎn)和關(guān)系模型是一樣的,不過(guò)實(shí)體的屬性允許復(fù)合類(lèi)型,允許多值屬性。(比如一個(gè)人有多個(gè)電話(huà),那么電話(huà)這個(gè)屬性就可以是多值屬性)
8.1 ER圖
雖然ER模型最終沒(méi)有成功,但是它的衍生物,ER圖在數(shù)據(jù)庫(kù)的設(shè)計(jì)中起到的重要的作用(我們直接看圖就能知道他的語(yǔ)義信息)
8.2 ER圖的擴(kuò)展(EER extended ER)
8.2.1 弱實(shí)體Weak entity
不能單獨(dú)存在,必須依賴(lài)于其他的實(shí)體。
eg,學(xué)校職工-職工家屬,每個(gè)職工家屬實(shí)體都是弱實(shí)體,必須依賴(lài)于職工存在。
8.2.2 普遍化與特殊化 Specialization and Generalization
類(lèi)似于面向?qū)ο罄锩娴淖宇?lèi)和父類(lèi)。
8.2.3 聚集
允許將兩個(gè)實(shí)體間的關(guān)系也看成一個(gè)實(shí)體。
8.2.4 范疇 Category
可以用不同類(lèi)型的實(shí)體組成的集合表達(dá)一個(gè)實(shí)體。
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的数据库笔记——数据模型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 文巾解题 1310. 子数组异或查询
- 下一篇: 数据库笔记目录