聯(lián)系我們 - 廣告服務(wù) - 聯(lián)系電話:
您的當(dāng)前位置: > 關(guān)注 > > 正文

范氏之間的關(guān)系基礎(chǔ)知識(一)

來源:CSDN 時間:2023-03-06 08:04:09

目錄

基礎(chǔ)知識


(相關(guān)資料圖)

函數(shù)依賴

1NF 第一范式

2NF 第二范式

3NF 第三范式

BCNF 鮑依斯-科得范式

四種范氏之間的關(guān)系

基礎(chǔ)知識

實體:現(xiàn)實世界中客觀存在并可以被區(qū)別的事物。比如“一個學(xué)生”、“一本書”、“一門課”等等。值得強(qiáng)調(diào)的是這里所說的“事物”不僅僅是看得見摸得著的“東西”,它也可以是虛擬的,比如說“老師與學(xué)校的關(guān)系”。

屬性:教科書上解釋為:“實體所具有的某一特性”,由此可見,屬性一開始是個邏輯概念,比如說,“性別”是“人”的一個屬性。在關(guān)系數(shù)據(jù)庫中,屬性又是個物理概念,屬性可以看作是“表的一列”。

元組:表中的一行就是一個元組。

分量:元組的某個屬性值。在一個關(guān)系數(shù)據(jù)庫中,它是一個操作原子,即關(guān)系數(shù)據(jù)庫在做任何操作的時候,屬性是“不可分的”。否則就不是關(guān)系數(shù)據(jù)庫了。

碼:表中可以唯一確定一個元組的某個屬性(或者屬性組),如果這樣的碼有不止一個,那么大家都叫候選碼,我們從候選碼中挑一個出來做老大,它就叫主碼。

全碼:如果一個碼包含了所有的屬性,這個碼就是全碼。

主屬性:一個屬性只要在任何一個候選碼中出現(xiàn)過,這個屬性就是主屬性。

非主屬性:與上面相反,沒有在任何候選碼中出現(xiàn)過,這個屬性就是非主屬性。

外碼:一個屬性(或?qū)傩越M),它不是碼,但是它別的表的碼,它就是外碼。

函數(shù)依賴

部分函數(shù)依賴:設(shè)X,Y是關(guān)系R的兩個屬性集合,存在X→Y,若X’是X的真子集,存在X’→Y,則稱Y部分函數(shù)依賴于X。

舉個例子:

碼用(學(xué)號+課程),為什么要加課程呢?因為不同課程成績是通過學(xué)號查不出來的。

不過用(學(xué)號+課程)當(dāng)作碼是不是有些問題?

(學(xué)號+課程)->姓名,但是學(xué)號->姓名

(學(xué)號+課程)->系名,但是學(xué)號->系名

(學(xué)號+課程)->系主任,但是學(xué)號->系主任

這個就是部分依賴,說實話我看定義一臉懵逼。

要是上面那張表符合第二范式。需要將表拆分為兩張表。

一張是 學(xué)號、課程、分?jǐn)?shù)表

另外一張是 學(xué)號、姓名、系名、系主任表

完全函數(shù)依賴:設(shè)X,Y是關(guān)系R的兩個屬性集合,X’是X的真子集,存在X→Y,但對每一個X’都有X’!→Y,則稱Y完全函數(shù)依賴于X。

例子:學(xué)生基本信息表R(學(xué)號,班級,姓名)假設(shè)不同的班級學(xué)號有相同的,班級內(nèi)學(xué)號不能相同,在R關(guān)系中,(學(xué)號,班級)->(姓名),但是(學(xué)號)->(姓名)不成立,(班級)->(姓名)不成立,所以姓名完全函數(shù)依賴與(學(xué)號,班級);

傳遞函數(shù)依賴:設(shè)X,Y,Z是關(guān)系R中互不相同的屬性集合,存在X→Y(Y !→X),Y→Z,則稱Z傳遞函數(shù)依賴于X。

例子:在關(guān)系R(學(xué)號 ,宿舍, 費用)中,(學(xué)號)->(宿舍),宿舍!=學(xué)號,(宿舍)->(費用),費用!=宿舍,所以符合傳遞函數(shù)的要求;

1NF 第一范式

數(shù)據(jù)庫表中的字段都是單一屬性的,不可再分。這個單一屬性由基本類型構(gòu)成,包括整型、實數(shù)、字符型、邏輯型、日期型等。

定義:如果一個關(guān)系模式R的所有屬性都是不可分的基本數(shù)據(jù)項,則R屬于1NF。

也可表述為:數(shù)據(jù)庫表中的字段都是單一屬性的,不可再分。

例如,下面的數(shù)據(jù)庫表是符合第一范式的:

字段1 字段2 字段3 字段4

而這樣的數(shù)據(jù)庫表是不符合第一范式的:

字段1 字段2 字段3 字段4

字段3.1 字段3.2

具體的例子:

比如“地址”屬性應(yīng)該拆分為“城市”、“區(qū)縣”、“具體地址”便于使用。

很顯然,在當(dāng)前的任何關(guān)系數(shù)據(jù)庫管理系統(tǒng)(DBMS)中,誰也不可能做出不符合第一范式的數(shù)據(jù)庫,因為這些DBMS不允許你把數(shù)據(jù)庫表的一列再分成二列或多列。因此,想在現(xiàn)有的DBMS中設(shè)計出不符合第一范式的數(shù)據(jù)庫都是不可能的。

2NF 第二范式

若關(guān)系模式R∈1NF,并且每一個非主屬性都完全函數(shù)依賴于R的碼(多個主屬性字段的組合),則R∈2NF

也可表述為:數(shù)據(jù)庫表中不存在非關(guān)鍵字段對任一候選關(guān)鍵字段的部分函數(shù)依賴(部分函數(shù)依賴指的是存在組合關(guān)鍵字中的某些字段決定非關(guān)鍵字段的情況),也即所有非關(guān)鍵字段都完全依賴于任意一組候選關(guān)鍵字。

具體的可以參照上面部分函數(shù)依賴的例子

3NF 第三范式

關(guān)系模式R<U< em="">,F(xiàn)> 中若不存在這樣的碼X、屬性組Y及非主屬性Z(Z íY), 使得X→Y,Y→Z,成立,則稱R<U< em="">,F(xiàn)> ∈ 3NF。

也可表述為:在第二范式的基礎(chǔ)上,數(shù)據(jù)表中如果不存在非關(guān)鍵字段對任一候選關(guān)鍵字段的傳遞函數(shù)依賴則符合第三范式。所謂傳遞函數(shù)依賴,指的是如果存在"A → B → C"的決定關(guān)系,則C傳遞函數(shù)依賴于A。因此,滿足第三范式的數(shù)據(jù)庫表應(yīng)該不存在如下依賴關(guān)系:關(guān)鍵字段 → 非關(guān)鍵字段x → 非關(guān)鍵字段y

比如:

BCNF 鮑依斯-科得范式

設(shè)關(guān)系模式R<U< em="">,F(xiàn)>∈1NF,如果對于R的每個函數(shù)依賴X→Y,若Y不屬于X,則X必含有候選碼,那么R∈BCNF。

也可表述為:在第三范式的基礎(chǔ)上,數(shù)據(jù)庫表中如果不存在任何字段對任一候選關(guān)鍵字段的傳遞函數(shù)依賴則符合第三范式。

比如:倉庫管理關(guān)系表為(倉庫ID, 存儲物品ID, 管理員ID, 數(shù)量),且有一個管理員只在一個倉庫工作;一個倉庫可以存儲多種物品。這個數(shù)據(jù)庫表中存在如下決定關(guān)系:

(倉庫ID, 存儲物品ID) →(管理員ID, 數(shù)量)

(管理員ID, 存儲物品ID) → (倉庫ID, 數(shù)量)

所以,(倉庫ID, 存儲物品ID)和(管理員ID, 存儲物品ID)都是表的候選關(guān)鍵字,表中的唯一非關(guān)鍵字段為數(shù)量,它是符合第三范式的。但是,由于存在如下決定關(guān)系:

(倉庫ID) → (管理員ID)

(管理員ID) → (倉庫ID)

即存在關(guān)鍵字段決定關(guān)鍵字段的情況,所以其不符合BCNF范式。數(shù)據(jù)表應(yīng)修改為:

倉庫管理:(倉庫ID, 管理員ID);

倉庫:(倉庫ID, 存儲物品ID, 數(shù)量)。

四種范氏之間的關(guān)系

每一個范氏都是進(jìn)一步約束的關(guān)系,如下圖:

四種范式之間的關(guān)系

責(zé)任編輯:

標(biāo)簽:

相關(guān)推薦:

精彩放送:

新聞聚焦
Top