日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

数据库笔记——数据模型

發布時間:2025/4/5 数据库 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库笔记——数据模型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 概念數據模型與基本數據模型

1.1?概念數據模型

獨立于計算機系統的數據模型,它完全不涉及信息在計算機系統中的表示,只是用來描述某個特定組織所關心的信息結構,這類模型稱為 “概念數據模型”。

概念數據模型用于建立信息世界的數據模型,強調其語義表達能力,概念應該簡單,清晰,易于用戶理解,它是現實世界的第一層抽象,是用戶和數據庫人員之間進行交流的工具。最著名的是“實體聯系模型”。(ER模型)

1.2?基本數據模型

直接面向數據庫的邏輯結構的數據模型,它是現實世界的第二層抽象。這類模型涉及到計算機系統和數據庫管理系統,又稱為“基本數據模型”或“結構數據模型”。

?? 例如, 層次、網狀、關系、面向對象數據模型”。這類模型有嚴格的形式化定義,以便在計算機系統中實現。

2?Hierarchical Data Model層次模型

2.1 兩個概念

record (記錄): 現實世界的實體,表達成“記錄”的形式

field (字段): 每一個記錄有若干個域,用來表示實體的不同特征

2.2?Parent-Child relationship (PCR)

層次結構最基本的數據關系,兩個數據類型之間的1對多的關系.

RCR的定義

PCR的實例

2.3 Hierarchical Data Schema 層次數據模式

每一個PCR都是1對多,N個PCR組成起來.

每個記錄類型只能有一個parent.

定義

實例

2.4?Virtual Record虛記錄

在真實世界中,很多數據并不是層次化結構的,很難用PCR來直接表達這種結構.

?

舉幾個例子:

多對多關系

?

?

?

多對一關系

?

?

多元關系

?

為了避免冗余,同時又要保證PCR的樹形結構,我們就引入了虛記錄的概念.

只存一份記錄,其他引用該記錄的地方用指針代替(用指針代替的記錄——虛擬記錄)[下圖中下標v表示的記錄就是虛記錄]

?

多對多關系

多對一關系

?

多元關系

以多對多關系為例,我們定義了兩個虛記錄類型,一個代表學生一個代表課程。

那么我們就分別定義了課程-學生,學生-課程的一對多關系

但是此時的子女節點都是虛記錄,這個虛記錄記錄類型并不是真正地存儲數據,只是存儲了一個指向真正數據的指針。

2.5 層次數據的線性表示

由于存儲器是線性的,層次數據必須變換成線性形式才能存儲,層次數據模式的實例對應一棵層次樹(或森林),對層次樹(或森林)按先序遍歷生成的序列稱為層次序列(hierarchical sequence),規定以此作為存儲次序。

2.6?層次數據模型的特點

2.6.1 約束

(1)除了根記錄外,任何其它記錄不能離開其雙親記錄而孤立存在;

(2)任何記錄,不管虛實,只允許有一個雙親記錄(保證層次數據模式及其實例是樹形);

(3)虛擬記錄的指針必須指向一個實際存在的記錄,有虛擬記錄指向的記錄不得刪除;

(4)虛擬記錄不得為根記錄。

2.6.2 優點

記錄之間的聯系通過指針來實現,查詢效率較高(針對層次結構)。

2.6.3 缺點

1、只能表示1:N聯系,雖然可以采用虛擬記錄描述非層次數據關系,但較復雜,用戶不易掌握,并且非層次結構的查詢效率比較低;

2、由于層次順序的嚴格和復雜,引起數據的查詢和更新很復雜,因此應用程序的編寫也比較復雜;

3、模式描述語言較復雜,數據獨立性差。

3 Network Data Model 網狀數據模型

網狀數據模型的基本數據結構是set(系),代表了兩個記錄型之間的一個一對多的關系。?一這邊是主記錄;多這邊是屬記錄。

一個記錄類型可以是多個系的主記錄,也可以是多個系的屬記錄。

具有多種類型屬記錄的系——“多屬系”。

一個記錄型不能同時是一個系的首記錄,又是這個系的屬記錄。

data item:網狀數據結構中對于記錄的描述,有點類似于層次數據結構中的field,但是這里的‘field’可以是向量(復合類型)。

在網狀數據結構中,系值不再是樹了,而是鏈表

?

類型

實例

?

3.1 Link記錄類型

在網狀數據結構中,如何表達自聯結呢?(因為一個記錄類型不能同時是主記錄和屬記錄)

比如我們要表示公式上下級關系的數據模式,我們引入一個LINK記錄類型:

類型

實例

1:1表示一人擔任一個領導崗位

1:N表示一個人可以領導N個人

因為自己和自己也是領導與被領導的關系,所以我們引入LINK類型進行輔助。

員工->相應LINK是一個一對一的關系,換句話說,每一個LINK就相當于員工的一個“替身”,用它和其他的員工產生聯系。

s2表達的就是領導與被領導的關系。

如果想要找某一個員工的下屬,先用S1鏈表找到他對應的S,然后用S2鏈表找到除了自己之外的元素,遍歷這個鏈表。遍歷到的人就是這個員工的直接下屬

3.2 網狀數據結構表達多對多關系

也是引用了Link記錄,link記錄有SL鏈表,是和student之間的關系;CL鏈表,和course之間的關系

?

?

當我們要看一個學生選了幾門課的時候,我們從這個指定的學生出發,先沿著SL到Link去,然后 再從Link出發,沿著相應的CL到course

?

如果要看一門課那幾個學生選呢?那么就反過來,從課程出發,先沿著相應的CL到link,然后從link出發,沿著SL找到所有的學生

本表格中靠上的圖這樣的表示方式是不行的(一個記錄不能出現在同一系型的多個系值中,如果需要,那么必須使用Link記錄)

需要這樣,L5之后,沿著CL可以到DB,也可以到L6(C)

?

4 Relational Data Model 關系數據網絡

關系模型(relaction data model)的主要特征是用表格結構表達實體集,用外鍵表示實體間聯系。與層次模型和網狀模型相比,關系模型比較簡單.

?關系模型是由若干個關系模式組成的集合。每個關系實際上是一張表格,記錄之間聯系是通過各個關系模式的鍵體現的。

關系模型最基本的數據結構是“表”?,F實世界中的實體、實體和實體之間的關系都是用“表”來表示(以示區別,之前的層次和網狀,實體和實體之間的關系是用層次和網絡來表示的)

4.1 和層次結構、網狀結構的區別

關系模型和層次、網狀模型的最大差別是用鍵而不是用指針導航數據,其表格簡單,用戶易懂,用戶只需用簡單的查詢語句就可以對數據庫進行操作,并不涉及存儲結構、訪問技術等細節。

4.2 特點

這時候存儲的東西,查詢的東西,所有的東西都是表格,她們形成了一個封閉的空間,我們可以借此定義一個代數系統(關系代數)。

基于集合論,擁有更高的抽象級別。

計算機底層實現的一些細節將被屏蔽。

非過程化的查詢語言(SQL)(用戶只需要提供他要什么;而不用像之前的層次數據模型和網狀數據模型一樣,需要詳細說明他需要怎么查詢【遍歷鏈表or遍歷樹等到】)

4.2.1 軟連接

之前的兩種數據模型中,多對多是復雜的(要么需要虛記錄、要么需要LINK記錄).

在關系數據模型中,我們只需要再做一張表(如下圖的elective),里面的s#和C#就是student和course的id,可以看成這兩個的邏輯指針(即軟連接)。

4.3?關系數據模型的一些概念

屬性(attribute):實體的性質用屬性描述(eg,學生的姓名、學號。。。)

域(domain):每一個屬性都有一個取值范圍,這個范圍就是域。

4.3.1 域的性質

1范式限制(1NF):每一個屬性都是原子的,不能再分;即每一個屬性不能是結構啊數組啊什么的;換句話說,不允許出現表中套表。

允許某一個記錄里面的值是空值(NULL,不知道,表示該屬性值空缺)

同一關系中,不允許有同名屬性,但不同屬性可有相同的域。

4.3.2?關系

任何一個實體都是一個或者多個關系

如果一個關系R,有n個屬性A1,A2,…..An,相對應的域是D1,D2,……Dn,那么關系R可以表示為R = (A1/D1, A2/D2, … An/Dn),簡化為R = (A1, A2, … An) ——>這個就是關系的模式(schema)

n是關系的度/目(degree)

在關系R中,元組的次序無關,但不能允許有相同的二個元組

在關系R中,屬性的次序無關。

4.3.3?元組

元組是關系R的一個實例

一個關系R可以被表示成 r 或 r(R),r = {t1, t2, …, tm}

每一個元組可以表示為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)

對一個關系而言,一組屬性被稱之為候選鍵,當他滿足以下條件:

1,任意兩個元組,這組屬性里面的值都不一樣

2,這組屬性里面的任何一個子集都不具備上一條特點

那么這一組屬性就被稱之為候選鍵 candidate key(eg,身份證號碼)

(說白了就類似于極大無關組)

4.4.2 超鍵(super key)

如果不滿足候選鍵的條件2,也就是說有冗余的屬性,那么這樣的一組屬性被稱之為超鍵 super key。

4.4.3 主鍵(primary key)與全鍵(all key)

極大無關組不唯一,所以候選鍵也不唯一,那么我們可以選定其中一組為主鍵 primary key,其他的是候選鍵alternate key。

如果主鍵包括了關系中所有的屬性,那么我們稱之為全鍵all key。

4.4.4?外鍵(foreign key)

如果這一張表里面的屬性是用來引用另一張表的元組(即另一張表的主鍵),那么這一張表里面的這個屬性被稱為外鍵

在students里面sid是主鍵,在enrolled里面,sid是外鍵

4.5?約束

4.5.1 域完整性約束(Domain integrity constraint)

每條元組的每個屬性的值均符合值域的要求.

4.5.2 實體完整性約束(Entity integrity constraint )

主鍵的屬性不允許為空

如果這個值一定要為NULL,那么就不把它設置為主鍵.

4.5.3 引用完整性約束

外鍵要么空缺,要么引用實際存在的主鍵值

5 關系代數

5.1?這一小節會使用到的表格

水手信息的表格(rating是水手的級別)

?

船信息的表格

預定關系(這時候水手的id和船的id加起來的這個屬性組并不是主鍵,因為同一個水手可以在不同時間預定船,所以此時的主鍵是全鍵)。

5.2 基本運算符

如果一個系統支持以下五個基本操作,那么這個系統是關系完備的(關系模型上的所有操作都可以通過這五個操作導出)。

因為這些操作的結果也都是關系,所以這些運算符是可以相互組合的。

一元操作(單目)優先級高于二元操作。

5.2.1 選擇

1-Selection? (σ):選擇是一種單目運算,即對一個關系施加的運算,按給定條件從關系中挑選滿足條件的元組組成的集合 。

5.2.2 投影

Projection? (Π) :投影操作是單目運算,從關系中挑選指定的屬性組成的新關系。即把不需要的域(列)去掉

理論上投影操作需要去除重復元素(面向對象的模型里面,哪怕所有屬性都一樣,只要兩個元素id不同,就不是一個元素;但是在關系模型里面,如果所有的屬性都相等,那么我們認為它們表達的是同一個元素)。

但在實際的數據庫操作里面,是不主動去除同樣的元素的,除非用戶顯示地要求刪去(因為數據庫并不知道用戶的應用開發需要什么樣的數據,刪除了可能反而無法滿足用戶的需求)。

5.2.3 笛卡爾積

Cross-product? (笛卡爾乘積):把兩個關系拼接在一起,兩張表拼成一張大表

笛卡爾乘積的結果包含原來兩張表的所有屬性。

結果由參加運算的兩個表格的每一條元組兩兩拼接而成。

? <t,g>為t和g的拼接,即R × S仍為一個關系,它的目為nr+ns、元組數為|R|×|S|。

以S1×R1為例:

但因為S1和R1都有sid這個屬性,而同一張表里面不允許有兩個相同的屬性;于是我們要對屬性進行重命名:

結果為

5.2.4 集合差

et-difference? (-):集合差,A-B:屬于關系A,但是不屬于關系B的記錄

交運算可以用差運算表示。設A、B為兩個集合,則A和B的交可表示為:A∩B≡A-(A-B)

5.2.5 集合并

Union(∪) 集合并 由屬于A或屬于B的所有元組組成的集合。即兩個表合并成一個

參與并、差操作的兩個關系的元組必須限制為同類型的,即具有相同的目(屬性數),且對應的屬性的域相同——并兼容(union compatibility);

5.3 連接

5.3.1 條件連接 condition join

笛卡爾乘積是兩兩拼接,這就可能會出來很多沒有意義的元組,導致數據冗余。

條件鏈接就是在笛卡爾乘積的基礎上,對結果按照條件C進行選擇操作。

有的時候,條件連接也叫做θ連接。

連接條件為兩關系中對應屬性的比較,對應屬性不一定同名,但要有相同的域。其普遍表示形式為:<條件1>and<條件2>and…and<條件k>。

5.3.2 等值連接 equi-join

特殊的條件鏈接,只有做笛卡爾乘積的兩個表格,某一個/幾個屬性相同的才會被選擇

等值連接的結果相比于條件鏈接和笛卡爾乘積的結果,把等值的屬性去掉一個。

5.3.3 自然連接 natural join

做笛卡爾乘積的兩個表格,所有公共屬性相同的才會被選擇.

5.4 完備性

5.5 除法

結果的x集合滿足什么條件呢?對于B中的每一個y,都可以在A中找到一條記錄,使得<x,y>在A中

舉一個例子,A是由sno和pno兩個屬性組成,A/B的結果只有sno屬性,因為pno屬性被除掉了。

我們要找 原來關系A中,和B中的每一條元素都有聯系的xno。

我們舉A/B2為例,為什么不選s2呢?因為在A中有<s2,p2>,但沒有<s2,p4>,所以不滿足除法條件(對于B中的每一個y,都可以在A中找到一條記錄)

5.5.1 除法的表示

因為除法不是基本運算符,所以我們要看一下怎么把除法用五個基本運算符表示。

直接看“滿足和所有B中元素都有聯系”這個約束條件比較繁瑣,所以我們可以從”否定之否定“的角度來看這個問題。即先看不滿足除法條件的點,然后把這些點剔除就可以了。

我們先看

A中所有的x和B兩兩拼接,進行笛卡爾乘積,那么所有可能的A_x與B 的組合都有了。

接著是

把所有A中有的<x,y>對去掉,那么剩下的就是不滿足除法條件的所有<x,y>對了(不在原來A中的<x,y>對)

把所有不滿足除法條件的<x,y>對中的x提出來,這些x就是不滿足除法條件的點(因為如果某一個x滿足除法條件的話,那么所有這個x的<x,y>對在前面-A的時候應該都消掉了,留下來的都是至少有一個<x,y>對不在A中的)

于是我們得到了A/B(剔除上一步的x即可)

5.6 外連接

一般的連接是自然連接,那么不滿足連接操作的元組都會被丟棄。

如果我們一定要這些元素呢?那我們就要用外連接了。

外連接一共分成左外連接、右外連接和全外連接,分別是把左操作數、右操作數、兩個操作數的所有元組保留。能匹配的匹配,匹配不到的屬性對應的值為空值NULL

5.7 外并

執行基本操作并,需要滿足的條件是屬性模式需要相同。但實際應用中,不滿足并兼容關系的也要合并在一起的話,那就需要使用外并了。結果的屬性集是參與運算的屬性集的并。沒有值的元素填NULL。

6?關系演算Relational Calculus

用關系代數表示的操作,需要我們指定運算的順序【因而以關系代數為基礎的DB語言是過程性語言(procedural language)】,而關系演算只需要指明需要滿足的邏輯條件(基于謂詞演算的邏輯表達式)【只要說明所要得到的結果,而不必標明操作的過程,因而以關系演算為基礎的數據庫語言是說明性語言(declarative language)】。

換言之,關系演算只用謂詞公式告知“做什么”,而不告訴“怎么做”。

目前,面向用戶的關系數據庫語言基本上都以關系演算為基礎。

關系演算分為元組關系演算(以元組為單位定義變量)和域關系演算 (以屬性為單位定義變量),他們唯一的區別是變量的定義。

關系演算中的布爾表達式稱為公式,所有讓布爾表達式為真的結果就是我們要的答案。

6.1?安全查詢

我們可以寫出一個句法上是正確的,但是滿足結果的條件是無限多的關系演算。這樣的查詢是不安全的。

還是以水手為例,比如這樣的一個關系演算

意思為找出所有不在sailer表里面的水手,這個關系演算句法上是對的,但是是不安全的,因為我們可以找到無限個這樣的滿足條件的水手。

6.2 表達能力完備性

關系代數可以表達的,我們也可以用一個安全的域關系演算或者元組關系演算表達(兩者表達能力等價)。

6.3 域關系演算 Domain Relational Calculus

變量定義在域,也就是屬性上面。形式如下:

‘|’號右邊的公式可以有更多的域變量,但對于結果我只需要n個就夠了。

6.3.1 DRC中的原子公式

其中X,Y都是域變量,op是比較運算符。

6.3.2 DRC中的公式

后兩行“free”的意思是,在p(X)里面,X沒有被任取和存在限制。

還是以之前的水手為例,那么如果我們要找到等級在7以上的水手的id,名字等級和年齡,我們用關系演算可以這么寫:

6.4 元組關系演算Tuple Relational Calculus

有如下的格式:

t是元組變量,既可以用整個t作為查詢對象,也可查詢t中的某些屬性。

如果查詢整個t,則可省去<屬性表>。

還是以水手為例,我們要找到所有等級在7以上,年齡在50以下的水手的名字,我們可以這么寫

6.5 關系操作用關系演算表達

6.5.1?投影

6.5.2?選擇

6.5.3?減法

6.5.4 (自然)連接

7?傳統數據結構的評價

傳統數據結構是我們之前討論過的層次、網狀、關系數據結構的統稱。

7.1 特點

●都繼承了文件中的記錄、字段等概念。

●物理級也借鑒了文件的索引、散列等存取方法。

●向用戶提供了統一的數據模型和相應的數據庫語言。

●都在記錄的基礎上定義了數據的基本結構、約束和操作

7.2 不足

以記錄為基礎,基于結構化數據實現,把現實數據表示成規范化的內容,但這樣就不能很好地面向用戶和應用。

不能很自然地表達實體和實體之間的聯系。

缺乏語義信息(以關系為例,把實體表達成一張一張的表,從邏輯上講,表之間的地位是平等的。表之間的相互引用、繼承關系等內在聯系,則需要約束、應用程序、數據庫的文檔等才能看出來。單獨從模型的角度,是看不出來的)。

支持的數據類型太少(結構、字典、列表這種都不行)。

8 ER模型

E-R數據模型不是面向實現,而是面向現實世界。其設計的出發點是有效自然的模擬現實世界,而不是首先考慮它在機器中的實現問題。

?E-R模型提供了實體、屬性和聯系三個抽象概念。這三個概念簡單、明了、直觀易懂,用以模擬現實世界比較自然,且可方便地轉換關系、層次、網狀數據模式。

用E-R表示數據模式時,我們只關心有哪些數據(即有哪些實體以及屬性)以及數據間的關系(實體關系),而不必關心這些數據在計算機內如何表示和用什么DBMS。

在E-R模型中,實體和聯系均可有屬性,如選課聯系的屬性可有成績、選課時間等。

ER模型的實體大部分特點和關系模型是一樣的,不過實體的屬性允許復合類型,允許多值屬性。(比如一個人有多個電話,那么電話這個屬性就可以是多值屬性)

8.1 ER圖

雖然ER模型最終沒有成功,但是它的衍生物,ER圖在數據庫的設計中起到的重要的作用(我們直接看圖就能知道他的語義信息)

8.2 ER圖的擴展(EER extended ER)

8.2.1 弱實體Weak entity

不能單獨存在,必須依賴于其他的實體。

eg,學校職工-職工家屬,每個職工家屬實體都是弱實體,必須依賴于職工存在。

8.2.2 普遍化與特殊化 Specialization and Generalization

類似于面向對象里面的子類和父類。

8.2.3 聚集

允許將兩個實體間的關系也看成一個實體。

8.2.4 范疇 Category

可以用不同類型的實體組成的集合表達一個實體。

?

?

?

?

總結

以上是生活随笔為你收集整理的数据库笔记——数据模型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。