數據依賴
函數依賴FD:一個屬性或者一組屬性的值可以決定另一個屬性的值
多值依賴MVD:一個屬性或者一組屬性的值可以決定另一個屬性的值的集合。FD是MVD的特例
符號表示:Name->->Course,課程多值依賴于姓名
連接依賴:一個表可以分解成幾個子表,并將這幾個子表拼接起來以后仍然是原來那個表。(無損連接分解)則稱原來的那些屬性之間具有連接依賴。
第一范式1NF:關系里面每一個屬性是原子的,不能再分。關系型數據庫的基本要求
第二范式2NF:不存在屬性對主鍵的部分函數依賴(一些屬性只依賴于主鍵中的部分屬性)。即要求一個表中的主鍵必須一起決定其他屬性
不滿足2NF的后果:
- 可能產生插入異常(部分屬性只依賴于主鍵部分屬性,意味著其他屬性不存在的時候那些屬性就不能存在,而實際上這樣做一般是不合理的)和刪除異常
- 產生數據冗余,產生更新困難
所以應該滿足:一張表只用來描述一件事情
第三范式3NF:不存在屬性對主鍵的傳遞依賴
不滿足3NF的后果:
- 可能產生插入異常和刪除異常
- 產生數據冗余,更新困難
BCNF:大概和3NF相同。要求函數依賴的決定子必須是主鍵
3NF一般就是追求的目標
第四范式4NF:消除屬性多值依賴
第五范式5NF:消除屬性連接依賴
ER圖:
- 方框表示實體
- 菱形表示聯系
- 圓形表示屬性
數據庫設計方法:
- 以過程為中心‘
- 以數據為中心
- 僅僅在結構上達到3NF是不夠的
- “一事一地”包括每項信息的唯一,要提取出問題的本質,識別出本質上屬于同一概念的信息項
- 對于表達類似信息,模式相似只是取值不同的表,應盡量合并
- 考慮到效率、用途等因素,該分開的表還應該分開
- 結合DBMS內部實現技術,合理涉及索引和文件結構,為查詢優化做好存取路徑
- 在結構規范化、減少數據冗余和提高數據庫訪問性能之間仔細權衡,適當折中