关系数据库设计【笔记】
生活随笔
收集整理的這篇文章主要介紹了
关系数据库设计【笔记】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡述
學習《數據庫系統概念》做的筆記
- 前一篇是ER圖以及ER模型相關的
- E-R模型和E-R圖
文章目錄
- 簡述
- 函數依賴
- 通過函數依賴發現問題
- 無損分解和有損分解
- 原子域和第一范式
- 原子域定義
- 第一范式定義
- 使用函數依賴進行分解
- 超碼的定義
- 關系依賴
- 平凡的函數依賴
- 閉包(closure)
- Boyce-Codd范式(BC范式)
- 第三范式(3NF)
- 函數依賴理論
- Armstrong公理
- 屬性集的閉包
- 第四范式
- 多值依賴
- 第四范式(4NF)
- 正則覆蓋
- 無關屬性
- 實例
- 正則覆蓋
函數依賴
- 定義一條規則,“如果存在模式(dept_name, budget),則dept_name可以作為主碼”。
- 這條規則就被定位為函數依賴(functional dependency)
通過函數依賴發現問題
- 如果存在這樣的函數依賴,但是dept_name卻不是原來的關系數據庫的主碼。那么說明有重復的budget信息。
無損分解和有損分解
- 無損分解:分解之后,再用自然連接的方式組合起來可以恢復為原樣。否則就是有損的。
原子域和第一范式
- 之前在ER模型中講到了子結構的問題。這里對這種東西做一個思想化。
原子域定義
- 一個域是原子的,如果該域中的元素被認為是不可分的單元(不存在子結構)。
第一范式定義
- 我們稱一個關系模式R屬于第一范式(First normal Form, 1NF),如果R中的所有的元素都是原子的。
使用函數依賴進行分解
超碼的定義
- 舊定義: 可以唯一識別關系中的一條元組的一個或等多個屬性的集合
- 新定義: 令r(R)是一個關系模式。R的子集K是R的超碼的條件是
- 在r (R)的合法實例中,對r的實例中的所有元組對t1t_1t1?和t2t_2t2?,若 t1≠t2t_1 \neq t_2t1???=t2?,則t1[K]≠t2[K]t_1[K] \neq t_2[K]t1?[K]??=t2?[K]。
關系依賴
表達式看起來比糅雜,但是意思很簡單。
- 我們說這個實例是滿足A->B 這樣的函數依賴,就是說,對于這個實例的任兩個元組,如果他們的A部分是一樣的話,那么B部分也是一樣的。
其實跟我們之前講到的那個例子是完全符合的。
平凡的函數依賴
有些函數依賴是很顯然的。
- 比如:A->A之類的。
閉包(closure)
- 在一個關系模式上,其實是有很多的函數依賴的。
- 比如:A->B,B-C 就可以知道A->C。
給出閉包的概念
- 就是有一個集合F,能通過F推導出來的所有閉包的集合就是F的閉包。
例如:
- F = {A->B,B-C}
- 那么, F’ = {A->B,B-C, A->C} 是F的閉包
Boyce-Codd范式(BC范式)
- BC范式比較好,它能消除掉所有的基于函數依賴的冗余
條件非常簡單:
基于函數依賴集合F的關系模式R屬于BCNF,
對于F閉包中的所有范式a-b,必須要有下面的兩個條件滿足一個
- a->b是一個平凡的函數依賴
- a是函數的超碼
其實這是合理的。
- 如果是超碼,當然一點問題都沒有。(因為超碼本身就會帶著一堆的函數依賴)
- 如果不是超碼的話,就必須要保證這個函數依賴是平凡的。(可以理解為沒什么影響的)
因為平凡的話,是說對任意的關系,這個函數依賴都成立,那。。當然無論你怎么改這玩意都是存在的啦。。當然就不管它啦。
第三范式(3NF)
3NF是相當于BCNF更弱一點的范式。
3NF放寬了點條件
對于F閉包中的所有范式a-b,必須要有下面的三個條件滿足一個
- a->b是一個平凡的函數依賴
- a是函數的超碼
- b-a中的每一個屬性,都包含于R的一個候選碼中(可以是每個屬性屬于不同的候選碼)
函數依賴理論
- 邏輯蘊涵(logically imply),(其實就說有一個函數依賴,可以用一個函數依賴集中的某些東西來推導出來,那么就蘊涵了唄)
- (所以,就會有閉包的概念出現了)
Armstrong公理
一般來說,大家都是知道這個公理的內容,而記不太住,這個公理的名字。。
- 自反律,a包含有b,則a->b
- 增補律,a->b且c也是一個屬性集,則ac->bc
- 傳遞律,a->b且b->c,則a->c
Armstrong公理是正確而有效的(sound)。
但是用這個來算閉包實在是太麻煩了。。。
- 合并律,a->b且a->c,則a->bc
- 分解律,a->bc,則a->b且a->c
- 偽傳遞律,a->b ,bc->d,則ac->d
屬性集的閉包
- a->b,我們就說b被a給函數確定
- 閉包的符號定義A+A^+A+為AAA的閉包
第四范式
多值依賴
多值依賴A->->B條件,對于任意兩個滿足t1[A] = t2[A]的實例來說,都存在有一個t3和t4,使得
- t1[A] = t2[A] = t3[A] = t4[A]
- t3[B] = t1[B] 并且 t3[R-B] = t2[R-B]
- t4[B] = t2[B] 并且 t4[R-B] = t1[R-B]
第四范式(4NF)
對于在這個范式中,所有的多值依賴(來自整個的閉包)至少有下面中的一個成立
- A->->B是一個平凡的多值依賴
- A是超碼
正則覆蓋
無關屬性
- 將依賴集合F中的某個函數依賴的左邊的某個屬性去掉之后,任然被之前的F給邏輯蘊含。則這個屬性是無關屬性。
類似的定義在右半部分(但是就是去掉后的部分要蘊含原來的F)
實例
- 比如AB->C和A->C在函數依賴集合上,那么B就是無關屬性
正則覆蓋
- 去除掉所有的無關屬性
- 然后如果有A->B并且有A->C那么就變成A->BC
總結
以上是生活随笔為你收集整理的关系数据库设计【笔记】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pytorch基础操作学习笔记(auto
- 下一篇: OpenMP在Windows下用VS使用