注:
表在定義中被稱為關係,記作r
欄位在定義中被稱作屬性
模式:資料庫中有三種模式,外模式,內模式,模式
粗體是關鍵字的意思
斜體為外來鍵
以前寫下來的,但是用了多年的帳號已經忘了,唯有把文章轉到這裡來了~,真暈哦~ http://blog.csdn.net/fantasylu/archive/2004/07/20/45794.aspx
第一正規化
定義:如果關係r 中所有屬性的值域都是單純域,那麼關係模式r是第一正規化的
那麼符合第一模式的特點就有
1)有主關鍵字
2)主鍵不能為空,
3)主鍵不能重複,
4)欄位不可以再分
例如:studyno |name | *** | contact
20040901 john male email:[email protected],phone:222456
20040901 mary famale email:[email protected] phone:123455
以上的表就不符合,第一正規化:主鍵重複(實際中資料庫不允許重複的),而且contact欄位可以再分
所以變更為正確的是
studyno |name | *** | email | phone
20040901 john male [email protected] 222456
20040902 mary famale [email protected] 123455
第二正規化:
定義:如果關係模式r是第一正規化的,而且關係中每乙個非主屬性不部分依賴於主鍵,稱r是第二正規化的。
所以第二正規化的主要任務就是
滿足第一正規化的前提下,消除部分函式依賴。
studyno |name | *** | email | phone |classno| classaddress
01 john male [email protected] 222456 200401 a樓2
01 mary famale [email protected] 123455 200402 a樓3
這個表完全滿足於第一正規化,
主鍵由studyno和classno組成,這樣才能定位到指定行
但是,classaddress部分依賴於關鍵字(classno-〉classaddress),
所以要變為兩個表
表一studyno |name | *** | email | phone | classno
01 john male [email protected] 222456 200401
01 mary famale [email protected] 123455 200402
表二classno| classaddress
200401 a樓2
200402 a樓3
第三正規化:
滿足第二正規化的前提下,消除傳遞依賴。 例:
studyno |name | *** | email | bounslevel | bouns
20040901 john male [email protected] 優秀 $1000
20040902 mary famale [email protected] 良 $600
這個完全滿足了第二正規化,但是bounslevel和bouns存在傳遞依賴
更改為:
studyno |name | *** | email | bouunsno
20040901 john male [email protected] 1
20040902 mary famale [email protected] 2
bounsno| bounslevel | bouns
1 優秀 $1000
2 良 $600
這裡我比較喜歡用bounsno作為主鍵,
基於兩個原因
1)不要用字元作為主鍵。可能有人說:如果我的等級一開始就用數值就代替呢?
2)但是如果等級名稱更改了,不叫 1,2 ,3或優、良,這樣就可以方便更改,所以我一般優先使用與業務無關的字段作為關鍵字。
一般滿足前三個正規化就可以避免資料冗餘。
第四正規化:
主要任務:滿足第三正規化的前提下,消除多值依賴
product |agent|factory
car a1 f1
bus a1 f2
car a2 f2
在這裡,car的定位,必須由 agent 和 factory才能得到(所以主鍵由agent和factory組成),可以通過 product依賴了agent和factory兩個屬性
所以正確的是
表1 表2:
product | agent factory | product
car a1 f1 car
bus a1 f2 car
car a2 f2 bus
第五正規化:
定義:如果關係模式r中的每乙個連線依賴, 都是由r的候選鍵所蘊含, 稱r是第五正規化的
看到定義,就知道是要消除連線依賴,並且必須保證資料完整
例子a|b|c
a1 b1 c1
a2 b1 c2
a1 b2 c1
a2 b2 c2
如果要定位到特定行,必須三個屬性都為關鍵字。
所以關係要變為 三個關係,分別是a 和b,b和c ,c和a
如下:表1 表2 表3
a | b b | c c | a
a1 b1 b1 c1 c1 a1
a1 b2 b1 c2 c1 a2
正規化可以避免資料冗餘,減少資料庫的空間,減輕維護資料完整性的麻煩,但是操作難,因為需要聯絡多個表才能得到所需要資料,而且越高正規化效能就會越差。要權衡是否使用更高正規化是比較麻煩。
一般我在做專案中都,用得最多的也就是第三正規化,我認為使用到第三正規化也就足夠了,效能好
而且方便管理資料
資料庫 資料庫正規化
關聯式資料庫的設計規範。不同的規範要求被稱為不同的正規化,越高的正規化資料庫冗餘越小。減少資料庫中資料冗餘的過程 1 第一正規化 1nf 在關係模式r中,當且僅當所有屬性只包含原子值,即每個分量都是不可再分的資料項,則稱r滿足1nf。例如表所示的教師職稱情況關係就不滿足1nf。原因在於,該關係模式中...
資料庫正規化 三正規化
所謂第一正規化 1nf 是指在關係模型中,對域新增的乙個規範要求,所有的域都應該是原子性的,即資料庫表的每一列都是不可分割的原子資料項,而不能是集合,陣列,記錄等非原子資料項。即實體中的某個屬性有多個值時,必須拆分為不同的屬性。在符合第一正規化 1nf 表中的每個域值只能是實體的乙個屬性或乙個屬性的...
資料庫 正規化
今天要說一點就是我大學好像過得挺失敗的,因為在那一大堆的公式面前我從來沒有搞清楚過正規化,經過大量的背誦好像也是似懂非懂。看來,大學課本要避免一點的就是不要用公式去說明問題,用簡潔的語句更容易明白。工作中這兩年做的資料庫設計也不少,反回來看這樣公式說明的正規化還是不明白。在網上搜了一點,一下就明白了...