設計數據庫時,需要遵循的一些規范。要遵循后邊的范式要求,必須先遵循前邊的所有范式要求
前置知識
相關概念
超鍵:唯一標識記錄的字段集
候選鍵:超鍵 - 多余的字段 的 超鍵
主屬性:在候選鍵中的字段
依賴
函數依賴:A-->B,如果通過A屬性(屬性組)的值,可以確定唯一B屬性的值。則稱B依賴于A
例如:學號-->姓名;(學號,課程名稱) --> 分數完全函數依賴:A-->B, 如果A是一個屬性組,則B屬性值得確定需要依賴于A屬性組中所有的屬性值。
例如:(學號,課程名稱) --> 分數部分函數依賴:A-->B, 如果A是一個屬性組,則B屬性值得確定只需要依賴于A屬性組中某一些值即可。
例如:(學號,課程名稱) -- > 姓名傳遞函數依賴:A-->B, B -- >C . 如果通過A屬性(屬性組)的值,可以確定唯一B屬性的值,在通過B屬性(屬性組)的值可以確定唯一C屬性的值,則稱 C 傳遞函數依賴于A
例如:學號-->系名,系名-->系主任
數據庫的三范式
1NF:字段含義單一 不可再分。即不能以集合、序列等作為屬性。
2NF:在1NF基礎上,數據表中每一條記錄可唯一標識,所有非主鍵字段必須完全依賴于主鍵,不能部分依賴于主鍵
2NF設計原則:一張表只表達一個意思, 對于部分依賴于主鍵的字段,將這 部分字段 與 依賴的部分主鍵 抽取出來建立新表
3NF:在2NF基礎上,非主屬性之間不能相互依賴,非主屬性之間相互獨立
范式化的設計使得表逐漸細粒度化,跨表查詢比較多
反范式
有時數據看似冗余,但對業務十分重要,應遵循業務優先的原則
特別是查詢數據業務比較多時,可以適當增加冗余字段來提高讀性能,