# 正規化
設計關聯式資料庫時,需要滿足不同的規範,這些規範稱為正規化。正規化的目的是為了消除資料冗餘以及操作異常,使資料庫結構清晰、簡潔明瞭。
# 候選碼
候選碼是乙個或多個屬性,它能夠完全決定整個屬性組。
# 主碼
如果乙個屬性組有多個候選碼,可從中選取乙個做為主碼。
# 主屬性
包含在任何乙個候選碼中的屬性,稱為主屬性。
# 非主屬性
不包含在任何乙個候選碼中的屬性稱為非主屬性。
# 多值依賴
假設x, y, z是u的子集,並且 z=u - x - y。如果在x上取特定值,在y上存在多個值且這些值與z無關,則稱y多值依賴於x,記為 x →→ y。
若 x→→y, 且z為空集,則稱 x→→y 為平凡的多值依賴;
若 z 不為空,則稱 x→→y 為非平凡的多值依賴;
# 函式依賴和多值依賴
函式依賴是多值依賴的特殊情況;
函式依賴是唯一確定的關係,例如課程號唯一確定課程名稱;
多值依賴卻不能唯一確定,例如教師號可能多值依賴於課程號,因為多個老師可以上同一門課;
# 第一正規化(1nf)
1nf是指資料庫表中的每一列都是不可分割的原子資料項,簡而言之就是不能表中有表。
# 第二正規化(2nf)
2nf是指在1nf的基礎上,消除非主屬性對碼的部分依賴(非主屬性必須完全依賴於碼)。
例如:(學號, 課程號, 分數, 姓名)就不是2nf,因為姓名只是部分依賴於(學號,課程號)。
# (學號, 課程號)是碼
# 第三正規化(3nf)
3nf是指在2nf的基礎上,消除非主屬性對碼的傳遞依賴(非主屬性不能依賴於其他非主屬性)。
例如:(學號, 姓名, 學院編號, 學院名稱)就不是3nf,因為有學號 -> 學院編號 -> 學院名稱。
# (學號)是碼
# bcnf
bcnf是指在3nf的基礎上,要求每乙個決定屬性因素都必須包含碼(主屬性不能部分依賴於其它不包含它的碼)。
例如:(學號, 教師號, 課程號)就不是bcnf,因為有教師號 -> 課程號,但教師號不是碼。
# (學號, 教師號)和(學號, 課程號)都是碼
# 第四正規化(4nf)
4nf是指在3nf的基礎上,消除非平凡且非函式依賴的多值依賴(每個非平凡多值依賴x→→y(y不屬於x),x都含有碼)。
# (課程名, 教師名, 參考書名)是碼
# 第五正規化(5nf)(極少用到,這裡不做介紹了)
5nf是指在4nf的基礎上,消除不是由候選碼所蘊含的連線依賴。
# 規範化的步驟
資料庫基礎知識
資料定義 定義基本表 create table 表名 列名 資料型別 列級完整性約束條件 列名 資料型別 列級完整性約束條件 表級完整性約束條件 後面用到的表 1 學生 表 student 由學號 sno 姓名 sname 性別 s 年齡 sage 所在系 sdept 5個屬性組成,可記為 stud...
資料庫 基礎知識
e r模型 實體 聯絡模型 entity relationship model,e r模型 實體是指現實中區別於其他物件的一種 物體 或一件 事情 例如一名學生,乙個專案等等。同乙個型別中所有的實體被叫做實體集,對應於資料庫的一張表,乙個實體則對應於一條記錄。不同的任務之間,就是通過聯絡關係整合到一...
資料庫基礎知識
一 1 ddl 資料庫定義語句,建立資料表 dml 資料庫操作語言 dcl 資料控制語言 dql 資料查詢語言 2 資料查詢,sql語句 看課堂作業 查詢結果是表。3 聚集函式的一般格式 會使用 distinct all 列名 4 檢視 從乙個或幾個基本表 或檢視 匯出的表,與基本表不同,是乙個虛表...