2008年2月20日 星期三

資料,需要正規化?

加入書籤: HemiDemi MyShare Baidu Google Bookmarks Yahoo! My Web Del.icio.us Digg technorati furl

正規化的主要工作,就是要調整事實描述方式,將每個表單簡化到只描述一種事實,好讓資料井井有條得存放在電腦中,避免資料重複浪費儲存。

正規化(Normalization)是關聯式資料庫在設計資料表時,用來消除資料儲存異常的處理方法。由於現實生活中,一張表單記錄的資料有很多,正規化的主要工作,就是要調整事實描述方式,將每個表單簡化到只描述一種事實,好讓資料井井有條得存放在電腦中,避免資料重複浪費儲存,並消除資料之間矛盾的情況,使資料庫運作起來更有效率,維護上也更容易。
對關聯式資料表來說,表單就是描述一個實體的資料,像員工這個實體會有員工姓名、員工職稱等資料,而正規化的過程,就是把一個實體的描述資料,透過一定的流程,將每張表單內容簡化,做到只單純描述一種事實為止。
正規化的過程,會調整資料表的組成結構,減少資料發生異常的機會,這些過程通常會逐步分為多個步驟,包含:第一正規化(1NF)、第二正規化(2NF)、第三正規化(3NF)、BC正規化(Boyce-Codd Normal From,BCNF);除了上述這四種,還有第四正規化(4NF)、第五正規化(5NF)、DK正規化(Domain/key Normal Form)以及第六正規化(6NF),而每一次的正規化,都能減少一些造成資料異常的原因。一般的資料庫大多經過前四道手續,就可以完成正規化,而後四者則是用來處理特殊情況的表單,例如4NF及5NF,主要功能。是要消除多值相依(Multi-Value Dependency)的情況,例如一個產品有許多不同型號當作主鍵,但這些主鍵其實都是代表同一物件等問題。
將表單逐步正規化時要注意,每次表單正規化的結果,都必須滿足前一個正規化的條件。因此,除了第一正規化之外,當我們調整資料表架構之後,都要檢查產生出來的新結果,是不是滿足之前的正規化條件,如果沒有,那就要回到前一個步驟,重新檢查,然後再調整表單架構,直到滿足所有正規化條件為止。
我們可以參考圖例內的範例資料表,這是一家水果店的訂單表,以及正規化完成後的資料表,接著我們來參考這個表單試做前三種正規化,看看每次要做哪些事。

水果訂單正規化前後差異

將正規化前的水果訂單與完成後的表單相比,最明顯的地方,就是1張水果訂單變成3張表,包含水果訂單、貨品資料、客戶資料,且每個欄位也只有一筆資料,表單變這麼多張,乍看之下有些複雜,其實就如同之前說的,其實是將表單拆成很多張,並讓每張表單記載的資料更單純,像客戶清單,僅有辨識用的客戶編號,以及記錄客戶名稱等兩個欄位。

完成正規化之後,欄位總和變多了,而且貨品編號及客戶編號等欄位還重複,怎麼會說節省資料空間呢?在正規化前,每當陳先生下單時,就會使用2個欄位儲存客戶資料(客戶編號+客戶名稱);若是經過正規化,水果訂單內只會存放客戶編號,而省下1個欄位,當訂單日益增加時,就能省下越多的空間。

第一正規化確定主鍵
1NF的工作主要有三,首先要確認資料表中的主鍵。主鍵是辨識每筆資料的關鍵欄位,它可以由資料表現有的欄位中,挑選一組符合主鍵規則的當作主鍵,也能替表單增加一組專為識別用的欄位當主鍵。主鍵並不侷限只能有單一欄位,也能由多個欄位共同構成。
第二步驟,就是讓單一欄位內只能有一筆資料。所以我們將這些超過的資料改列一筆新資料,讓每個欄位都只儲存一筆資料,而其他的空白欄位,則需要填入符合該筆訂單的原始資料。
第三步,要確認表單內所有的欄位,都要與主鍵有關係,這點稱為相依性。完成之後,就變成經過1NF的水果訂單。
第二正規化消除重複欄位
接著,我們要開始執行2NF。在這個階段,除了要符合1NF之外,還要消除部分相依(Partial Dependency),以減少資料重複和不一致性。部分相依,所指的是,在多重主鍵的情況下,有些資料只跟部分主鍵有直接關係,而不是跟每個主鍵都有關聯。基本上,經過1NF且主鍵僅有單一欄位的資料表,就能符合2NF的規範。
從完成1NF的水果訂單上,貨品名稱及單價這兩欄位,只跟貨品編號有相依性,而不是跟整個主鍵有關聯,這樣就會有部分相依的問題,所以我們需要執行2NF來解決。
第三正規化將非主鍵決定的欄位獨立成新表單
接著要開始3NF,這個步驟除了要滿足前面兩個正規化,還要消除資料表中的遞移相依(Transitive Dependency)。
遞移相依的意思,是說資料表單中,有些欄位資料內容,在一張表單裡面,可以由某一個「不是主鍵」的欄位決定,像我們在完成2NF的表單中,客戶名稱這個欄位,其實是由客戶編號決定的,而不是訂單編號,因此需要執行第三正規化。
完成上述步驟後,水果訂單就能符合3NF的規範,而經過這些處理後,該表單也就完成了資料表的正規化。

原作者:林郁翔

1 則留言:

blog marketing 提到...

飞龙搬家公司,是一家专业性北京搬家公司
,企业诚信,员工搬运专业,是北京搬家公司行业的后起新秀,公司长期为搬家免费纸箱。欢迎重询!
公兴上海搬场公司是经工商,税务,交通部注册的一家专业性的上海搬家公司,诚实信誉,工作细心,服务热情;为上海搬场,上海搬家的企业,如有需求,敬请垂询本搬场公司
海胜数码快印有限公司,致力于数码印刷,诚实信誉,实力雄厚,技术专业,设备先进,设计新颖,是北京数码印刷行业中新秀一支,愿做北京数码快印需求者的忠诚合作伙伴!
佳佳乐月嫂服务中心,精心提供月嫂服务,育儿嫂
服务,育婴师服务,本中心月嫂,育儿嫂,育婴师,均通过健康体验,经过严格培训,持证上岗.
华夏国际机票预定中心,全程代销各航机票
,特价机票,北京特价国际机票,留学生机票,打折机票,打折的价格,增值的服务
, 国际机票预订中心精心哈护你的远航!
星云科技,诚信于教育;研究出电子起电机,语音室,语言实验室,数字探究实验室,数字化实验室,探究实验室,系列探究实验配套设施,望广大院校前来考察!
北凝科技,废汽,余热回收,热力除氧改造,凝结水
治理专家,其推出的,定连排,烟囱余热回收器,乏汽回收,低位热力除氧器,凝结水回收器,冷凝水,
等系列产品.
北京防水堵漏公司、专业承接防水
防水堵漏地下室防水地下室堵漏北京防水北京防水堵漏北京防水公司北京防水网.防水堵漏专家! 工作心细,滴水不漏!
 北京爱福石材养护有限公司是专业从事石材翻新,石材结晶,石材护理,石材清洗,石材养护的企业,专业提供:石材翻新,石材结晶,石材清洗,石材护理,石材养护,石材无缝处理,石材防护,石材防滑,石材病症预防处理,石材修补,石材日常保养等业务.服务专线010-82922015

EasyReadMore