判斷是第幾正規化
概念:設計關聯式資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫冗餘越小。
種類:目前關聯式資料庫有六種正規化:第一正規化(1nf)、第二正規化(2nf)、第三正規化(3nf)、巴斯-科德正規化(bcnf)、第四正規化(4nf)和第五正規化(5nf,又稱完美正規化)。
正規化之間的關係
正規化的特點
減少資料冗餘(這是最主要的好處,其他好處都是由此而附帶的)
消除異常(插入異常,更新異常,刪除異常)
讓資料組織的更加和諧
不滿足第一正規化的表
學號姓名
家庭住址
0001
張三xx省xx市xx區xx街道xx小區
資料冗餘,如果有多個學生在同乙個小區,那麼同樣的位址要多次儲存
修改異常,如果有學生更換家庭住址,那麼就得對整個家庭住址去修改
查詢效率太低,如果要查詢在xx市的所有學生,那麼必須對每個學生的家庭住址整個欄位去進行字元匹配
符合第一正規化的表
學號姓名
位址id
0001張三1
位址id省市
區街道小區
1xx省
xx市xx區
xx街道
不滿足第二正規化的表
學號姓名
年齡課程名稱
成績學分
關鍵字為組合關鍵字(學號, 課程名稱),這個資料庫表不滿足第二正規化,因為存在如下決定關係:(課程名稱) → (學分) (學號) → (姓名, 年齡),即存在組合關鍵字中的字段決定非關鍵字的情況。
資料冗餘:一門課被多個同學選修,那麼課程名稱和學分就多次重複儲存。
插入異常:當有一門新課沒人選修時,這門課就因為沒有主鍵而插不進來。
刪除異常:當一門課之北乙個同學選修時,刪除這個同學時這門課也會被刪除。
修改異常:當一門課程的學分需要修改時,就得修改每個選修這門課的同學。
學號姓名
年齡課程id成績
課程id
課程名稱
學分學生id
學生姓名
學生性別
學院id
學院**
由學生id無法直接推出學院**,而是由學生id->學院id->學院**,存在非主屬性對主鍵的傳遞依賴
資料冗餘:乙個學院有多名學生,那麼學院**就需要儲存多次
插入異常:當乙個學校沒有學生時,學院**就無法儲存
修改異常:當乙個學院**需要修改時,就需要修改多次
刪除一場:當乙個學院只有乙個學生時,學生被刪除那麼學院**就被刪除
學生id
學生姓名
學生性別
學院id
學院id
學院名稱
學院**
巴斯-科德正規化(bcnf)是第三正規化(3nf)的乙個子集,即滿足巴斯-科德正規化(bcnf)必須滿足第三正規化(3nf)
倉庫id
儲存物品id
管理員id數量
我們發現:(倉庫id, 儲存物品id) →(管理員id, 數量),(管理員id, 儲存物品id) → (倉庫id, 數量)
所以,(倉庫id, 儲存物品id)和(管理員id, 儲存物品id)都是倉庫管理關係表的候選關鍵字,表中的唯一非關鍵字段為數量,它是符合第三正規化的。但是,由於存在如下決定關係:
(倉庫id) → (管理員id),(管理員id) → (倉庫id)
即存在不滿足上述的第二種情況:主屬性(管理員)部分依賴於不包含它的候選鍵(倉庫id, 儲存物品id),所以其不符合bcnf正規化。它會出現如下異常情況:
資料冗餘
刪除異常:當倉庫被清空後,所有」儲存物品id」和」數量」資訊被刪除的同時,」倉庫id」和」管理員id」資訊也被刪除了。
插入異常:當倉庫沒有儲存任何物品時,無法給倉庫分配管理員。
更新異常:如果倉庫換了管理員,則表中所有行的管理員id都要修改。
倉庫id
管理員id
倉庫id
儲存物品id
數量
關聯式資料庫正規化
在建立乙個資料庫的過程中,必須依照一定的準則,這些準則被稱為正規化,從第一到第六共六個正規化,一般資料庫設計只要遵循第一正規化,第二正規化,和第三正規化就足夠了。滿足這些規範的資料庫是簡潔的 結構明晰的,同時,不會發生插入 insert 刪除 delete 和更新 update 操作異常。反之則是亂...
關聯式資料庫的正規化
構造資料庫必須遵循一定的規則。在 關聯式資料庫中,這種規則就是 正規化。正規化是符合某一種級別的關係模式的集合。關聯式資料庫中的關係必須滿足一定的要求,即滿足不同的 正規化。目前 關聯式資料庫有六種 正規化 第一 正規化 1nf 第二 正規化 2nf 第三 正規化 3nf 第四 正規化 4nf 第五...
關聯式資料庫的正規化
1 正規化 構造資料庫必須遵循一定的規劃,在關聯式資料庫中這種規則就是正規化 nf即normal form 正規化是符合一種級別的關係模式的集合。關聯式資料庫中的關係必須滿足一定的要求,即滿足不同的正規化。目前關聯式資料庫有6種正規化 第一正規化 1nf 第二正規化 2nf 第三正規化 3nf 第四...